From: Greg Kroah-Hartman Date: Sun, 9 Sep 2018 08:46:58 +0000 (+0200) Subject: 4.9-stable patches X-Git-Tag: v4.14.69~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f8a8ec3d1fa26359c6872aa459c29207553a8b86;p=thirdparty%2Fkernel%2Fstable-queue.git 4.9-stable patches added patches: pci-add-wrappers-for-dev_printk.patch printk-tracing-do-not-trace-printk_nmi_enter.patch --- 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 index 00000000000..0ebf53be18d --- /dev/null +++ b/queue-4.9/pci-add-wrappers-for-dev_printk.patch @@ -0,0 +1,42 @@ +From 7506dc7989933235e6fc23f3d0516bdbf0f7d1a8 Mon Sep 17 00:00:00 2001 +From: Frederick Lawler +Date: Thu, 18 Jan 2018 12:55:24 -0600 +Subject: PCI: Add wrappers for dev_printk() + +From: Frederick Lawler + +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 +[bhelgaas: squash into one patch] +Signed-off-by: Bjorn Helgaas +[only take the pci.h portion of this patch, to make backporting stuff +easier over time - gregkh] +Signed-off-by: Greg Kroah-Hartman + +--- + 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 + ++#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 index 00000000000..daa856a4ae6 --- /dev/null +++ b/queue-4.9/printk-tracing-do-not-trace-printk_nmi_enter.patch @@ -0,0 +1,106 @@ +From d1c392c9e2a301f38998a353f467f76414e38725 Mon Sep 17 00:00:00 2001 +From: "Steven Rostedt (VMware)" +Date: Wed, 5 Sep 2018 16:29:49 -0400 +Subject: printk/tracing: Do not trace printk_nmi_enter() + +From: Steven Rostedt (VMware) + +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): [] trace_hardirqs_on_thunk+0xc/0x10 +hardirqs last disabled at (18773830): [] trace_hardirqs_off_thunk+0xc/0x10 +softirqs last enabled at (18773824): [] __do_softirq+0x25f/0x2bf +softirqs last disabled at (18773767): [] 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] + + [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_enter() { + printk_nmi_enter() [traced by ftrace] + [ hit ftrace breakpoint ] + + 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 +Acked-by: Petr Mladek +Signed-off-by: Steven Rostedt (VMware) +Signed-off-by: Greg Kroah-Hartman + +--- + 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); + } diff --git a/queue-4.9/series b/queue-4.9/series index b3fa86d51a8..ed8eea14385 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -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