diff options
| author | Ingo Molnar <mingo@elte.hu> | 2008-12-04 02:52:14 -0500 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2008-12-04 02:52:14 -0500 |
| commit | cb9c34e6d090d376b77becaa5d29a65dec7f4272 (patch) | |
| tree | 3678abce20d6825aebe3fec218057d4131e13fd6 /drivers/usb/class/cdc-acm.c | |
| parent | 470c66239ef0336429b35345f3f615d47341e13b (diff) | |
| parent | 061e41fdb5047b1fb161e89664057835935ca1d2 (diff) | |
Merge commit 'v2.6.28-rc7' into core/locking
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) | |||
| 158 | } | 158 | } |
| 159 | 159 | ||
| 160 | /* | 160 | /* |
| 161 | * Finish write. | 161 | * Finish write. Caller must hold acm->write_lock |
| 162 | */ | 162 | */ |
| 163 | static void acm_write_done(struct acm *acm, struct acm_wb *wb) | 163 | static void acm_write_done(struct acm *acm, struct acm_wb *wb) |
| 164 | { | 164 | { |
| 165 | unsigned long flags; | ||
| 166 | |||
| 167 | spin_lock_irqsave(&acm->write_lock, flags); | ||
| 168 | wb->use = 0; | 165 | wb->use = 0; |
| 169 | acm->transmitting--; | 166 | acm->transmitting--; |
| 170 | spin_unlock_irqrestore(&acm->write_lock, flags); | ||
| 171 | } | 167 | } |
| 172 | 168 | ||
| 173 | /* | 169 | /* |
| @@ -482,6 +478,7 @@ static void acm_write_bulk(struct urb *urb) | |||
| 482 | { | 478 | { |
| 483 | struct acm_wb *wb = urb->context; | 479 | struct acm_wb *wb = urb->context; |
| 484 | struct acm *acm = wb->instance; | 480 | struct acm *acm = wb->instance; |
| 481 | unsigned long flags; | ||
| 485 | 482 | ||
| 486 | if (verbose || urb->status | 483 | if (verbose || urb->status |
| 487 | || (urb->actual_length != urb->transfer_buffer_length)) | 484 | || (urb->actual_length != urb->transfer_buffer_length)) |
| @@ -490,7 +487,9 @@ static void acm_write_bulk(struct urb *urb) | |||
| 490 | urb->transfer_buffer_length, | 487 | urb->transfer_buffer_length, |
| 491 | urb->status); | 488 | urb->status); |
| 492 | 489 | ||
| 490 | spin_lock_irqsave(&acm->write_lock, flags); | ||
| 493 | acm_write_done(acm, wb); | 491 | acm_write_done(acm, wb); |
| 492 | spin_unlock_irqrestore(&acm->write_lock, flags); | ||
| 494 | if (ACM_READY(acm)) | 493 | if (ACM_READY(acm)) |
| 495 | schedule_work(&acm->work); | 494 | schedule_work(&acm->work); |
| 496 | else | 495 | else |
