From d181398c58c2564948f08013039de0509d0c4689 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 1 Apr 2013 15:26:49 -0700 Subject: [PATCH] 3.4-stable patches added patches: usb-serial-add-modem-status-change-wait-queue.patch usb-serial-fix-hang-when-opening-port.patch --- queue-3.4/series | 2 + ...l-add-modem-status-change-wait-queue.patch | 43 +++++++++++++++++++ ...sb-serial-fix-hang-when-opening-port.patch | 35 +++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 queue-3.4/usb-serial-add-modem-status-change-wait-queue.patch create mode 100644 queue-3.4/usb-serial-fix-hang-when-opening-port.patch diff --git a/queue-3.4/series b/queue-3.4/series index 5636cedf576..a77a3ecb5fc 100644 --- a/queue-3.4/series +++ b/queue-3.4/series @@ -28,3 +28,5 @@ usb-xhci-fix-trb-transfer-length-macro-used-for-event-trb.patch btrfs-fix-race-between-mmap-writes-and-compression.patch btrfs-limit-the-global-reserve-to-512mb.patch btrfs-don-t-drop-path-when-printing-out-tree-errors-in-scrub.patch +usb-serial-add-modem-status-change-wait-queue.patch +usb-serial-fix-hang-when-opening-port.patch diff --git a/queue-3.4/usb-serial-add-modem-status-change-wait-queue.patch b/queue-3.4/usb-serial-add-modem-status-change-wait-queue.patch new file mode 100644 index 00000000000..e1000075a53 --- /dev/null +++ b/queue-3.4/usb-serial-add-modem-status-change-wait-queue.patch @@ -0,0 +1,43 @@ +From e5b33dc9d16053c2ae4c2c669cf008829530364b Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Tue, 19 Mar 2013 09:21:10 +0100 +Subject: USB: serial: add modem-status-change wait queue + +From: Johan Hovold + +commit e5b33dc9d16053c2ae4c2c669cf008829530364b upstream. + +Add modem-status-change wait queue to struct usb_serial_port that +subdrivers can use to implement TIOCMIWAIT. + +Currently subdrivers use a private wait queue which may have been +released when waking up after device disconnected. + +Note that we're adding a new wait queue rather than reusing the tty-port +one as we do not want to get woken up at hangup (yet). + +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + include/linux/usb/serial.h | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/include/linux/usb/serial.h ++++ b/include/linux/usb/serial.h +@@ -66,6 +66,7 @@ + * port. + * @flags: usb serial port flags + * @write_wait: a wait_queue_head_t used by the port. ++ * @delta_msr_wait: modem-status-change wait queue + * @work: work queue entry for the line discipline waking up. + * @throttled: nonzero if the read urb is inactive to throttle the device + * @throttle_req: nonzero if the tty wants to throttle us +@@ -112,6 +113,7 @@ struct usb_serial_port { + + unsigned long flags; + wait_queue_head_t write_wait; ++ wait_queue_head_t delta_msr_wait; + struct work_struct work; + char throttled; + char throttle_req; diff --git a/queue-3.4/usb-serial-fix-hang-when-opening-port.patch b/queue-3.4/usb-serial-fix-hang-when-opening-port.patch new file mode 100644 index 00000000000..1c93ef81bc2 --- /dev/null +++ b/queue-3.4/usb-serial-fix-hang-when-opening-port.patch @@ -0,0 +1,35 @@ +From eba0e3c3a0ba7b96f01cbe997680f6a4401a0bfc Mon Sep 17 00:00:00 2001 +From: Ming Lei +Date: Tue, 26 Mar 2013 10:49:55 +0800 +Subject: USB: serial: fix hang when opening port + +From: Ming Lei + +commit eba0e3c3a0ba7b96f01cbe997680f6a4401a0bfc upstream. + +Johan's 'fix use-after-free in TIOCMIWAIT' patchset[1] introduces +one bug which can cause kernel hang when opening port. + +This patch initialized the 'port->delta_msr_wait' waitqueue head +to fix the bug which is introduced in 3.9-rc4. + +[1], http://marc.info/?l=linux-usb&m=136368139627876&w=2 + +Signed-off-by: Ming Lei +Acked-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/usb-serial.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/usb/serial/usb-serial.c ++++ b/drivers/usb/serial/usb-serial.c +@@ -908,6 +908,7 @@ int usb_serial_probe(struct usb_interfac + port->port.ops = &serial_port_ops; + port->serial = serial; + spin_lock_init(&port->lock); ++ init_waitqueue_head(&port->delta_msr_wait); + /* Keep this for private driver use for the moment but + should probably go away */ + INIT_WORK(&port->work, usb_serial_port_work); -- 2.47.3