From: Greg Kroah-Hartman Date: Thu, 11 Oct 2018 07:29:39 +0000 (+0200) Subject: 4.18-stable patches X-Git-Tag: v3.18.124~33 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=01460e653a21f216f146539b42633f565a8f4fda;p=thirdparty%2Fkernel%2Fstable-queue.git 4.18-stable patches added patches: of-unittest-disable-interrupt-node-tests-for-old-world-mac-systems.patch --- diff --git a/queue-4.18/of-unittest-disable-interrupt-node-tests-for-old-world-mac-systems.patch b/queue-4.18/of-unittest-disable-interrupt-node-tests-for-old-world-mac-systems.patch new file mode 100644 index 00000000000..69a45b47b05 --- /dev/null +++ b/queue-4.18/of-unittest-disable-interrupt-node-tests-for-old-world-mac-systems.patch @@ -0,0 +1,120 @@ +From 8894891446c9380709451b99ab45c5c53adfd2fc Mon Sep 17 00:00:00 2001 +From: Guenter Roeck +Date: Tue, 25 Sep 2018 21:06:24 -0700 +Subject: of: unittest: Disable interrupt node tests for old world MAC systems + +From: Guenter Roeck + +commit 8894891446c9380709451b99ab45c5c53adfd2fc upstream. + +On systems with OF_IMAP_OLDWORLD_MAC set in of_irq_workarounds, the +devicetree interrupt parsing code is different, causing unit tests of +devicetree interrupt nodes to fail. Due to a bug in unittest code, which +tries to dereference an uninitialized pointer, this results in a crash. + +OF: /testcase-data/phandle-tests/consumer-a: arguments longer than property +Unable to handle kernel paging request for data at address 0x00bc616e +Faulting instruction address: 0xc08e9468 +Oops: Kernel access of bad area, sig: 11 [#1] +BE PREEMPT PowerMac +Modules linked in: +CPU: 0 PID: 1 Comm: swapper Not tainted 4.14.72-rc1-yocto-standard+ #1 +task: cf8e0000 task.stack: cf8da000 +NIP: c08e9468 LR: c08ea5bc CTR: c08ea5ac +REGS: cf8dbb50 TRAP: 0300 Not tainted (4.14.72-rc1-yocto-standard+) +MSR: 00001032 CR: 82004044 XER: 00000000 +DAR: 00bc616e DSISR: 40000000 +GPR00: c08ea5bc cf8dbc00 cf8e0000 c13ca517 c13ca517 c13ca8a0 00000066 00000002 +GPR08: 00000063 00bc614e c0b05865 000affff 82004048 00000000 c00047f0 00000000 +GPR16: c0a80000 c0a9cc34 c13ca517 c0ad1134 05ffffff 000affff c0b05860 c0abeef8 +GPR24: cecec278 cecec278 c0a8c4d0 c0a885e0 c13ca8a0 05ffffff c13ca8a0 c13ca517 + +NIP [c08e9468] device_node_gen_full_name+0x30/0x15c +LR [c08ea5bc] device_node_string+0x190/0x3c8 +Call Trace: +[cf8dbc00] [c007f670] trace_hardirqs_on_caller+0x118/0x1fc (unreliable) +[cf8dbc40] [c08ea5bc] device_node_string+0x190/0x3c8 +[cf8dbcb0] [c08eb794] pointer+0x25c/0x4d0 +[cf8dbd00] [c08ebcbc] vsnprintf+0x2b4/0x5ec +[cf8dbd60] [c08ec00c] vscnprintf+0x18/0x48 +[cf8dbd70] [c008e268] vprintk_store+0x4c/0x22c +[cf8dbda0] [c008ecac] vprintk_emit+0x94/0x130 +[cf8dbdd0] [c008ff54] printk+0x5c/0x6c +[cf8dbe10] [c0b8ddd4] of_unittest+0x2220/0x26f8 +[cf8dbea0] [c0004434] do_one_initcall+0x4c/0x184 +[cf8dbf00] [c0b4534c] kernel_init_freeable+0x13c/0x1d8 +[cf8dbf30] [c0004814] kernel_init+0x24/0x118 +[cf8dbf40] [c0013398] ret_from_kernel_thread+0x5c/0x64 + +The problem was observed when running a qemu test for the g3beige machine +with devicetree unittests enabled. + +Disable interrupt node tests on affected systems to avoid both false +unittest failures and the crash. + +With this patch in place, unittest on the affected system passes with +the following message. + + dt-test ### end of unittest - 144 passed, 0 failed + +Fixes: 53a42093d96ef ("of: Add device tree selftests") +Signed-off-by: Guenter Roeck +Reviewed-by: Frank Rowand +Signed-off-by: Rob Herring +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/of/unittest.c | 28 +++++++++++++++++++--------- + 1 file changed, 19 insertions(+), 9 deletions(-) + +--- a/drivers/of/unittest.c ++++ b/drivers/of/unittest.c +@@ -771,6 +771,9 @@ static void __init of_unittest_parse_int + struct of_phandle_args args; + int i, rc; + ++ if (of_irq_workarounds & OF_IMAP_OLDWORLD_MAC) ++ return; ++ + np = of_find_node_by_path("/testcase-data/interrupts/interrupts0"); + if (!np) { + pr_err("missing testcase data\n"); +@@ -845,6 +848,9 @@ static void __init of_unittest_parse_int + struct of_phandle_args args; + int i, rc; + ++ if (of_irq_workarounds & OF_IMAP_OLDWORLD_MAC) ++ return; ++ + np = of_find_node_by_path("/testcase-data/interrupts/interrupts-extended0"); + if (!np) { + pr_err("missing testcase data\n"); +@@ -1001,15 +1007,19 @@ static void __init of_unittest_platform_ + pdev = of_find_device_by_node(np); + unittest(pdev, "device 1 creation failed\n"); + +- irq = platform_get_irq(pdev, 0); +- unittest(irq == -EPROBE_DEFER, "device deferred probe failed - %d\n", irq); +- +- /* Test that a parsing failure does not return -EPROBE_DEFER */ +- np = of_find_node_by_path("/testcase-data/testcase-device2"); +- pdev = of_find_device_by_node(np); +- unittest(pdev, "device 2 creation failed\n"); +- irq = platform_get_irq(pdev, 0); +- unittest(irq < 0 && irq != -EPROBE_DEFER, "device parsing error failed - %d\n", irq); ++ if (!(of_irq_workarounds & OF_IMAP_OLDWORLD_MAC)) { ++ irq = platform_get_irq(pdev, 0); ++ unittest(irq == -EPROBE_DEFER, ++ "device deferred probe failed - %d\n", irq); ++ ++ /* Test that a parsing failure does not return -EPROBE_DEFER */ ++ np = of_find_node_by_path("/testcase-data/testcase-device2"); ++ pdev = of_find_device_by_node(np); ++ unittest(pdev, "device 2 creation failed\n"); ++ irq = platform_get_irq(pdev, 0); ++ unittest(irq < 0 && irq != -EPROBE_DEFER, ++ "device parsing error failed - %d\n", irq); ++ } + + np = of_find_node_by_path("/testcase-data/platform-tests"); + unittest(np, "No testcase data in device tree\n"); diff --git a/queue-4.18/series b/queue-4.18/series index 18afe4c17c1..ce280073a67 100644 --- a/queue-4.18/series +++ b/queue-4.18/series @@ -32,3 +32,4 @@ usb-serial-option-improve-quectel-ep06-detection.patch usb-serial-option-add-two-endpoints-device-id-flag.patch usb-cdc_acm-do-not-leak-urb-buffers.patch tty-drop-tty-count-on-tty_reopen-failure.patch +of-unittest-disable-interrupt-node-tests-for-old-world-mac-systems.patch