diff options
| author | Takashi Iwai <tiwai@suse.de> | 2008-12-01 18:02:17 +0100 |
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2008-12-01 18:02:17 +0100 |
| commit | 3af4182cc5be7d5505f9801ee3297373f1872446 (patch) | |
| tree | 214348d40ed547a72f9612a7e5c94a01afded812 /drivers/usb/class/cdc-acm.c | |
| parent | f5d4c67e41a262f0cdfaec1bb0fa8e5952187ef9 (diff) | |
| parent | c07f62e5f18123103459ff74e86af1518a5b8af5 (diff) | |
| download | lwn-3af4182cc5be7d5505f9801ee3297373f1872446.tar.gz lwn-3af4182cc5be7d5505f9801ee3297373f1872446.zip | |
Merge branch 'upstream' into topic/asoc
Diffstat (limited to 'drivers/usb/class/cdc-acm.c')
| -rw-r--r-- | drivers/usb/class/cdc-acm.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c index 20104443081a..d50a99f70aee 100644 --- a/drivers/usb/class/cdc-acm.c +++ b/drivers/usb/class/cdc-acm.c @@ -158,16 +158,12 @@ static int acm_wb_is_avail(struct acm *acm) } /* - * Finish write. + * Finish write. Caller must hold acm->write_lock */ static void acm_write_done(struct acm *acm, struct acm_wb *wb) { - unsigned long flags; - - spin_lock_irqsave(&acm->write_lock, flags); wb->use = 0; acm->transmitting--; - spin_unlock_irqrestore(&acm->write_lock, flags); } /* @@ -482,6 +478,7 @@ static void acm_write_bulk(struct urb *urb) { struct acm_wb *wb = urb->context; struct acm *acm = wb->instance; + unsigned long flags; if (verbose || urb->status || (urb->actual_length != urb->transfer_buffer_length)) @@ -490,7 +487,9 @@ static void acm_write_bulk(struct urb *urb) urb->transfer_buffer_length, urb->status); + spin_lock_irqsave(&acm->write_lock, flags); acm_write_done(acm, wb); + spin_unlock_irqrestore(&acm->write_lock, flags); if (ACM_READY(acm)) schedule_work(&acm->work); else |
