Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 304176
b: refs/heads/master
c: 266e37e
h: refs/heads/master
v: v3
  • Loading branch information
Jiri Slaby authored and Greg Kroah-Hartman committed Apr 9, 2012
1 parent 7e5017f commit d4ed03a
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 13 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 8e32841634958d4927a85b484faf9d2c3c222e4d
refs/heads/master: 266e37efbc28b051c1ffb1cdcf0a949973e660e3
25 changes: 13 additions & 12 deletions trunk/drivers/usb/gadget/u_serial.c
Original file line number Diff line number Diff line change
Expand Up @@ -94,12 +94,12 @@ struct gs_buf {
* (and thus for each /dev/ node).
*/
struct gs_port {
struct tty_port port;
spinlock_t port_lock; /* guard port_* access */

struct gserial *port_usb;
struct tty_struct *port_tty;

unsigned open_count;
bool openclose; /* open/close in progress */
u8 port_num;

Expand Down Expand Up @@ -734,9 +734,9 @@ static int gs_open(struct tty_struct *tty, struct file *file)
spin_lock_irq(&port->port_lock);

/* already open? Great. */
if (port->open_count) {
if (port->port.count) {
status = 0;
port->open_count++;
port->port.count++;

/* currently opening/closing? wait ... */
} else if (port->openclose) {
Expand Down Expand Up @@ -795,7 +795,7 @@ static int gs_open(struct tty_struct *tty, struct file *file)
tty->driver_data = port;
port->port_tty = tty;

port->open_count = 1;
port->port.count = 1;
port->openclose = false;

/* if connected, start the I/O stream */
Expand Down Expand Up @@ -837,11 +837,11 @@ static void gs_close(struct tty_struct *tty, struct file *file)

spin_lock_irq(&port->port_lock);

if (port->open_count != 1) {
if (port->open_count == 0)
if (port->port.count != 1) {
if (port->port.count == 0)
WARN_ON(1);
else
--port->open_count;
--port->port.count;
goto exit;
}

Expand All @@ -851,7 +851,7 @@ static void gs_close(struct tty_struct *tty, struct file *file)
* and sleep if necessary
*/
port->openclose = true;
port->open_count = 0;
port->port.count = 0;

gser = port->port_usb;
if (gser && gser->disconnect)
Expand Down Expand Up @@ -1034,6 +1034,7 @@ gs_port_alloc(unsigned port_num, struct usb_cdc_line_coding *coding)
if (port == NULL)
return -ENOMEM;

tty_port_init(&port->port);
spin_lock_init(&port->port_lock);
init_waitqueue_head(&port->close_wait);
init_waitqueue_head(&port->drain_wait);
Expand Down Expand Up @@ -1155,7 +1156,7 @@ static int gs_closed(struct gs_port *port)
int cond;

spin_lock_irq(&port->port_lock);
cond = (port->open_count == 0) && !port->openclose;
cond = (port->port.count == 0) && !port->openclose;
spin_unlock_irq(&port->port_lock);
return cond;
}
Expand Down Expand Up @@ -1268,7 +1269,7 @@ int gserial_connect(struct gserial *gser, u8 port_num)
/* if it's already open, start I/O ... and notify the serial
* protocol about open/close status (connect/disconnect).
*/
if (port->open_count) {
if (port->port.count) {
pr_debug("gserial_connect: start ttyGS%d\n", port->port_num);
gs_start_io(port);
if (gser->connect)
Expand Down Expand Up @@ -1315,7 +1316,7 @@ void gserial_disconnect(struct gserial *gser)

port->port_usb = NULL;
gser->ioport = NULL;
if (port->open_count > 0 || port->openclose) {
if (port->port.count > 0 || port->openclose) {
wake_up_interruptible(&port->drain_wait);
if (port->port_tty)
tty_hangup(port->port_tty);
Expand All @@ -1331,7 +1332,7 @@ void gserial_disconnect(struct gserial *gser)

/* finally, free any unused/unusable I/O buffers */
spin_lock_irqsave(&port->port_lock, flags);
if (port->open_count == 0 && !port->openclose)
if (port->port.count == 0 && !port->openclose)
gs_buf_free(&port->port_write_buf);
gs_free_requests(gser->out, &port->read_pool, NULL);
gs_free_requests(gser->out, &port->read_queue, NULL);
Expand Down

0 comments on commit d4ed03a

Please sign in to comment.