diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2016-06-20 11:25:44 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2016-06-20 11:25:44 -0400 |
commit | af52739b922f656eb1f39016fabaabe4baeda2e2 (patch) | |
tree | 79a7aa810d0493cd0cf4adebac26d37f12e8b545 /drivers/usb/gadget/legacy/inode.c | |
parent | 25ed6a5e97809129a1bc852b6b5c7d03baa112c4 (diff) | |
parent | 33688abb2802ff3a230bd2441f765477b94cc89e (diff) |
Merge 4.7-rc4 into staging-next
We want the fixes in here, and we can resolve a merge issue in
drivers/iio/industrialio-trigger.c
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/gadget/legacy/inode.c')
-rw-r--r-- | drivers/usb/gadget/legacy/inode.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/drivers/usb/gadget/legacy/inode.c b/drivers/usb/gadget/legacy/inode.c index e64479f882a5..aa3707bdebb4 100644 --- a/drivers/usb/gadget/legacy/inode.c +++ b/drivers/usb/gadget/legacy/inode.c | |||
@@ -938,8 +938,11 @@ ep0_read (struct file *fd, char __user *buf, size_t len, loff_t *ptr) | |||
938 | struct usb_ep *ep = dev->gadget->ep0; | 938 | struct usb_ep *ep = dev->gadget->ep0; |
939 | struct usb_request *req = dev->req; | 939 | struct usb_request *req = dev->req; |
940 | 940 | ||
941 | if ((retval = setup_req (ep, req, 0)) == 0) | 941 | if ((retval = setup_req (ep, req, 0)) == 0) { |
942 | retval = usb_ep_queue (ep, req, GFP_ATOMIC); | 942 | spin_unlock_irq (&dev->lock); |
943 | retval = usb_ep_queue (ep, req, GFP_KERNEL); | ||
944 | spin_lock_irq (&dev->lock); | ||
945 | } | ||
943 | dev->state = STATE_DEV_CONNECTED; | 946 | dev->state = STATE_DEV_CONNECTED; |
944 | 947 | ||
945 | /* assume that was SET_CONFIGURATION */ | 948 | /* assume that was SET_CONFIGURATION */ |
@@ -1457,8 +1460,11 @@ delegate: | |||
1457 | w_length); | 1460 | w_length); |
1458 | if (value < 0) | 1461 | if (value < 0) |
1459 | break; | 1462 | break; |
1463 | |||
1464 | spin_unlock (&dev->lock); | ||
1460 | value = usb_ep_queue (gadget->ep0, dev->req, | 1465 | value = usb_ep_queue (gadget->ep0, dev->req, |
1461 | GFP_ATOMIC); | 1466 | GFP_KERNEL); |
1467 | spin_lock (&dev->lock); | ||
1462 | if (value < 0) { | 1468 | if (value < 0) { |
1463 | clean_req (gadget->ep0, dev->req); | 1469 | clean_req (gadget->ep0, dev->req); |
1464 | break; | 1470 | break; |
@@ -1481,11 +1487,14 @@ delegate: | |||
1481 | if (value >= 0 && dev->state != STATE_DEV_SETUP) { | 1487 | if (value >= 0 && dev->state != STATE_DEV_SETUP) { |
1482 | req->length = value; | 1488 | req->length = value; |
1483 | req->zero = value < w_length; | 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 | if (value < 0) { | 1493 | if (value < 0) { |
1486 | DBG (dev, "ep_queue --> %d\n", value); | 1494 | DBG (dev, "ep_queue --> %d\n", value); |
1487 | req->status = 0; | 1495 | req->status = 0; |
1488 | } | 1496 | } |
1497 | return value; | ||
1489 | } | 1498 | } |
1490 | 1499 | ||
1491 | /* device stalls when value < 0 */ | 1500 | /* device stalls when value < 0 */ |