]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.12-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 22 Aug 2017 18:11:31 +0000 (11:11 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 22 Aug 2017 18:11:31 +0000 (11:11 -0700)
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

queue-4.12/debug-fix-warn_on_once-for-modules.patch [new file with mode: 0644]
queue-4.12/series
queue-4.12/usb-optimize-acpi-companion-search-for-usb-port-devices.patch [new file with mode: 0644]
queue-4.12/usb-qmi_wwan-add-d-link-dwm-222-device-id.patch [new file with mode: 0644]

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 (file)
index 0000000..33783dc
--- /dev/null
@@ -0,0 +1,230 @@
+From 325cdacd03c12629aa5f9ee2ace49b1f3dc184a8 Mon Sep 17 00:00:00 2001
+From: Josh Poimboeuf <jpoimboe@redhat.com>
+Date: Sat, 15 Jul 2017 00:10:58 -0500
+Subject: debug: Fix WARN_ON_ONCE() for modules
+
+From: Josh Poimboeuf <jpoimboe@redhat.com>
+
+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 <efault@gmx.de>
+Tested-by: Masami Hiramatsu <mhiramat@kernel.org>
+Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
+Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+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 <mingo@kernel.org>
+Signed-off-by: Changbin Du <changbin.du@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 <asm/asm-offsets.h>
+ #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"                                  \
index ac12d09f174abc39f861d6e733e263a26417bf46..e0b82c57caf787db74d9ad70215c4a866d935e55 100644 (file)
@@ -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 (file)
index 0000000..fb93e8e
--- /dev/null
@@ -0,0 +1,90 @@
+From ed18c5fa945768a9bec994e786edbbbc7695acf6 Mon Sep 17 00:00:00 2001
+From: Mathias Nyman <mathias.nyman@linux.intel.com>
+Date: Fri, 2 Jun 2017 16:36:26 +0300
+Subject: usb: optimize acpi companion search for usb port devices
+
+From: Mathias Nyman <mathias.nyman@linux.intel.com>
+
+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 <mathias.nyman@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..cd2c39d
--- /dev/null
@@ -0,0 +1,27 @@
+From bed9ff165960921303a100228585f2d1691b42eb Mon Sep 17 00:00:00 2001
+From: Hector Martin <marcan@marcan.st>
+Date: Wed, 2 Aug 2017 00:45:44 +0900
+Subject: usb: qmi_wwan: add D-Link DWM-222 device ID
+
+From: Hector Martin <marcan@marcan.st>
+
+commit bed9ff165960921303a100228585f2d1691b42eb upstream.
+
+Signed-off-by: Hector Martin <marcan@marcan.st>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 */