@@ -1018,8 +1018,11 @@ ep0_read (struct file *fd, char __user *buf, size_t len, loff_t *ptr)
1018
1018
struct usb_ep * ep = dev -> gadget -> ep0 ;
1019
1019
struct usb_request * req = dev -> req ;
1020
1020
1021
- if ((retval = setup_req (ep , req , 0 )) == 0 )
1022
- retval = usb_ep_queue (ep , req , GFP_ATOMIC );
1021
+ if ((retval = setup_req (ep , req , 0 )) == 0 ) {
1022
+ spin_unlock_irq (& dev -> lock );
1023
+ retval = usb_ep_queue (ep , req , GFP_KERNEL );
1024
+ spin_lock_irq (& dev -> lock );
1025
+ }
1023
1026
dev -> state = STATE_DEV_CONNECTED ;
1024
1027
1025
1028
/* assume that was SET_CONFIGURATION */
@@ -1550,8 +1553,11 @@ gadgetfs_setup (struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
1550
1553
w_length );
1551
1554
if (value < 0 )
1552
1555
break ;
1556
+
1557
+ spin_unlock (& dev -> lock );
1553
1558
value = usb_ep_queue (gadget -> ep0 , dev -> req ,
1554
- GFP_ATOMIC );
1559
+ GFP_KERNEL );
1560
+ spin_lock (& dev -> lock );
1555
1561
if (value < 0 ) {
1556
1562
clean_req (gadget -> ep0 , dev -> req );
1557
1563
break ;
@@ -1574,11 +1580,14 @@ gadgetfs_setup (struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
1574
1580
if (value >= 0 && dev -> state != STATE_DEV_SETUP ) {
1575
1581
req -> length = value ;
1576
1582
req -> zero = value < w_length ;
1577
- value = usb_ep_queue (gadget -> ep0 , req , GFP_ATOMIC );
1583
+
1584
+ spin_unlock (& dev -> lock );
1585
+ value = usb_ep_queue (gadget -> ep0 , req , GFP_KERNEL );
1578
1586
if (value < 0 ) {
1579
1587
DBG (dev , "ep_queue --> %d\n" , value );
1580
1588
req -> status = 0 ;
1581
1589
}
1590
+ return value ;
1582
1591
}
1583
1592
1584
1593
/* device stalls when value < 0 */
0 commit comments