|
Lines 158-173
static int acm_wb_is_avail(struct acm *acm)
Link Here
|
| 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 |
/* |
|
Lines 482-487
static void acm_write_bulk(struct urb *urb)
Link Here
|
| 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)) |
|
Lines 490-496
static void acm_write_bulk(struct urb *urb)
Link Here
|
| 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 |