From 7c3600690137933234a9f18c2b07ce4329de662c Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 18 Dec 2013 10:21:32 -0800 Subject: [PATCH] 3.4-stable patches added patches: futex-fix-handling-of-read-only-mapped-hugepages.patch input-usbtouchscreen-separate-report-and-transmit-buffer-size-handling.patch usb-dwc3-fix-implementation-of-endpoint-wedge.patch usb-gadget-composite-reset-delayed_status-on-reset_config.patch usb-hub-use-correct-reset-for-wedged-usb3-devices-that-are-notattached.patch usb-option-support-new-huawei-devices.patch usb-serial-option-blacklist-interface-1-for-huawei-e173s-6.patch --- ...ndling-of-read-only-mapped-hugepages.patch | 44 +++++++++ ...rt-and-transmit-buffer-size-handling.patch | 94 +++++++++++++++++++ queue-3.4/series | 7 ++ ...fix-implementation-of-endpoint-wedge.patch | 58 ++++++++++++ ...reset-delayed_status-on-reset_config.patch | 32 +++++++ ...ed-usb3-devices-that-are-notattached.patch | 37 ++++++++ ...sb-option-support-new-huawei-devices.patch | 87 +++++++++++++++++ ...klist-interface-1-for-huawei-e173s-6.patch | 43 +++++++++ 8 files changed, 402 insertions(+) create mode 100644 queue-3.4/futex-fix-handling-of-read-only-mapped-hugepages.patch create mode 100644 queue-3.4/input-usbtouchscreen-separate-report-and-transmit-buffer-size-handling.patch create mode 100644 queue-3.4/usb-dwc3-fix-implementation-of-endpoint-wedge.patch create mode 100644 queue-3.4/usb-gadget-composite-reset-delayed_status-on-reset_config.patch create mode 100644 queue-3.4/usb-hub-use-correct-reset-for-wedged-usb3-devices-that-are-notattached.patch create mode 100644 queue-3.4/usb-option-support-new-huawei-devices.patch create mode 100644 queue-3.4/usb-serial-option-blacklist-interface-1-for-huawei-e173s-6.patch diff --git a/queue-3.4/futex-fix-handling-of-read-only-mapped-hugepages.patch b/queue-3.4/futex-fix-handling-of-read-only-mapped-hugepages.patch new file mode 100644 index 00000000000..f4f82e572c3 --- /dev/null +++ b/queue-3.4/futex-fix-handling-of-read-only-mapped-hugepages.patch @@ -0,0 +1,44 @@ +From f12d5bfceb7e1f9051563381ec047f7f13956c3c Mon Sep 17 00:00:00 2001 +From: Linus Torvalds +Date: Thu, 12 Dec 2013 09:38:42 -0800 +Subject: futex: fix handling of read-only-mapped hugepages + +From: Linus Torvalds + +commit f12d5bfceb7e1f9051563381ec047f7f13956c3c upstream. + +The hugepage code had the exact same bug that regular pages had in +commit 7485d0d3758e ("futexes: Remove rw parameter from +get_futex_key()"). + +The regular page case was fixed by commit 9ea71503a8ed ("futex: Fix +regression with read only mappings"), but the transparent hugepage case +(added in a5b338f2b0b1: "thp: update futex compound knowledge") case +remained broken. + +Found by Dave Jones and his trinity tool. + +Reported-and-tested-by: Dave Jones +Acked-by: Thomas Gleixner +Cc: Mel Gorman +Cc: Darren Hart +Cc: Andrea Arcangeli +Cc: Oleg Nesterov +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/futex.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/kernel/futex.c ++++ b/kernel/futex.c +@@ -285,7 +285,7 @@ again: + put_page(page); + /* serialize against __split_huge_page_splitting() */ + local_irq_disable(); +- if (likely(__get_user_pages_fast(address, 1, 1, &page) == 1)) { ++ if (likely(__get_user_pages_fast(address, 1, !ro, &page) == 1)) { + page_head = compound_head(page); + /* + * page_head is valid pointer but we must pin diff --git a/queue-3.4/input-usbtouchscreen-separate-report-and-transmit-buffer-size-handling.patch b/queue-3.4/input-usbtouchscreen-separate-report-and-transmit-buffer-size-handling.patch new file mode 100644 index 00000000000..63d61691f58 --- /dev/null +++ b/queue-3.4/input-usbtouchscreen-separate-report-and-transmit-buffer-size-handling.patch @@ -0,0 +1,94 @@ +From 4ef38351d770cc421f4a0c7a849fd13207fc5741 Mon Sep 17 00:00:00 2001 +From: Christian Engelmayer +Date: Tue, 26 Nov 2013 18:16:17 -0800 +Subject: Input: usbtouchscreen - separate report and transmit buffer size handling + +From: Christian Engelmayer + +commit 4ef38351d770cc421f4a0c7a849fd13207fc5741 upstream. + +This patch supports the separate handling of the USB transfer buffer length +and the length of the buffer used for multi packet support. For devices +supporting multiple report or diagnostic packets, the USB transfer size is now +limited to the USB endpoints wMaxPacketSize - otherwise it defaults to the +configured report packet size as before. + +This fixes an issue where event reporting can be delayed for an arbitrary +time for multi packet devices. For instance the report size for eGalax devices +is defined to the 16 byte maximum diagnostic packet size as opposed to the 5 +byte report packet size. In case the driver requests 16 byte from the USB +interrupt endpoint, the USB host controller driver needs to split up the +request into 2 accesses according to the endpoints wMaxPacketSize of 8 byte. +When the first transfer is answered by the eGalax device with not less than +the full 8 byte requested, the host controller has got no way of knowing +whether the touch controller has got additional data queued and will issue +the second transfer. If per example a liftoff event finishes at such a +wMaxPacketSize boundary, the data will not be available to the usbtouch driver +until a further event is triggered and transfered to the host. From user +perspective the BTN_TOUCH release event in this case is stuck until the next +touch down event. + +Signed-off-by: Christian Engelmayer +Signed-off-by: Dmitry Torokhov +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/input/touchscreen/usbtouchscreen.c | 22 ++++++++++++++++++---- + 1 file changed, 18 insertions(+), 4 deletions(-) + +--- a/drivers/input/touchscreen/usbtouchscreen.c ++++ b/drivers/input/touchscreen/usbtouchscreen.c +@@ -106,6 +106,7 @@ struct usbtouch_device_info { + struct usbtouch_usb { + unsigned char *data; + dma_addr_t data_dma; ++ int data_size; + unsigned char *buffer; + int buf_len; + struct urb *irq; +@@ -1474,7 +1475,7 @@ static int usbtouch_reset_resume(struct + static void usbtouch_free_buffers(struct usb_device *udev, + struct usbtouch_usb *usbtouch) + { +- usb_free_coherent(udev, usbtouch->type->rept_size, ++ usb_free_coherent(udev, usbtouch->data_size, + usbtouch->data, usbtouch->data_dma); + kfree(usbtouch->buffer); + } +@@ -1519,7 +1520,20 @@ static int usbtouch_probe(struct usb_int + if (!type->process_pkt) + type->process_pkt = usbtouch_process_pkt; + +- usbtouch->data = usb_alloc_coherent(udev, type->rept_size, ++ usbtouch->data_size = type->rept_size; ++ if (type->get_pkt_len) { ++ /* ++ * When dealing with variable-length packets we should ++ * not request more than wMaxPacketSize bytes at once ++ * as we do not know if there is more data coming or ++ * we filled exactly wMaxPacketSize bytes and there is ++ * nothing else. ++ */ ++ usbtouch->data_size = min(usbtouch->data_size, ++ usb_endpoint_maxp(endpoint)); ++ } ++ ++ usbtouch->data = usb_alloc_coherent(udev, usbtouch->data_size, + GFP_KERNEL, &usbtouch->data_dma); + if (!usbtouch->data) + goto out_free; +@@ -1578,12 +1592,12 @@ static int usbtouch_probe(struct usb_int + if (usb_endpoint_type(endpoint) == USB_ENDPOINT_XFER_INT) + usb_fill_int_urb(usbtouch->irq, udev, + usb_rcvintpipe(udev, endpoint->bEndpointAddress), +- usbtouch->data, type->rept_size, ++ usbtouch->data, usbtouch->data_size, + usbtouch_irq, usbtouch, endpoint->bInterval); + else + usb_fill_bulk_urb(usbtouch->irq, udev, + usb_rcvbulkpipe(udev, endpoint->bEndpointAddress), +- usbtouch->data, type->rept_size, ++ usbtouch->data, usbtouch->data_size, + usbtouch_irq, usbtouch); + + usbtouch->irq->dev = udev; diff --git a/queue-3.4/series b/queue-3.4/series index 8ec1f3f90fe..44070cc899c 100644 --- a/queue-3.4/series +++ b/queue-3.4/series @@ -7,3 +7,10 @@ arm-7913-1-fix-framepointer-check-in-unwind_frame.patch kvm-improve-create-vcpu-parameter-cve-2013-4587.patch hwmon-w83l786ng-fix-fan-speed-control-mode-setting-and-reporting.patch xfs-underflow-bug-in-xfs_attrlist_by_handle.patch +futex-fix-handling-of-read-only-mapped-hugepages.patch +usb-hub-use-correct-reset-for-wedged-usb3-devices-that-are-notattached.patch +usb-dwc3-fix-implementation-of-endpoint-wedge.patch +usb-gadget-composite-reset-delayed_status-on-reset_config.patch +usb-serial-option-blacklist-interface-1-for-huawei-e173s-6.patch +usb-option-support-new-huawei-devices.patch +input-usbtouchscreen-separate-report-and-transmit-buffer-size-handling.patch diff --git a/queue-3.4/usb-dwc3-fix-implementation-of-endpoint-wedge.patch b/queue-3.4/usb-dwc3-fix-implementation-of-endpoint-wedge.patch new file mode 100644 index 00000000000..2822768cc57 --- /dev/null +++ b/queue-3.4/usb-dwc3-fix-implementation-of-endpoint-wedge.patch @@ -0,0 +1,58 @@ +From a535d81c92615b8ffb99b7e1fd1fb01effaed1af Mon Sep 17 00:00:00 2001 +From: Alan Stern +Date: Fri, 1 Nov 2013 12:05:12 -0400 +Subject: usb: dwc3: fix implementation of endpoint wedge + +From: Alan Stern + +commit a535d81c92615b8ffb99b7e1fd1fb01effaed1af upstream. + +The dwc3 UDC driver doesn't implement endpoint wedging correctly. +When an endpoint is wedged, the gadget driver should be allowed to +clear the wedge by calling usb_ep_clear_halt(). Only the host is +prevented from resetting the endpoint. + +This patch fixes the implementation. + +Signed-off-by: Alan Stern +Tested-by: Pratyush Anand +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/dwc3/ep0.c | 2 ++ + drivers/usb/dwc3/gadget.c | 5 +---- + 2 files changed, 3 insertions(+), 4 deletions(-) + +--- a/drivers/usb/dwc3/ep0.c ++++ b/drivers/usb/dwc3/ep0.c +@@ -380,6 +380,8 @@ static int dwc3_ep0_handle_feature(struc + dep = dwc3_wIndex_to_dep(dwc, wIndex); + if (!dep) + return -EINVAL; ++ if (set == 0 && (dep->flags & DWC3_EP_WEDGE)) ++ break; + ret = __dwc3_gadget_ep_set_halt(dep, set); + if (ret) + return -EINVAL; +--- a/drivers/usb/dwc3/gadget.c ++++ b/drivers/usb/dwc3/gadget.c +@@ -1101,9 +1101,6 @@ int __dwc3_gadget_ep_set_halt(struct dwc + else + dep->flags |= DWC3_EP_STALL; + } else { +- if (dep->flags & DWC3_EP_WEDGE) +- return 0; +- + ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, + DWC3_DEPCMD_CLEARSTALL, ¶ms); + if (ret) +@@ -1111,7 +1108,7 @@ int __dwc3_gadget_ep_set_halt(struct dwc + value ? "set" : "clear", + dep->name); + else +- dep->flags &= ~DWC3_EP_STALL; ++ dep->flags &= ~(DWC3_EP_STALL | DWC3_EP_WEDGE); + } + + return ret; diff --git a/queue-3.4/usb-gadget-composite-reset-delayed_status-on-reset_config.patch b/queue-3.4/usb-gadget-composite-reset-delayed_status-on-reset_config.patch new file mode 100644 index 00000000000..9c491981a51 --- /dev/null +++ b/queue-3.4/usb-gadget-composite-reset-delayed_status-on-reset_config.patch @@ -0,0 +1,32 @@ +From 2bac51a1827a18821150ed8c9f9752c02f9c2b02 Mon Sep 17 00:00:00 2001 +From: Michael Grzeschik +Date: Mon, 11 Nov 2013 23:43:32 +0100 +Subject: usb: gadget: composite: reset delayed_status on reset_config + +From: Michael Grzeschik + +commit 2bac51a1827a18821150ed8c9f9752c02f9c2b02 upstream. + +The delayed_status value is used to keep track of status response +packets on ep0. It needs to be reset or the set_config function would +still delay the answer, if the usb device got unplugged while waiting +for setup_continue to be called. + +Signed-off-by: Michael Grzeschik +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/gadget/composite.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/usb/gadget/composite.c ++++ b/drivers/usb/gadget/composite.c +@@ -584,6 +584,7 @@ static void reset_config(struct usb_comp + bitmap_zero(f->endpoints, 32); + } + cdev->config = NULL; ++ cdev->delayed_status = 0; + } + + static int set_config(struct usb_composite_dev *cdev, diff --git a/queue-3.4/usb-hub-use-correct-reset-for-wedged-usb3-devices-that-are-notattached.patch b/queue-3.4/usb-hub-use-correct-reset-for-wedged-usb3-devices-that-are-notattached.patch new file mode 100644 index 00000000000..8537e3021c7 --- /dev/null +++ b/queue-3.4/usb-hub-use-correct-reset-for-wedged-usb3-devices-that-are-notattached.patch @@ -0,0 +1,37 @@ +From 2d51f3cd11f414c56a87dc018196b85fd50b04a4 Mon Sep 17 00:00:00 2001 +From: Julius Werner +Date: Thu, 7 Nov 2013 10:59:14 -0800 +Subject: usb: hub: Use correct reset for wedged USB3 devices that are NOTATTACHED + +From: Julius Werner + +commit 2d51f3cd11f414c56a87dc018196b85fd50b04a4 upstream. + +This patch adds a check for USB_STATE_NOTATTACHED to the +hub_port_warm_reset_required() workaround for ports that end up in +Compliance Mode in hub_events() when trying to decide which reset +function to use. Trying to call usb_reset_device() with a NOTATTACHED +device will just fail and leave the port broken. + +Signed-off-by: Julius Werner +Acked-by: Alan Stern +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/core/hub.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +--- a/drivers/usb/core/hub.c ++++ b/drivers/usb/core/hub.c +@@ -3891,8 +3891,9 @@ static void hub_events(void) + hub->hdev->children[i - 1]; + + dev_dbg(hub_dev, "warm reset port %d\n", i); +- if (!udev || !(portstatus & +- USB_PORT_STAT_CONNECTION)) { ++ if (!udev || ++ !(portstatus & USB_PORT_STAT_CONNECTION) || ++ udev->state == USB_STATE_NOTATTACHED) { + status = hub_port_reset(hub, i, + NULL, HUB_BH_RESET_TIME, + true); diff --git a/queue-3.4/usb-option-support-new-huawei-devices.patch b/queue-3.4/usb-option-support-new-huawei-devices.patch new file mode 100644 index 00000000000..54fe4d3db5d --- /dev/null +++ b/queue-3.4/usb-option-support-new-huawei-devices.patch @@ -0,0 +1,87 @@ +From 2bf308d7bc5e8cdd69672199f59532f35339133c Mon Sep 17 00:00:00 2001 +From: "Fangxiaozhi (Franko)" +Date: Mon, 2 Dec 2013 09:00:11 +0000 +Subject: USB: option: support new huawei devices + +From: "Fangxiaozhi (Franko)" + +commit 2bf308d7bc5e8cdd69672199f59532f35339133c upstream. + +Add new supporting declarations to option.c, to support Huawei new +devices with new bInterfaceProtocol value. + +Signed-off-by: fangxiaozhi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 24 ++++++++++++++++++++++++ + 1 file changed, 24 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -651,6 +651,10 @@ static const struct usb_device_id option + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x6D) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x6E) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x6F) }, ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x72) }, ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x73) }, ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x74) }, ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x75) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x78) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x79) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x7A) }, +@@ -705,6 +709,10 @@ static const struct usb_device_id option + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x6D) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x6E) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x6F) }, ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x72) }, ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x73) }, ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x74) }, ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x75) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x78) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x79) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x7A) }, +@@ -759,6 +767,10 @@ static const struct usb_device_id option + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6D) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6E) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6F) }, ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x72) }, ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x73) }, ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x74) }, ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x75) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x78) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x79) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x7A) }, +@@ -813,6 +825,10 @@ static const struct usb_device_id option + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6D) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6E) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6F) }, ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x72) }, ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x73) }, ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x74) }, ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x75) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x78) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x79) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x7A) }, +@@ -867,6 +883,10 @@ static const struct usb_device_id option + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6D) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6E) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6F) }, ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x72) }, ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x73) }, ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x74) }, ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x75) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x78) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x79) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x7A) }, +@@ -921,6 +941,10 @@ static const struct usb_device_id option + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6D) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6E) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6F) }, ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x72) }, ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x73) }, ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x74) }, ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x75) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x78) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x79) }, + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7A) }, diff --git a/queue-3.4/usb-serial-option-blacklist-interface-1-for-huawei-e173s-6.patch b/queue-3.4/usb-serial-option-blacklist-interface-1-for-huawei-e173s-6.patch new file mode 100644 index 00000000000..751af50b79c --- /dev/null +++ b/queue-3.4/usb-serial-option-blacklist-interface-1-for-huawei-e173s-6.patch @@ -0,0 +1,43 @@ +From 8f173e22abf2258ddfa73f46eadbb6a6c29f1631 Mon Sep 17 00:00:00 2001 +From: Gustavo Zacarias +Date: Mon, 11 Nov 2013 09:59:15 -0300 +Subject: USB: serial: option: blacklist interface 1 for Huawei E173s-6 + +From: Gustavo Zacarias + +commit 8f173e22abf2258ddfa73f46eadbb6a6c29f1631 upstream. + +Interface 1 on this device isn't for option to bind to otherwise an oops +on usb_wwan with log flooding will happen when accessing the port: + +tty_release: ttyUSB1: read/write wait queue active! + +It doesn't seem to respond to QMI if it's added to qmi_wwan so don't add +it there - it's likely used by the card reader. + +Signed-off-by: Gustavo Zacarias +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -85,6 +85,7 @@ static void option_instat_callback(struc + #define HUAWEI_PRODUCT_K4505 0x1464 + #define HUAWEI_PRODUCT_K3765 0x1465 + #define HUAWEI_PRODUCT_K4605 0x14C6 ++#define HUAWEI_PRODUCT_E173S6 0x1C07 + + #define QUANTA_VENDOR_ID 0x0408 + #define QUANTA_PRODUCT_Q101 0xEA02 +@@ -586,6 +587,8 @@ static const struct usb_device_id option + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c23, USB_CLASS_COMM, 0x02, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E173, 0xff, 0xff, 0xff), + .driver_info = (kernel_ulong_t) &net_intf1_blacklist }, ++ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E173S6, 0xff, 0xff, 0xff), ++ .driver_info = (kernel_ulong_t) &net_intf1_blacklist }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1750, 0xff, 0xff, 0xff), + .driver_info = (kernel_ulong_t) &net_intf2_blacklist }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1441, USB_CLASS_COMM, 0x02, 0xff) }, -- 2.47.2