From: Greg Kroah-Hartman Date: Tue, 13 May 2014 11:18:01 +0000 (+0200) Subject: 3.10-stable patches X-Git-Tag: v3.14.4~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9a3bb8b74b8b99bb36560f97ccac609eb9117440;p=thirdparty%2Fkernel%2Fstable-queue.git 3.10-stable patches added patches: arc-preempt-ensure-return-to-kernel-mode-is-irq-safe.patch --- diff --git a/queue-3.10/arc-preempt-ensure-return-to-kernel-mode-is-irq-safe.patch b/queue-3.10/arc-preempt-ensure-return-to-kernel-mode-is-irq-safe.patch new file mode 100644 index 00000000000..126d3f2cffa --- /dev/null +++ b/queue-3.10/arc-preempt-ensure-return-to-kernel-mode-is-irq-safe.patch @@ -0,0 +1,54 @@ +From 8aa9e85adac609588eeec356e5a85059b3b819ba Mon Sep 17 00:00:00 2001 +From: Vineet Gupta +Date: Wed, 30 Apr 2014 15:26:45 +0530 +Subject: ARC: !PREEMPT: Ensure Return to kernel mode is IRQ safe + +From: Vineet Gupta + +commit 8aa9e85adac609588eeec356e5a85059b3b819ba upstream. + +There was a very small race window where resume to kernel mode from a +Exception Path (or pure kernel mode which is true for most of ARC +exceptions anyways), was not disabling interrupts in restore_regs, +clobbering the exception regs + +Anton found the culprit call flow (after many sleepless nights) + +| 1. we got a Trap from user land +| 2. started to service it. +| 3. While doing some stuff on user-land memory (I think it is padzero()), +| we got a DataTlbMiss +| 4. On return from it we are taking "resume_kernel_mode" path +| 5. NEED_RESHED is not set, so we go to "return from exception" path in +| restore regs. +| 6. there seems to be IRQ happening + +Signed-off-by: Vineet Gupta +Cc: Anton Kolesov +Cc: Francois Bedard +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arc/kernel/entry.S | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +--- a/arch/arc/kernel/entry.S ++++ b/arch/arc/kernel/entry.S +@@ -651,11 +651,13 @@ resume_user_mode_begin: + + resume_kernel_mode: + +-#ifdef CONFIG_PREEMPT +- +- ; This is a must for preempt_schedule_irq() ++ ; Disable Interrupts from this point on ++ ; CONFIG_PREEMPT: This is a must for preempt_schedule_irq() ++ ; !CONFIG_PREEMPT: To ensure restore_regs is intr safe + IRQ_DISABLE r9 + ++#ifdef CONFIG_PREEMPT ++ + ; Can't preempt if preemption disabled + GET_CURR_THR_INFO_FROM_SP r10 + ld r8, [r10, THREAD_INFO_PREEMPT_COUNT] diff --git a/queue-3.10/series b/queue-3.10/series index 3c3619dcf13..f4efeae3a38 100644 --- a/queue-3.10/series +++ b/queue-3.10/series @@ -46,3 +46,4 @@ lockd-ensure-we-tear-down-any-live-sockets-when-socket-creation-fails-during-loc input-synaptics-add-min-max-quirk-for-thinkpad-t431s-l440-l540-s1-yoga-and-x1.patch input-synaptics-add-min-max-quirk-for-thinkpad-edge-e431.patch drm-cirrus-add-power-management-support.patch +arc-preempt-ensure-return-to-kernel-mode-is-irq-safe.patch