Commit 6a8e87b23ff4a979bde5451a242466a4b3f9fe7d

Authored by Alan Stern
Committed by Greg Kroah-Hartman
1 parent 1393adb2eb

[PATCH] USB core and HCDs: don't put_device while atomic

This patch (as640) removes several put_device and the corresponding
get_device calls from the USB core and HCDs.  Some of the puts were done
in atomic contexts, and none of them are needed since the core now
guarantees that every endpoint will be disabled and every URB completed
before a USB device is released.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Acked-by: David Brownell <david-b@pacbell.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

Showing 7 changed files with 5 additions and 14 deletions Side-by-side Diff

drivers/usb/core/hcd.c
... ... @@ -1105,7 +1105,6 @@
1105 1105 spin_lock_irqsave (&hcd_data_lock, flags);
1106 1106 list_del_init (&urb->urb_list);
1107 1107 spin_unlock_irqrestore (&hcd_data_lock, flags);
1108   - usb_put_dev (urb->dev);
1109 1108 }
1110 1109  
1111 1110  
... ... @@ -1145,7 +1144,6 @@
1145 1144 case HC_STATE_RUNNING:
1146 1145 case HC_STATE_RESUMING:
1147 1146 doit:
1148   - usb_get_dev (urb->dev);
1149 1147 list_add_tail (&urb->urb_list, &ep->urb_list);
1150 1148 status = 0;
1151 1149 break;
drivers/usb/host/ehci-mem.c
... ... @@ -75,7 +75,6 @@
75 75 }
76 76 if (qh->dummy)
77 77 ehci_qtd_free (ehci, qh->dummy);
78   - usb_put_dev (qh->dev);
79 78 dma_pool_free (ehci->qh_pool, qh, qh->qh_dma);
80 79 }
81 80  
drivers/usb/host/ehci-q.c
... ... @@ -702,7 +702,7 @@
702 702 }
703 703  
704 704 /* support for tt scheduling, and access to toggles */
705   - qh->dev = usb_get_dev (urb->dev);
  705 + qh->dev = urb->dev;
706 706  
707 707 /* using TT? */
708 708 switch (urb->dev->speed) {
drivers/usb/host/ehci-sched.c
... ... @@ -1399,7 +1399,7 @@
1399 1399 */
1400 1400  
1401 1401 /* give urb back to the driver ... can be out-of-order */
1402   - dev = usb_get_dev (urb->dev);
  1402 + dev = urb->dev;
1403 1403 ehci_urb_done (ehci, urb, regs);
1404 1404 urb = NULL;
1405 1405  
... ... @@ -1418,7 +1418,6 @@
1418 1418 (stream->bEndpointAddress & USB_DIR_IN) ? "in" : "out");
1419 1419 }
1420 1420 iso_stream_put (ehci, stream);
1421   - usb_put_dev (dev);
1422 1421  
1423 1422 return 1;
1424 1423 }
... ... @@ -1765,7 +1764,7 @@
1765 1764 */
1766 1765  
1767 1766 /* give urb back to the driver */
1768   - dev = usb_get_dev (urb->dev);
  1767 + dev = urb->dev;
1769 1768 ehci_urb_done (ehci, urb, regs);
1770 1769 urb = NULL;
1771 1770  
... ... @@ -1784,7 +1783,6 @@
1784 1783 (stream->bEndpointAddress & USB_DIR_IN) ? "in" : "out");
1785 1784 }
1786 1785 iso_stream_put (ehci, stream);
1787   - usb_put_dev (dev);
1788 1786  
1789 1787 return 1;
1790 1788 }
drivers/usb/host/isp116x-hcd.c
... ... @@ -724,7 +724,7 @@
724 724 ep = hep->hcpriv;
725 725 else {
726 726 INIT_LIST_HEAD(&ep->schedule);
727   - ep->udev = usb_get_dev(udev);
  727 + ep->udev = udev;
728 728 ep->epnum = epnum;
729 729 ep->maxpacket = usb_maxpacket(udev, urb->pipe, is_out);
730 730 usb_settoggle(udev, epnum, is_out, 0);
... ... @@ -891,7 +891,6 @@
891 891 if (!list_empty(&hep->urb_list))
892 892 WARN("ep %p not empty?\n", ep);
893 893  
894   - usb_put_dev(ep->udev);
895 894 kfree(ep);
896 895 hep->hcpriv = NULL;
897 896 }
drivers/usb/host/sl811-hcd.c
... ... @@ -853,7 +853,7 @@
853 853  
854 854 } else {
855 855 INIT_LIST_HEAD(&ep->schedule);
856   - ep->udev = usb_get_dev(udev);
  856 + ep->udev = udev;
857 857 ep->epnum = epnum;
858 858 ep->maxpacket = usb_maxpacket(udev, urb->pipe, is_out);
859 859 ep->defctrl = SL11H_HCTLMASK_ARM | SL11H_HCTLMASK_ENABLE;
... ... @@ -1052,7 +1052,6 @@
1052 1052 if (!list_empty(&hep->urb_list))
1053 1053 WARN("ep %p not empty?\n", ep);
1054 1054  
1055   - usb_put_dev(ep->udev);
1056 1055 kfree(ep);
1057 1056 hep->hcpriv = NULL;
1058 1057 }
drivers/usb/host/uhci-q.c
... ... @@ -179,7 +179,6 @@
179 179 qh->hep = hep;
180 180 qh->udev = udev;
181 181 hep->hcpriv = qh;
182   - usb_get_dev(udev);
183 182  
184 183 } else { /* Skeleton QH */
185 184 qh->state = QH_STATE_ACTIVE;
... ... @@ -197,7 +196,6 @@
197 196 list_del(&qh->node);
198 197 if (qh->udev) {
199 198 qh->hep->hcpriv = NULL;
200   - usb_put_dev(qh->udev);
201 199 uhci_free_td(uhci, qh->dummy_td);
202 200 }
203 201 dma_pool_free(uhci->qh_pool, qh, qh->dma_handle);