]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 4.4
authorSasha Levin <sashal@kernel.org>
Sun, 13 Dec 2020 23:22:41 +0000 (18:22 -0500)
committerSasha Levin <sashal@kernel.org>
Sun, 13 Dec 2020 23:22:41 +0000 (18:22 -0500)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-4.4/arc-stack-unwinding-don-t-assume-non-current-task-is.patch [new file with mode: 0644]
queue-4.4/platform-x86-acer-wmi-add-automatic-keyboard-backgro.patch [new file with mode: 0644]
queue-4.4/series

diff --git a/queue-4.4/arc-stack-unwinding-don-t-assume-non-current-task-is.patch b/queue-4.4/arc-stack-unwinding-don-t-assume-non-current-task-is.patch
new file mode 100644 (file)
index 0000000..ee6c69b
--- /dev/null
@@ -0,0 +1,96 @@
+From cfead30081c5747312c1ed45c8ecd65a5f800c0b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 6 Nov 2020 16:59:27 -0800
+Subject: ARC: stack unwinding: don't assume non-current task is sleeping
+
+From: Vineet Gupta <vgupta@synopsys.com>
+
+[ Upstream commit e42404fa10fd11fe72d0a0e149a321d10e577715 ]
+
+To start stack unwinding (SP, PC and BLINK) are needed. When the
+explicit execution context (pt_regs etc) is not available, unwinder
+assumes the task is sleeping (in __switch_to()) and fetches SP and BLINK
+from kernel mode stack.
+
+But this assumption is not true, specially in a SMP system, when top
+runs on 1 core, there may be active running processes on all cores.
+
+So when unwinding non courrent tasks, ensure they are NOT running.
+
+And while at it, handle the self unwinding case explicitly.
+
+This came out of investigation of a customer reported hang with
+rcutorture+top
+
+Link: https://github.com/foss-for-synopsys-dwc-arc-processors/linux/issues/31
+Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arc/kernel/stacktrace.c | 23 +++++++++++++++--------
+ 1 file changed, 15 insertions(+), 8 deletions(-)
+
+diff --git a/arch/arc/kernel/stacktrace.c b/arch/arc/kernel/stacktrace.c
+index 5401e2bab3da2..054511f571dfd 100644
+--- a/arch/arc/kernel/stacktrace.c
++++ b/arch/arc/kernel/stacktrace.c
+@@ -39,15 +39,15 @@
+ #ifdef CONFIG_ARC_DW2_UNWIND
+-static void seed_unwind_frame_info(struct task_struct *tsk,
+-                                 struct pt_regs *regs,
+-                                 struct unwind_frame_info *frame_info)
++static int
++seed_unwind_frame_info(struct task_struct *tsk, struct pt_regs *regs,
++                     struct unwind_frame_info *frame_info)
+ {
+       /*
+        * synchronous unwinding (e.g. dump_stack)
+        *  - uses current values of SP and friends
+        */
+-      if (tsk == NULL && regs == NULL) {
++      if (regs == NULL && (tsk == NULL || tsk == current)) {
+               unsigned long fp, sp, blink, ret;
+               frame_info->task = current;
+@@ -66,11 +66,15 @@ static void seed_unwind_frame_info(struct task_struct *tsk,
+               frame_info->call_frame = 0;
+       } else if (regs == NULL) {
+               /*
+-               * Asynchronous unwinding of sleeping task
+-               *  - Gets SP etc from task's pt_regs (saved bottom of kernel
+-               *    mode stack of task)
++               * Asynchronous unwinding of a likely sleeping task
++               *  - first ensure it is actually sleeping
++               *  - if so, it will be in __switch_to, kernel mode SP of task
++               *    is safe-kept and BLINK at a well known location in there
+                */
++              if (tsk->state == TASK_RUNNING)
++                      return -1;
++
+               frame_info->task = tsk;
+               frame_info->regs.r27 = TSK_K_FP(tsk);
+@@ -104,6 +108,8 @@ static void seed_unwind_frame_info(struct task_struct *tsk,
+               frame_info->regs.r63 = regs->ret;
+               frame_info->call_frame = 0;
+       }
++
++      return 0;
+ }
+ #endif
+@@ -117,7 +123,8 @@ arc_unwind_core(struct task_struct *tsk, struct pt_regs *regs,
+       unsigned int address;
+       struct unwind_frame_info frame_info;
+-      seed_unwind_frame_info(tsk, regs, &frame_info);
++      if (seed_unwind_frame_info(tsk, regs, &frame_info))
++              return 0;
+       while (1) {
+               address = UNW_PC(&frame_info);
+-- 
+2.27.0
+
diff --git a/queue-4.4/platform-x86-acer-wmi-add-automatic-keyboard-backgro.patch b/queue-4.4/platform-x86-acer-wmi-add-automatic-keyboard-backgro.patch
new file mode 100644 (file)
index 0000000..551382d
--- /dev/null
@@ -0,0 +1,38 @@
+From 4a38bd98aaae41acddb82e51e2ddf5eee6d2f52a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 4 Aug 2020 02:14:23 +0200
+Subject: platform/x86: acer-wmi: add automatic keyboard background light
+ toggle key as KEY_LIGHTS_TOGGLE
+
+From: Timo Witte <timo.witte@gmail.com>
+
+[ Upstream commit 9e7a005ad56aa7d6ea5830c5ffcc60bf35de380b ]
+
+Got a dmesg message on my AMD Renoir based Acer laptop:
+"acer_wmi: Unknown key number - 0x84" when toggling keyboard
+background light
+
+Signed-off-by: Timo Witte <timo.witte@gmail.com>
+Reviewed-by: "Lee, Chun-Yi" <jlee@suse.com>
+Link: https://lore.kernel.org/r/20200804001423.36778-1-timo.witte@gmail.com
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/platform/x86/acer-wmi.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
+index 5c169a837ebdf..b336f2620f9dc 100644
+--- a/drivers/platform/x86/acer-wmi.c
++++ b/drivers/platform/x86/acer-wmi.c
+@@ -124,6 +124,7 @@ static const struct key_entry acer_wmi_keymap[] __initconst = {
+       {KE_KEY, 0x64, {KEY_SWITCHVIDEOMODE} }, /* Display Switch */
+       {KE_IGNORE, 0x81, {KEY_SLEEP} },
+       {KE_KEY, 0x82, {KEY_TOUCHPAD_TOGGLE} }, /* Touch Pad Toggle */
++      {KE_IGNORE, 0x84, {KEY_KBDILLUMTOGGLE} }, /* Automatic Keyboard background light toggle */
+       {KE_KEY, KEY_TOUCHPAD_ON, {KEY_TOUCHPAD_ON} },
+       {KE_KEY, KEY_TOUCHPAD_OFF, {KEY_TOUCHPAD_OFF} },
+       {KE_IGNORE, 0x83, {KEY_TOUCHPAD_TOGGLE} },
+-- 
+2.27.0
+
index 855d88493583a44f330b2b71cadb33748141105e..ad06aed10686b33d4cfeab9e5214010e05032d69 100644 (file)
@@ -1,2 +1,4 @@
 spi-bcm2835aux-fix-use-after-free-on-unbind.patch
 spi-bcm2835aux-restore-err-assignment-in-bcm2835aux_spi_probe.patch
+arc-stack-unwinding-don-t-assume-non-current-task-is.patch
+platform-x86-acer-wmi-add-automatic-keyboard-backgro.patch