diff options
| author | Rob Herring <robh@kernel.org> | 2018-03-08 09:21:07 -0600 | 
|---|---|---|
| committer | Rob Herring <robh@kernel.org> | 2018-03-08 09:21:07 -0600 | 
| commit | c679fa6e3aaa5c58fc514b5b88cfa82774b8d390 (patch) | |
| tree | 0c10b339368bd1795152a66a4e245e6f654fb3ec /drivers/usb/class/cdc-acm.c | |
| parent | bdb7013df910681f84eff27b07791d4c160cb76f (diff) | |
| parent | 4fd98e374fd377ae0458a9dc44aa779cf9631ddd (diff) | |
Merge branch 'dtc-update' into dt/next
Diffstat (limited to 'drivers/usb/class/cdc-acm.c')
| -rw-r--r-- | drivers/usb/class/cdc-acm.c | 9 | 
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c index 06b3b54a0e68..7b366a6c0b49 100644 --- a/drivers/usb/class/cdc-acm.c +++ b/drivers/usb/class/cdc-acm.c @@ -174,6 +174,7 @@ static int acm_wb_alloc(struct acm *acm)  		wb = &acm->wb[wbn];  		if (!wb->use) {  			wb->use = 1; +			wb->len = 0;  			return wbn;  		}  		wbn = (wbn + 1) % ACM_NW; @@ -805,16 +806,18 @@ static int acm_tty_write(struct tty_struct *tty,  static void acm_tty_flush_chars(struct tty_struct *tty)  {  	struct acm *acm = tty->driver_data; -	struct acm_wb *cur = acm->putbuffer; +	struct acm_wb *cur;  	int err;  	unsigned long flags; +	spin_lock_irqsave(&acm->write_lock, flags); + +	cur = acm->putbuffer;  	if (!cur) /* nothing to do */ -		return; +		goto out;  	acm->putbuffer = NULL;  	err = usb_autopm_get_interface_async(acm->control); -	spin_lock_irqsave(&acm->write_lock, flags);  	if (err < 0) {  		cur->use = 0;  		acm->putbuffer = cur;  | 
