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 |