|
@@ -391,20 +391,20 @@ try_again:
|
|
|
req->complete = f_hidg_req_complete;
|
|
req->complete = f_hidg_req_complete;
|
|
|
req->context = hidg;
|
|
req->context = hidg;
|
|
|
|
|
|
|
|
|
|
+ spin_unlock_irqrestore(&hidg->write_spinlock, flags);
|
|
|
|
|
+
|
|
|
status = usb_ep_queue(hidg->in_ep, req, GFP_ATOMIC);
|
|
status = usb_ep_queue(hidg->in_ep, req, GFP_ATOMIC);
|
|
|
if (status < 0) {
|
|
if (status < 0) {
|
|
|
ERROR(hidg->func.config->cdev,
|
|
ERROR(hidg->func.config->cdev,
|
|
|
"usb_ep_queue error on int endpoint %zd\n", status);
|
|
"usb_ep_queue error on int endpoint %zd\n", status);
|
|
|
- goto release_write_pending_unlocked;
|
|
|
|
|
|
|
+ goto release_write_pending;
|
|
|
} else {
|
|
} else {
|
|
|
status = count;
|
|
status = count;
|
|
|
}
|
|
}
|
|
|
- spin_unlock_irqrestore(&hidg->write_spinlock, flags);
|
|
|
|
|
|
|
|
|
|
return status;
|
|
return status;
|
|
|
release_write_pending:
|
|
release_write_pending:
|
|
|
spin_lock_irqsave(&hidg->write_spinlock, flags);
|
|
spin_lock_irqsave(&hidg->write_spinlock, flags);
|
|
|
-release_write_pending_unlocked:
|
|
|
|
|
hidg->write_pending = 0;
|
|
hidg->write_pending = 0;
|
|
|
spin_unlock_irqrestore(&hidg->write_spinlock, flags);
|
|
spin_unlock_irqrestore(&hidg->write_spinlock, flags);
|
|
|
|
|
|