From a49f60add27beee29476d74eebe38c62e0bc6b90 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 22 Aug 2017 11:11:31 -0700 Subject: [PATCH] 4.12-stable patches added patches: debug-fix-warn_on_once-for-modules.patch usb-optimize-acpi-companion-search-for-usb-port-devices.patch usb-qmi_wwan-add-d-link-dwm-222-device-id.patch --- .../debug-fix-warn_on_once-for-modules.patch | 230 ++++++++++++++++++ queue-4.12/series | 3 + ...ompanion-search-for-usb-port-devices.patch | 90 +++++++ ...mi_wwan-add-d-link-dwm-222-device-id.patch | 27 ++ 4 files changed, 350 insertions(+) create mode 100644 queue-4.12/debug-fix-warn_on_once-for-modules.patch create mode 100644 queue-4.12/usb-optimize-acpi-companion-search-for-usb-port-devices.patch create mode 100644 queue-4.12/usb-qmi_wwan-add-d-link-dwm-222-device-id.patch diff --git a/queue-4.12/debug-fix-warn_on_once-for-modules.patch b/queue-4.12/debug-fix-warn_on_once-for-modules.patch new file mode 100644 index 00000000000..33783dcf580 --- /dev/null +++ b/queue-4.12/debug-fix-warn_on_once-for-modules.patch @@ -0,0 +1,230 @@ +From 325cdacd03c12629aa5f9ee2ace49b1f3dc184a8 Mon Sep 17 00:00:00 2001 +From: Josh Poimboeuf +Date: Sat, 15 Jul 2017 00:10:58 -0500 +Subject: debug: Fix WARN_ON_ONCE() for modules + +From: Josh Poimboeuf + +commit 325cdacd03c12629aa5f9ee2ace49b1f3dc184a8 upstream. + +Mike Galbraith reported a situation where a WARN_ON_ONCE() call in DRM +code turned into an oops. As it turns out, WARN_ON_ONCE() seems to be +completely broken when called from a module. + +The bug was introduced with the following commit: + + 19d436268dde ("debug: Add _ONCE() logic to report_bug()") + +That commit changed WARN_ON_ONCE() to move its 'once' logic into the bug +trap handler. It requires a writable bug table so that the BUGFLAG_DONE +bit can be written to the flags to indicate the first warning has +occurred. + +The bug table was made writable for vmlinux, which relies on +vmlinux.lds.S and vmlinux.lds.h for laying out the sections. However, +it wasn't made writable for modules, which rely on the ELF section +header flags. + +Reported-by: Mike Galbraith +Tested-by: Masami Hiramatsu +Signed-off-by: Josh Poimboeuf +Acked-by: Peter Zijlstra (Intel) +Cc: Linus Torvalds +Cc: Peter Zijlstra +Cc: Thomas Gleixner +Fixes: 19d436268dde ("debug: Add _ONCE() logic to report_bug()") +Link: http://lkml.kernel.org/r/a53b04235a65478dd9afc51f5b329fdc65c84364.1500095401.git.jpoimboe@redhat.com +Signed-off-by: Ingo Molnar +Signed-off-by: Changbin Du +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/include/asm/bug.h | 2 +- + arch/arm64/include/asm/bug.h | 2 +- + arch/blackfin/include/asm/bug.h | 4 ++-- + arch/mn10300/include/asm/bug.h | 2 +- + arch/parisc/include/asm/bug.h | 6 +++--- + arch/powerpc/include/asm/bug.h | 8 ++++---- + arch/s390/include/asm/bug.h | 4 ++-- + arch/sh/include/asm/bug.h | 4 ++-- + arch/x86/include/asm/bug.h | 4 ++-- + 9 files changed, 18 insertions(+), 18 deletions(-) + +--- a/arch/arm/include/asm/bug.h ++++ b/arch/arm/include/asm/bug.h +@@ -37,7 +37,7 @@ do { \ + ".pushsection .rodata.str, \"aMS\", %progbits, 1\n" \ + "2:\t.asciz " #__file "\n" \ + ".popsection\n" \ +- ".pushsection __bug_table,\"a\"\n" \ ++ ".pushsection __bug_table,\"aw\"\n" \ + ".align 2\n" \ + "3:\t.word 1b, 2b\n" \ + "\t.hword " #__line ", 0\n" \ +--- a/arch/arm64/include/asm/bug.h ++++ b/arch/arm64/include/asm/bug.h +@@ -36,7 +36,7 @@ + #ifdef CONFIG_GENERIC_BUG + + #define __BUG_ENTRY(flags) \ +- ".pushsection __bug_table,\"a\"\n\t" \ ++ ".pushsection __bug_table,\"aw\"\n\t" \ + ".align 2\n\t" \ + "0: .long 1f - 0b\n\t" \ + _BUGVERBOSE_LOCATION(__FILE__, __LINE__) \ +--- a/arch/blackfin/include/asm/bug.h ++++ b/arch/blackfin/include/asm/bug.h +@@ -21,7 +21,7 @@ + #define _BUG_OR_WARN(flags) \ + asm volatile( \ + "1: .hword %0\n" \ +- " .section __bug_table,\"a\",@progbits\n" \ ++ " .section __bug_table,\"aw\",@progbits\n" \ + "2: .long 1b\n" \ + " .long %1\n" \ + " .short %2\n" \ +@@ -38,7 +38,7 @@ + #define _BUG_OR_WARN(flags) \ + asm volatile( \ + "1: .hword %0\n" \ +- " .section __bug_table,\"a\",@progbits\n" \ ++ " .section __bug_table,\"aw\",@progbits\n" \ + "2: .long 1b\n" \ + " .short %1\n" \ + " .org 2b + %2\n" \ +--- a/arch/mn10300/include/asm/bug.h ++++ b/arch/mn10300/include/asm/bug.h +@@ -21,7 +21,7 @@ do { \ + asm volatile( \ + " syscall 15 \n" \ + "0: \n" \ +- " .section __bug_table,\"a\" \n" \ ++ " .section __bug_table,\"aw\" \n" \ + " .long 0b,%0,%1 \n" \ + " .previous \n" \ + : \ +--- a/arch/parisc/include/asm/bug.h ++++ b/arch/parisc/include/asm/bug.h +@@ -27,7 +27,7 @@ + do { \ + asm volatile("\n" \ + "1:\t" PARISC_BUG_BREAK_ASM "\n" \ +- "\t.pushsection __bug_table,\"a\"\n" \ ++ "\t.pushsection __bug_table,\"aw\"\n" \ + "2:\t" ASM_WORD_INSN "1b, %c0\n" \ + "\t.short %c1, %c2\n" \ + "\t.org 2b+%c3\n" \ +@@ -50,7 +50,7 @@ + do { \ + asm volatile("\n" \ + "1:\t" PARISC_BUG_BREAK_ASM "\n" \ +- "\t.pushsection __bug_table,\"a\"\n" \ ++ "\t.pushsection __bug_table,\"aw\"\n" \ + "2:\t" ASM_WORD_INSN "1b, %c0\n" \ + "\t.short %c1, %c2\n" \ + "\t.org 2b+%c3\n" \ +@@ -64,7 +64,7 @@ + do { \ + asm volatile("\n" \ + "1:\t" PARISC_BUG_BREAK_ASM "\n" \ +- "\t.pushsection __bug_table,\"a\"\n" \ ++ "\t.pushsection __bug_table,\"aw\"\n" \ + "2:\t" ASM_WORD_INSN "1b\n" \ + "\t.short %c0\n" \ + "\t.org 2b+%c1\n" \ +--- a/arch/powerpc/include/asm/bug.h ++++ b/arch/powerpc/include/asm/bug.h +@@ -18,7 +18,7 @@ + #include + #ifdef CONFIG_DEBUG_BUGVERBOSE + .macro EMIT_BUG_ENTRY addr,file,line,flags +- .section __bug_table,"a" ++ .section __bug_table,"aw" + 5001: PPC_LONG \addr, 5002f + .short \line, \flags + .org 5001b+BUG_ENTRY_SIZE +@@ -29,7 +29,7 @@ + .endm + #else + .macro EMIT_BUG_ENTRY addr,file,line,flags +- .section __bug_table,"a" ++ .section __bug_table,"aw" + 5001: PPC_LONG \addr + .short \flags + .org 5001b+BUG_ENTRY_SIZE +@@ -42,14 +42,14 @@ + sizeof(struct bug_entry), respectively */ + #ifdef CONFIG_DEBUG_BUGVERBOSE + #define _EMIT_BUG_ENTRY \ +- ".section __bug_table,\"a\"\n" \ ++ ".section __bug_table,\"aw\"\n" \ + "2:\t" PPC_LONG "1b, %0\n" \ + "\t.short %1, %2\n" \ + ".org 2b+%3\n" \ + ".previous\n" + #else + #define _EMIT_BUG_ENTRY \ +- ".section __bug_table,\"a\"\n" \ ++ ".section __bug_table,\"aw\"\n" \ + "2:\t" PPC_LONG "1b\n" \ + "\t.short %2\n" \ + ".org 2b+%3\n" \ +--- a/arch/s390/include/asm/bug.h ++++ b/arch/s390/include/asm/bug.h +@@ -14,7 +14,7 @@ + ".section .rodata.str,\"aMS\",@progbits,1\n" \ + "2: .asciz \""__FILE__"\"\n" \ + ".previous\n" \ +- ".section __bug_table,\"a\"\n" \ ++ ".section __bug_table,\"aw\"\n" \ + "3: .long 1b-3b,2b-3b\n" \ + " .short %0,%1\n" \ + " .org 3b+%2\n" \ +@@ -30,7 +30,7 @@ + asm volatile( \ + "0: j 0b+2\n" \ + "1:\n" \ +- ".section __bug_table,\"a\"\n" \ ++ ".section __bug_table,\"aw\"\n" \ + "2: .long 1b-2b\n" \ + " .short %0\n" \ + " .org 2b+%1\n" \ +--- a/arch/sh/include/asm/bug.h ++++ b/arch/sh/include/asm/bug.h +@@ -24,14 +24,14 @@ + */ + #ifdef CONFIG_DEBUG_BUGVERBOSE + #define _EMIT_BUG_ENTRY \ +- "\t.pushsection __bug_table,\"a\"\n" \ ++ "\t.pushsection __bug_table,\"aw\"\n" \ + "2:\t.long 1b, %O1\n" \ + "\t.short %O2, %O3\n" \ + "\t.org 2b+%O4\n" \ + "\t.popsection\n" + #else + #define _EMIT_BUG_ENTRY \ +- "\t.pushsection __bug_table,\"a\"\n" \ ++ "\t.pushsection __bug_table,\"aw\"\n" \ + "2:\t.long 1b\n" \ + "\t.short %O3\n" \ + "\t.org 2b+%O4\n" \ +--- a/arch/x86/include/asm/bug.h ++++ b/arch/x86/include/asm/bug.h +@@ -35,7 +35,7 @@ + #define _BUG_FLAGS(ins, flags) \ + do { \ + asm volatile("1:\t" ins "\n" \ +- ".pushsection __bug_table,\"a\"\n" \ ++ ".pushsection __bug_table,\"aw\"\n" \ + "2:\t" __BUG_REL(1b) "\t# bug_entry::bug_addr\n" \ + "\t" __BUG_REL(%c0) "\t# bug_entry::file\n" \ + "\t.word %c1" "\t# bug_entry::line\n" \ +@@ -52,7 +52,7 @@ do { \ + #define _BUG_FLAGS(ins, flags) \ + do { \ + asm volatile("1:\t" ins "\n" \ +- ".pushsection __bug_table,\"a\"\n" \ ++ ".pushsection __bug_table,\"aw\"\n" \ + "2:\t" __BUG_REL(1b) "\t# bug_entry::bug_addr\n" \ + "\t.word %c0" "\t# bug_entry::flags\n" \ + "\t.org 2b+%c1\n" \ diff --git a/queue-4.12/series b/queue-4.12/series index ac12d09f174..e0b82c57caf 100644 --- a/queue-4.12/series +++ b/queue-4.12/series @@ -36,3 +36,6 @@ genirq-ipi-fixup-checks-against-nr_cpu_ids.patch kernel-watchdog-prevent-false-positives-with-turbo-modes.patch sanitize-move_pages-permission-checks.patch pids-make-task_tgid_nr_ns-safe.patch +debug-fix-warn_on_once-for-modules.patch +usb-optimize-acpi-companion-search-for-usb-port-devices.patch +usb-qmi_wwan-add-d-link-dwm-222-device-id.patch diff --git a/queue-4.12/usb-optimize-acpi-companion-search-for-usb-port-devices.patch b/queue-4.12/usb-optimize-acpi-companion-search-for-usb-port-devices.patch new file mode 100644 index 00000000000..fb93e8eaf1b --- /dev/null +++ b/queue-4.12/usb-optimize-acpi-companion-search-for-usb-port-devices.patch @@ -0,0 +1,90 @@ +From ed18c5fa945768a9bec994e786edbbbc7695acf6 Mon Sep 17 00:00:00 2001 +From: Mathias Nyman +Date: Fri, 2 Jun 2017 16:36:26 +0300 +Subject: usb: optimize acpi companion search for usb port devices + +From: Mathias Nyman + +commit ed18c5fa945768a9bec994e786edbbbc7695acf6 upstream. + +This optimization significantly reduces xhci driver load time. + +In ACPI tables the acpi companion port devices are children of +the hub device. The port devices are identified by their port number +returned by the ACPI _ADR method. +_ADR 0 is reserved for the root hub device. + +The current implementation to find a acpi companion port device +loops through all acpi port devices under that parent hub, evaluating +their _ADR method each time a new port device is added. + +for a xHC controller with 25 ports under its roothub it +will end up invoking ACPI bytecode 625 times before all ports +are ready, making it really slow. + +The _ADR values are already read and cached earler. So instead of +running the bytecode again we can check the cached _ADR value first, +and then fall back to the old way. + +As one of the more significant changes, the xhci load time on +Intel kabylake reduced by 70%, (28ms) from +initcall xhci_pci_init+0x0/0x49 returned 0 after 39537 usecs +to +initcall xhci_pci_init+0x0/0x49 returned 0 after 11270 usecs + +Signed-off-by: Mathias Nyman +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/core/usb-acpi.c | 26 +++++++++++++++++++++++--- + 1 file changed, 23 insertions(+), 3 deletions(-) + +--- a/drivers/usb/core/usb-acpi.c ++++ b/drivers/usb/core/usb-acpi.c +@@ -127,6 +127,22 @@ out: + */ + #define USB_ACPI_LOCATION_VALID (1 << 31) + ++static struct acpi_device *usb_acpi_find_port(struct acpi_device *parent, ++ int raw) ++{ ++ struct acpi_device *adev; ++ ++ if (!parent) ++ return NULL; ++ ++ list_for_each_entry(adev, &parent->children, node) { ++ if (acpi_device_adr(adev) == raw) ++ return adev; ++ } ++ ++ return acpi_find_child_device(parent, raw, false); ++} ++ + static struct acpi_device *usb_acpi_find_companion(struct device *dev) + { + struct usb_device *udev; +@@ -174,8 +190,10 @@ static struct acpi_device *usb_acpi_find + int raw; + + raw = usb_hcd_find_raw_port_number(hcd, port1); +- adev = acpi_find_child_device(ACPI_COMPANION(&udev->dev), +- raw, false); ++ ++ adev = usb_acpi_find_port(ACPI_COMPANION(&udev->dev), ++ raw); ++ + if (!adev) + return NULL; + } else { +@@ -186,7 +204,9 @@ static struct acpi_device *usb_acpi_find + return NULL; + + acpi_bus_get_device(parent_handle, &adev); +- adev = acpi_find_child_device(adev, port1, false); ++ ++ adev = usb_acpi_find_port(adev, port1); ++ + if (!adev) + return NULL; + } diff --git a/queue-4.12/usb-qmi_wwan-add-d-link-dwm-222-device-id.patch b/queue-4.12/usb-qmi_wwan-add-d-link-dwm-222-device-id.patch new file mode 100644 index 00000000000..cd2c39d4829 --- /dev/null +++ b/queue-4.12/usb-qmi_wwan-add-d-link-dwm-222-device-id.patch @@ -0,0 +1,27 @@ +From bed9ff165960921303a100228585f2d1691b42eb Mon Sep 17 00:00:00 2001 +From: Hector Martin +Date: Wed, 2 Aug 2017 00:45:44 +0900 +Subject: usb: qmi_wwan: add D-Link DWM-222 device ID + +From: Hector Martin + +commit bed9ff165960921303a100228585f2d1691b42eb upstream. + +Signed-off-by: Hector Martin +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/usb/qmi_wwan.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/net/usb/qmi_wwan.c ++++ b/drivers/net/usb/qmi_wwan.c +@@ -1175,6 +1175,7 @@ static const struct usb_device_id produc + {QMI_FIXED_INTF(0x19d2, 0x1428, 2)}, /* Telewell TW-LTE 4G v2 */ + {QMI_FIXED_INTF(0x19d2, 0x2002, 4)}, /* ZTE (Vodafone) K3765-Z */ + {QMI_FIXED_INTF(0x2001, 0x7e19, 4)}, /* D-Link DWM-221 B1 */ ++ {QMI_FIXED_INTF(0x2001, 0x7e35, 4)}, /* D-Link DWM-222 */ + {QMI_FIXED_INTF(0x0f3d, 0x68a2, 8)}, /* Sierra Wireless MC7700 */ + {QMI_FIXED_INTF(0x114f, 0x68a2, 8)}, /* Sierra Wireless MC7750 */ + {QMI_FIXED_INTF(0x1199, 0x68a2, 8)}, /* Sierra Wireless MC7710 in QMI mode */ -- 2.47.3