]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 18 Dec 2013 18:21:32 +0000 (10:21 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 18 Dec 2013 18:21:32 +0000 (10:21 -0800)
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

queue-3.4/futex-fix-handling-of-read-only-mapped-hugepages.patch [new file with mode: 0644]
queue-3.4/input-usbtouchscreen-separate-report-and-transmit-buffer-size-handling.patch [new file with mode: 0644]
queue-3.4/series
queue-3.4/usb-dwc3-fix-implementation-of-endpoint-wedge.patch [new file with mode: 0644]
queue-3.4/usb-gadget-composite-reset-delayed_status-on-reset_config.patch [new file with mode: 0644]
queue-3.4/usb-hub-use-correct-reset-for-wedged-usb3-devices-that-are-notattached.patch [new file with mode: 0644]
queue-3.4/usb-option-support-new-huawei-devices.patch [new file with mode: 0644]
queue-3.4/usb-serial-option-blacklist-interface-1-for-huawei-e173s-6.patch [new file with mode: 0644]

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 (file)
index 0000000..f4f82e5
--- /dev/null
@@ -0,0 +1,44 @@
+From f12d5bfceb7e1f9051563381ec047f7f13956c3c Mon Sep 17 00:00:00 2001
+From: Linus Torvalds <torvalds@linux-foundation.org>
+Date: Thu, 12 Dec 2013 09:38:42 -0800
+Subject: futex: fix handling of read-only-mapped hugepages
+
+From: Linus Torvalds <torvalds@linux-foundation.org>
+
+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 <davej@fedoraproject.org>
+Acked-by: Thomas Gleixner <tglx@linutronix.de>
+Cc: Mel Gorman <mgorman@suse.de>
+Cc: Darren Hart <dvhart@linux.intel.com>
+Cc: Andrea Arcangeli <aarcange@redhat.com>
+Cc: Oleg Nesterov <oleg@redhat.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..63d6169
--- /dev/null
@@ -0,0 +1,94 @@
+From 4ef38351d770cc421f4a0c7a849fd13207fc5741 Mon Sep 17 00:00:00 2001
+From: Christian Engelmayer <christian.engelmayer@frequentis.com>
+Date: Tue, 26 Nov 2013 18:16:17 -0800
+Subject: Input: usbtouchscreen - separate report and transmit buffer size handling
+
+From: Christian Engelmayer <christian.engelmayer@frequentis.com>
+
+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 <christian.engelmayer@frequentis.com>
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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;
index 8ec1f3f90fefbd8e9867eecffc7c0ac8d4aba7a3..44070cc899c51a277a300caf6f4ddebae4c891bd 100644 (file)
@@ -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 (file)
index 0000000..2822768
--- /dev/null
@@ -0,0 +1,58 @@
+From a535d81c92615b8ffb99b7e1fd1fb01effaed1af Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Fri, 1 Nov 2013 12:05:12 -0400
+Subject: usb: dwc3: fix implementation of endpoint wedge
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+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 <stern@rowland.harvard.edu>
+Tested-by: Pratyush Anand <pratyush.anand@st.com>
+Signed-off-by: Felipe Balbi <balbi@ti.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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, &params);
+               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 (file)
index 0000000..9c49198
--- /dev/null
@@ -0,0 +1,32 @@
+From 2bac51a1827a18821150ed8c9f9752c02f9c2b02 Mon Sep 17 00:00:00 2001
+From: Michael Grzeschik <m.grzeschik@pengutronix.de>
+Date: Mon, 11 Nov 2013 23:43:32 +0100
+Subject: usb: gadget: composite: reset delayed_status on reset_config
+
+From: Michael Grzeschik <m.grzeschik@pengutronix.de>
+
+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 <m.grzeschik@pengutronix.de>
+Signed-off-by: Felipe Balbi <balbi@ti.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..8537e30
--- /dev/null
@@ -0,0 +1,37 @@
+From 2d51f3cd11f414c56a87dc018196b85fd50b04a4 Mon Sep 17 00:00:00 2001
+From: Julius Werner <jwerner@chromium.org>
+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 <jwerner@chromium.org>
+
+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 <jwerner@chromium.org>
+Acked-by: Alan Stern <stern@rowland.harvard.edu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..54fe4d3
--- /dev/null
@@ -0,0 +1,87 @@
+From 2bf308d7bc5e8cdd69672199f59532f35339133c Mon Sep 17 00:00:00 2001
+From: "Fangxiaozhi (Franko)" <fangxiaozhi@huawei.com>
+Date: Mon, 2 Dec 2013 09:00:11 +0000
+Subject: USB: option: support new huawei devices
+
+From: "Fangxiaozhi (Franko)" <fangxiaozhi@huawei.com>
+
+commit 2bf308d7bc5e8cdd69672199f59532f35339133c upstream.
+
+Add new supporting declarations to option.c, to support Huawei new
+devices with new bInterfaceProtocol value.
+
+Signed-off-by: fangxiaozhi <huananhu@huawei.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..751af50
--- /dev/null
@@ -0,0 +1,43 @@
+From 8f173e22abf2258ddfa73f46eadbb6a6c29f1631 Mon Sep 17 00:00:00 2001
+From: Gustavo Zacarias <gustavo@zacarias.com.ar>
+Date: Mon, 11 Nov 2013 09:59:15 -0300
+Subject: USB: serial: option: blacklist interface 1 for Huawei E173s-6
+
+From: Gustavo Zacarias <gustavo@zacarias.com.ar>
+
+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 <gustavo@zacarias.com.ar>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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) },