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