]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 27 Jun 2014 19:39:51 +0000 (12:39 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 27 Jun 2014 19:39:51 +0000 (12:39 -0700)
added patches:
usb-option-fix-runtime-pm-handling.patch

queue-3.4/series
queue-3.4/usb-option-fix-runtime-pm-handling.patch [new file with mode: 0644]

index ed77eca90d0a08959b7a247e92b04abbbb39292a..80b5e9b497b5615bcabab2291b4f0add6bde34f2 100644 (file)
@@ -6,3 +6,4 @@ usb-usbtest-add-a-timeout-for-scatter-gather-tests.patch
 usb-gadget-rename-config_usb_gadget_pxa25x.patch
 usb-dwc3-gadget-clear-stall-when-disabling-endpoint.patch
 usb-ehci-avoid-bios-handover-on-the-hasee-e200.patch
+usb-option-fix-runtime-pm-handling.patch
diff --git a/queue-3.4/usb-option-fix-runtime-pm-handling.patch b/queue-3.4/usb-option-fix-runtime-pm-handling.patch
new file mode 100644 (file)
index 0000000..33b12d7
--- /dev/null
@@ -0,0 +1,53 @@
+From acf47d4f9c39b1cba467aa9442fc2efe0b1da741 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Mon, 26 May 2014 19:23:10 +0200
+Subject: USB: option: fix runtime PM handling
+
+From: Johan Hovold <jhovold@gmail.com>
+
+commit acf47d4f9c39b1cba467aa9442fc2efe0b1da741 upstream.
+
+Fix potential I/O while runtime suspended due to missing PM operations
+in send_setup.
+
+Fixes: 383cedc3bb43 ("USB: serial: full autosuspend support for the
+option driver")
+
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/option.c |   15 ++++++++++++---
+ 1 file changed, 12 insertions(+), 3 deletions(-)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -1930,6 +1930,7 @@ static int option_send_setup(struct usb_
+       struct usb_wwan_port_private *portdata;
+       int ifNum = serial->interface->cur_altsetting->desc.bInterfaceNumber;
+       int val = 0;
++      int res;
+       dbg("%s", __func__);
+       if (is_blacklisted(ifNum, OPTION_BLACKLIST_SENDSETUP,
+@@ -1945,9 +1946,17 @@ static int option_send_setup(struct usb_
+       if (portdata->rts_state)
+               val |= 0x02;
+-      return usb_control_msg(serial->dev,
+-              usb_rcvctrlpipe(serial->dev, 0),
+-              0x22, 0x21, val, ifNum, NULL, 0, USB_CTRL_SET_TIMEOUT);
++      res = usb_autopm_get_interface(serial->interface);
++      if (res)
++              return res;
++
++      res = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
++                              0x22, 0x21, val, ifNum, NULL,
++                              0, USB_CTRL_SET_TIMEOUT);
++
++      usb_autopm_put_interface(serial->interface);
++
++      return res;
+ }
+ MODULE_AUTHOR(DRIVER_AUTHOR);