]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 9 Sep 2018 08:46:58 +0000 (10:46 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 9 Sep 2018 08:46:58 +0000 (10:46 +0200)
added patches:
pci-add-wrappers-for-dev_printk.patch
printk-tracing-do-not-trace-printk_nmi_enter.patch

queue-4.9/pci-add-wrappers-for-dev_printk.patch [new file with mode: 0644]
queue-4.9/printk-tracing-do-not-trace-printk_nmi_enter.patch [new file with mode: 0644]
queue-4.9/series

diff --git a/queue-4.9/pci-add-wrappers-for-dev_printk.patch b/queue-4.9/pci-add-wrappers-for-dev_printk.patch
new file mode 100644 (file)
index 0000000..0ebf53b
--- /dev/null
@@ -0,0 +1,42 @@
+From 7506dc7989933235e6fc23f3d0516bdbf0f7d1a8 Mon Sep 17 00:00:00 2001
+From: Frederick Lawler <fred@fredlawl.com>
+Date: Thu, 18 Jan 2018 12:55:24 -0600
+Subject: PCI: Add wrappers for dev_printk()
+
+From: Frederick Lawler <fred@fredlawl.com>
+
+commit 7506dc7989933235e6fc23f3d0516bdbf0f7d1a8 upstream.
+
+Add PCI-specific dev_printk() wrappers and use them to simplify the code
+slightly.  No functional change intended.
+
+Signed-off-by: Frederick Lawler <fred@fredlawl.com>
+[bhelgaas: squash into one patch]
+Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
+[only take the pci.h portion of this patch, to make backporting stuff
+easier over time - gregkh]
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ include/linux/pci.h |   12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+--- a/include/linux/pci.h
++++ b/include/linux/pci.h
+@@ -2151,4 +2151,16 @@ static inline bool pci_ari_enabled(struc
+ /* provide the legacy pci_dma_* API */
+ #include <linux/pci-dma-compat.h>
++#define pci_printk(level, pdev, fmt, arg...) \
++      dev_printk(level, &(pdev)->dev, fmt, ##arg)
++
++#define pci_emerg(pdev, fmt, arg...)  dev_emerg(&(pdev)->dev, fmt, ##arg)
++#define pci_alert(pdev, fmt, arg...)  dev_alert(&(pdev)->dev, fmt, ##arg)
++#define pci_crit(pdev, fmt, arg...)   dev_crit(&(pdev)->dev, fmt, ##arg)
++#define pci_err(pdev, fmt, arg...)    dev_err(&(pdev)->dev, fmt, ##arg)
++#define pci_warn(pdev, fmt, arg...)   dev_warn(&(pdev)->dev, fmt, ##arg)
++#define pci_notice(pdev, fmt, arg...) dev_notice(&(pdev)->dev, fmt, ##arg)
++#define pci_info(pdev, fmt, arg...)   dev_info(&(pdev)->dev, fmt, ##arg)
++#define pci_dbg(pdev, fmt, arg...)    dev_dbg(&(pdev)->dev, fmt, ##arg)
++
+ #endif /* LINUX_PCI_H */
diff --git a/queue-4.9/printk-tracing-do-not-trace-printk_nmi_enter.patch b/queue-4.9/printk-tracing-do-not-trace-printk_nmi_enter.patch
new file mode 100644 (file)
index 0000000..daa856a
--- /dev/null
@@ -0,0 +1,106 @@
+From d1c392c9e2a301f38998a353f467f76414e38725 Mon Sep 17 00:00:00 2001
+From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
+Date: Wed, 5 Sep 2018 16:29:49 -0400
+Subject: printk/tracing: Do not trace printk_nmi_enter()
+
+From: Steven Rostedt (VMware) <rostedt@goodmis.org>
+
+commit d1c392c9e2a301f38998a353f467f76414e38725 upstream.
+
+I hit the following splat in my tests:
+
+------------[ cut here ]------------
+IRQs not enabled as expected
+WARNING: CPU: 3 PID: 0 at kernel/time/tick-sched.c:982 tick_nohz_idle_enter+0x44/0x8c
+Modules linked in: ip6t_REJECT nf_reject_ipv6 ip6table_filter ip6_tables ipv6
+CPU: 3 PID: 0 Comm: swapper/3 Not tainted 4.19.0-rc2-test+ #2
+Hardware name: MSI MS-7823/CSM-H87M-G43 (MS-7823), BIOS V1.6 02/22/2014
+EIP: tick_nohz_idle_enter+0x44/0x8c
+Code: ec 05 00 00 00 75 26 83 b8 c0 05 00 00 00 75 1d 80 3d d0 36 3e c1 00
+75 14 68 94 63 12 c1 c6 05 d0 36 3e c1 01 e8 04 ee f8 ff <0f> 0b 58 fa bb a0
+e5 66 c1 e8 25 0f 04 00 64 03 1d 28 31 52 c1 8b
+EAX: 0000001c EBX: f26e7f8c ECX: 00000006 EDX: 00000007
+ESI: f26dd1c0 EDI: 00000000 EBP: f26e7f40 ESP: f26e7f38
+DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 EFLAGS: 00010296
+CR0: 80050033 CR2: 0813c6b0 CR3: 2f342000 CR4: 001406f0
+Call Trace:
+ do_idle+0x33/0x202
+ cpu_startup_entry+0x61/0x63
+ start_secondary+0x18e/0x1ed
+ startup_32_smp+0x164/0x168
+irq event stamp: 18773830
+hardirqs last  enabled at (18773829): [<c040150c>] trace_hardirqs_on_thunk+0xc/0x10
+hardirqs last disabled at (18773830): [<c040151c>] trace_hardirqs_off_thunk+0xc/0x10
+softirqs last  enabled at (18773824): [<c0ddaa6f>] __do_softirq+0x25f/0x2bf
+softirqs last disabled at (18773767): [<c0416bbe>] call_on_stack+0x45/0x4b
+---[ end trace b7c64aa79e17954a ]---
+
+After a bit of debugging, I found what was happening. This would trigger
+when performing "perf" with a high NMI interrupt rate, while enabling and
+disabling function tracer. Ftrace uses breakpoints to convert the nops at
+the start of functions to calls to the function trampolines. The breakpoint
+traps disable interrupts and this makes calls into lockdep via the
+trace_hardirqs_off_thunk in the entry.S code. What happens is the following:
+
+  do_idle {
+
+    [interrupts enabled]
+
+    <interrupt> [interrupts disabled]
+       TRACE_IRQS_OFF [lockdep says irqs off]
+       [...]
+       TRACE_IRQS_IRET
+           test if pt_regs say return to interrupts enabled [yes]
+           TRACE_IRQS_ON [lockdep says irqs are on]
+
+           <nmi>
+               nmi_enter() {
+                   printk_nmi_enter() [traced by ftrace]
+                   [ hit ftrace breakpoint ]
+                   <breakpoint exception>
+                       TRACE_IRQS_OFF [lockdep says irqs off]
+                       [...]
+                       TRACE_IRQS_IRET [return from breakpoint]
+                          test if pt_regs say interrupts enabled [no]
+                          [iret back to interrupt]
+          [iret back to code]
+
+    tick_nohz_idle_enter() {
+
+       lockdep_assert_irqs_enabled() [lockdep say no!]
+
+Although interrupts are indeed enabled, lockdep thinks it is not, and since
+we now do asserts via lockdep, it gives a false warning. The issue here is
+that printk_nmi_enter() is called before lockdep_off(), which disables
+lockdep (for this reason) in NMIs. By simply not allowing ftrace to see
+printk_nmi_enter() (via notrace annotation) we keep lockdep from getting
+confused.
+
+Cc: stable@vger.kernel.org
+Fixes: 42a0bb3f71383 ("printk/nmi: generic solution for safe printk in NMI")
+Acked-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
+Acked-by: Petr Mladek <pmladek@suse.com>
+Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ kernel/printk/nmi.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/kernel/printk/nmi.c
++++ b/kernel/printk/nmi.c
+@@ -260,12 +260,12 @@ void __init printk_nmi_init(void)
+       printk_nmi_flush();
+ }
+-void printk_nmi_enter(void)
++void notrace printk_nmi_enter(void)
+ {
+       this_cpu_write(printk_func, vprintk_nmi);
+ }
+-void printk_nmi_exit(void)
++void notrace printk_nmi_exit(void)
+ {
+       this_cpu_write(printk_func, vprintk_default);
+ }
index b3fa86d51a8d9a496d2efc6842263f3192c48611..ed8eea14385beb4f33ad963ad1d78a2604869722 100644 (file)
@@ -8,6 +8,7 @@ libertas-fix-suspend-and-resume-for-sdio-connected-cards.patch
 mailbox-xgene-slimpro-fix-potential-null-pointer-dereference.patch
 powerpc-fadump-handle-crash-memory-ranges-array-index-overflow.patch
 powerpc-pseries-fix-endianness-while-restoring-of-r3-in-mce-handler.patch
+pci-add-wrappers-for-dev_printk.patch
 powerpc-powernv-pci-work-around-races-in-pci-bridge-enabling.patch
 cxl-fix-wrong-comparison-in-cxl_adapter_context_get.patch
 ib_srpt-fix-a-use-after-free-in-srpt_close_ch.patch