@@ -938,8 +938,11 @@ ep0_read (struct file *fd, char __user *buf, size_t len, loff_t *ptr)
938
938
struct usb_ep * ep = dev -> gadget -> ep0 ;
939
939
struct usb_request * req = dev -> req ;
940
940
941
- if ((retval = setup_req (ep , req , 0 )) == 0 )
942
- retval = usb_ep_queue (ep , req , GFP_ATOMIC );
941
+ if ((retval = setup_req (ep , req , 0 )) == 0 ) {
942
+ spin_unlock_irq (& dev -> lock );
943
+ retval = usb_ep_queue (ep , req , GFP_KERNEL );
944
+ spin_lock_irq (& dev -> lock );
945
+ }
943
946
dev -> state = STATE_DEV_CONNECTED ;
944
947
945
948
/* assume that was SET_CONFIGURATION */
@@ -1457,8 +1460,11 @@ gadgetfs_setup (struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
1457
1460
w_length );
1458
1461
if (value < 0 )
1459
1462
break ;
1463
+
1464
+ spin_unlock (& dev -> lock );
1460
1465
value = usb_ep_queue (gadget -> ep0 , dev -> req ,
1461
- GFP_ATOMIC );
1466
+ GFP_KERNEL );
1467
+ spin_lock (& dev -> lock );
1462
1468
if (value < 0 ) {
1463
1469
clean_req (gadget -> ep0 , dev -> req );
1464
1470
break ;
@@ -1481,11 +1487,14 @@ gadgetfs_setup (struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
1481
1487
if (value >= 0 && dev -> state != STATE_DEV_SETUP ) {
1482
1488
req -> length = value ;
1483
1489
req -> zero = value < w_length ;
1484
- value = usb_ep_queue (gadget -> ep0 , req , GFP_ATOMIC );
1490
+
1491
+ spin_unlock (& dev -> lock );
1492
+ value = usb_ep_queue (gadget -> ep0 , req , GFP_KERNEL );
1485
1493
if (value < 0 ) {
1486
1494
DBG (dev , "ep_queue --> %d\n" , value );
1487
1495
req -> status = 0 ;
1488
1496
}
1497
+ return value ;
1489
1498
}
1490
1499
1491
1500
/* device stalls when value < 0 */
0 commit comments