diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2015-05-19 16:12:32 +0200 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2015-05-19 16:12:32 +0200 |
commit | c3b5d3cea508d2c8ff493ef18c45a9cc58fb7015 (patch) | |
tree | a80672ee82fcc3d9c8d486e53731eb19cd968eb0 /drivers/usb/gadget/function/u_serial.c | |
parent | daa67b4b70568a07fef3cffacb2055891bf42ddb (diff) | |
parent | e26081808edadfd257c6c9d81014e3b25e9a6118 (diff) | |
download | talos-op-linux-c3b5d3cea508d2c8ff493ef18c45a9cc58fb7015.tar.gz talos-op-linux-c3b5d3cea508d2c8ff493ef18c45a9cc58fb7015.zip |
Merge branch 'linus' into timers/core
Make sure the upstream fixes are applied before adding further
modifications.
Diffstat (limited to 'drivers/usb/gadget/function/u_serial.c')
-rw-r--r-- | drivers/usb/gadget/function/u_serial.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/usb/gadget/function/u_serial.c b/drivers/usb/gadget/function/u_serial.c index 89179ab20c10..7ee057930ae7 100644 --- a/drivers/usb/gadget/function/u_serial.c +++ b/drivers/usb/gadget/function/u_serial.c @@ -113,6 +113,7 @@ struct gs_port { int write_allocated; struct gs_buf port_write_buf; wait_queue_head_t drain_wait; /* wait while writes drain */ + bool write_busy; /* REVISIT this state ... */ struct usb_cdc_line_coding port_line_coding; /* 8-N-1 etc */ @@ -363,7 +364,7 @@ __acquires(&port->port_lock) int status = 0; bool do_tty_wake = false; - while (!list_empty(pool)) { + while (!port->write_busy && !list_empty(pool)) { struct usb_request *req; int len; @@ -393,9 +394,11 @@ __acquires(&port->port_lock) * NOTE that we may keep sending data for a while after * the TTY closed (dev->ioport->port_tty is NULL). */ + port->write_busy = true; spin_unlock(&port->port_lock); status = usb_ep_queue(in, req, GFP_ATOMIC); spin_lock(&port->port_lock); + port->write_busy = false; if (status) { pr_debug("%s: %s %s err %d\n", |