|
@@ -983,11 +983,14 @@ ep0_read (struct file *fd, char __user *buf, size_t len, loff_t *ptr)
|
|
retval = -EIO;
|
|
retval = -EIO;
|
|
else {
|
|
else {
|
|
len = min (len, (size_t)dev->req->actual);
|
|
len = min (len, (size_t)dev->req->actual);
|
|
-// FIXME don't call this with the spinlock held ...
|
|
|
|
|
|
+ ++dev->udc_usage;
|
|
|
|
+ spin_unlock_irq(&dev->lock);
|
|
if (copy_to_user (buf, dev->req->buf, len))
|
|
if (copy_to_user (buf, dev->req->buf, len))
|
|
retval = -EFAULT;
|
|
retval = -EFAULT;
|
|
else
|
|
else
|
|
retval = len;
|
|
retval = len;
|
|
|
|
+ spin_lock_irq(&dev->lock);
|
|
|
|
+ --dev->udc_usage;
|
|
clean_req (dev->gadget->ep0, dev->req);
|
|
clean_req (dev->gadget->ep0, dev->req);
|
|
/* NOTE userspace can't yet choose to stall */
|
|
/* NOTE userspace can't yet choose to stall */
|
|
}
|
|
}
|