--- /dev/null
+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" \
--- /dev/null
+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;
+ }