From cff3d0ccbe6d289bfb1ec4cb46605833a487af73 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 22 Aug 2017 11:11:46 -0700 Subject: [PATCH] 4.9-stable patches added patches: usb-optimize-acpi-companion-search-for-usb-port-devices.patch usb-qmi_wwan-add-d-link-dwm-222-device-id.patch --- queue-4.9/series | 3 + ...ompanion-search-for-usb-port-devices.patch | 90 +++++++++++++++++++ ...mi_wwan-add-d-link-dwm-222-device-id.patch | 27 ++++++ 3 files changed, 120 insertions(+) create mode 100644 queue-4.9/usb-optimize-acpi-companion-search-for-usb-port-devices.patch create mode 100644 queue-4.9/usb-qmi_wwan-add-d-link-dwm-222-device-id.patch diff --git a/queue-4.9/series b/queue-4.9/series index a0648c32f01..e4cc516a085 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -22,3 +22,6 @@ irqchip-atmel-aic-fix-unbalanced-refcount-in-aic_common_rtc_irq_fixup.patch genirq-restore-trigger-settings-in-irq_modify_status.patch genirq-ipi-fixup-checks-against-nr_cpu_ids.patch sanitize-move_pages-permission-checks.patch +pids-make-task_tgid_nr_ns-safe.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.9/usb-optimize-acpi-companion-search-for-usb-port-devices.patch b/queue-4.9/usb-optimize-acpi-companion-search-for-usb-port-devices.patch new file mode 100644 index 00000000000..fb93e8eaf1b --- /dev/null +++ b/queue-4.9/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.9/usb-qmi_wwan-add-d-link-dwm-222-device-id.patch b/queue-4.9/usb-qmi_wwan-add-d-link-dwm-222-device-id.patch new file mode 100644 index 00000000000..39d9dcfc131 --- /dev/null +++ b/queue-4.9/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 +@@ -876,6 +876,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