Commit 6a8e87b23ff4a979bde5451a242466a4b3f9fe7d
Committed by
Greg Kroah-Hartman
1 parent
1393adb2eb
Exists in
master
and in
7 other branches
[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
drivers/usb/host/ehci-q.c
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); |