diff --git a/debian/changelog b/debian/changelog index 6b4cfbdc6..105b1a547 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,9 @@ -linux (4.14.9-1) UNRELEASED; urgency=medium +linux (4.14.10-1) UNRELEASED; urgency=medium * New upstream stable update: https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.14.8 https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.14.9 + https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.14.10 [ Ben Hutchings ] * e1000e: Fix e1000_check_for_copper_link_ich8lan return value. diff --git a/debian/patches/features/all/rt/block-mq-don-t-complete-requests-via-IPI.patch b/debian/patches/features/all/rt/block-mq-don-t-complete-requests-via-IPI.patch index ba91fe2c1..2684dd211 100644 --- a/debian/patches/features/all/rt/block-mq-don-t-complete-requests-via-IPI.patch +++ b/debian/patches/features/all/rt/block-mq-don-t-complete-requests-via-IPI.patch @@ -103,5 +103,5 @@ Signed-off-by: Sebastian Andrzej Siewior + struct work_struct work; +#endif union { - call_single_data_t csd; + struct __call_single_data csd; u64 fifo_time; diff --git a/debian/patches/features/all/rt/crypto-mcryptd-protect-the-per-CPU-queue-with-a-lock.patch b/debian/patches/features/all/rt/crypto-mcryptd-protect-the-per-CPU-queue-with-a-lock.patch deleted file mode 100644 index fc67156bf..000000000 --- a/debian/patches/features/all/rt/crypto-mcryptd-protect-the-per-CPU-queue-with-a-lock.patch +++ /dev/null @@ -1,107 +0,0 @@ -From: Sebastian Andrzej Siewior -Date: Thu, 30 Nov 2017 13:03:09 +0100 -Subject: [PATCH] crypto: mcryptd: protect the per-CPU queue with a lock -Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.14/older/patches-4.14.8-rt9.tar.xz - -mcryptd_enqueue_request() grabs the per-CPU queue struct and protects -access to it with disabled preemption. Then it schedules a worker on the -same CPU. The worker in mcryptd_queue_worker() guards access to the same -per-CPU variable with disabled preemption. - -If we take CPU-hotplug into account then it is possible that between -queue_work_on() and the actual invocation of the worker the CPU goes -down and the worker will be scheduled on _another_ CPU. And here the -preempt_disable() protection does not work anymore. The easiest thing is -to add a spin_lock() to guard access to the list. - -Another detail: mcryptd_queue_worker() is not processing more than -MCRYPTD_BATCH invocation in a row. If there are still items left, then -it will invoke queue_work() to proceed with more later. *I* would -suggest to simply drop that check because it does not use a system -workqueue and the workqueue is already marked as "CPU_INTENSIVE". And if -preemption is required then the scheduler should do it. -However if queue_work() is used then to work item is marked as CPU -unbound. That means it will try to run on the local CPU but it may run -on another CPU as well. Especially with CONFIG_DEBUG_WQ_FORCE_RR_CPU=y. -Again, the preempt_disable() won't work here but lock which was -introduced will help. -In order to keep work-item on the local CPU (and avoid RR) I changed it -to queue_work_on(). - -Cc: stable-rt@vger.kernel.org -Signed-off-by: Sebastian Andrzej Siewior ---- - crypto/mcryptd.c | 23 ++++++++++------------- - include/crypto/mcryptd.h | 1 + - 2 files changed, 11 insertions(+), 13 deletions(-) - ---- a/crypto/mcryptd.c -+++ b/crypto/mcryptd.c -@@ -81,6 +81,7 @@ static int mcryptd_init_queue(struct mcr - pr_debug("cpu_queue #%d %p\n", cpu, queue->cpu_queue); - crypto_init_queue(&cpu_queue->queue, max_cpu_qlen); - INIT_WORK(&cpu_queue->work, mcryptd_queue_worker); -+ spin_lock_init(&cpu_queue->q_lock); - } - return 0; - } -@@ -104,15 +105,16 @@ static int mcryptd_enqueue_request(struc - int cpu, err; - struct mcryptd_cpu_queue *cpu_queue; - -- cpu = get_cpu(); -- cpu_queue = this_cpu_ptr(queue->cpu_queue); -- rctx->tag.cpu = cpu; -+ cpu_queue = raw_cpu_ptr(queue->cpu_queue); -+ spin_lock(&cpu_queue->q_lock); -+ cpu = smp_processor_id(); -+ rctx->tag.cpu = smp_processor_id(); - - err = crypto_enqueue_request(&cpu_queue->queue, request); - pr_debug("enqueue request: cpu %d cpu_queue %p request %p\n", - cpu, cpu_queue, request); -+ spin_unlock(&cpu_queue->q_lock); - queue_work_on(cpu, kcrypto_wq, &cpu_queue->work); -- put_cpu(); - - return err; - } -@@ -161,16 +163,11 @@ static void mcryptd_queue_worker(struct - cpu_queue = container_of(work, struct mcryptd_cpu_queue, work); - i = 0; - while (i < MCRYPTD_BATCH || single_task_running()) { -- /* -- * preempt_disable/enable is used to prevent -- * being preempted by mcryptd_enqueue_request() -- */ -- local_bh_disable(); -- preempt_disable(); -+ -+ spin_lock_bh(&cpu_queue->q_lock); - backlog = crypto_get_backlog(&cpu_queue->queue); - req = crypto_dequeue_request(&cpu_queue->queue); -- preempt_enable(); -- local_bh_enable(); -+ spin_unlock_bh(&cpu_queue->q_lock); - - if (!req) { - mcryptd_opportunistic_flush(); -@@ -185,7 +182,7 @@ static void mcryptd_queue_worker(struct - ++i; - } - if (cpu_queue->queue.qlen) -- queue_work(kcrypto_wq, &cpu_queue->work); -+ queue_work_on(smp_processor_id(), kcrypto_wq, &cpu_queue->work); - } - - void mcryptd_flusher(struct work_struct *__work) ---- a/include/crypto/mcryptd.h -+++ b/include/crypto/mcryptd.h -@@ -27,6 +27,7 @@ static inline struct mcryptd_ahash *__mc - - struct mcryptd_cpu_queue { - struct crypto_queue queue; -+ spinlock_t q_lock; - struct work_struct work; - }; - diff --git a/debian/patches/series-rt b/debian/patches/series-rt index 5244ae45d..a4a279318 100644 --- a/debian/patches/series-rt +++ b/debian/patches/series-rt @@ -87,7 +87,6 @@ features/all/rt/Bluetooth-avoid-recursive-locking-in-hci_send_to_cha.patch features/all/rt/iommu-iova-Use-raw_cpu_ptr-instead-of-get_cpu_ptr-fo.patch features/all/rt/greybus-audio-don-t-inclide-rwlock.h-directly.patch features/all/rt/xen-9pfs-don-t-inclide-rwlock.h-directly.patch -features/all/rt/crypto-mcryptd-protect-the-per-CPU-queue-with-a-lock.patch features/all/rt/tty-goldfish-Enable-earlycon-only-if-built-in.patch features/all/rt/drm-i915-properly-init-lockdep-class.patch