Commit c04ee4b1 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

Revert "Revert "USB: EHCI: support running URB giveback in tasklet context""

This reverts commit 3b8d7321, which
brings back commit 428aac8a as it should
be working for the 3.13-rc1 merge window now that Alan's other fixes are
here in the tree already.

Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: Ming Lei <ming.lei@canonical.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent dc4fea79
...@@ -669,7 +669,7 @@ static const struct hc_driver ehci_fsl_hc_driver = { ...@@ -669,7 +669,7 @@ static const struct hc_driver ehci_fsl_hc_driver = {
* generic hardware linkage * generic hardware linkage
*/ */
.irq = ehci_irq, .irq = ehci_irq,
.flags = HCD_USB2 | HCD_MEMORY, .flags = HCD_USB2 | HCD_MEMORY | HCD_BH,
/* /*
* basic lifecycle operations * basic lifecycle operations
......
...@@ -43,7 +43,7 @@ static const struct hc_driver ehci_grlib_hc_driver = { ...@@ -43,7 +43,7 @@ static const struct hc_driver ehci_grlib_hc_driver = {
* generic hardware linkage * generic hardware linkage
*/ */
.irq = ehci_irq, .irq = ehci_irq,
.flags = HCD_MEMORY | HCD_USB2, .flags = HCD_MEMORY | HCD_USB2 | HCD_BH,
/* /*
* basic lifecycle operations * basic lifecycle operations
......
...@@ -1158,7 +1158,7 @@ static const struct hc_driver ehci_hc_driver = { ...@@ -1158,7 +1158,7 @@ static const struct hc_driver ehci_hc_driver = {
* generic hardware linkage * generic hardware linkage
*/ */
.irq = ehci_irq, .irq = ehci_irq,
.flags = HCD_MEMORY | HCD_USB2, .flags = HCD_MEMORY | HCD_USB2 | HCD_BH,
/* /*
* basic lifecycle operations * basic lifecycle operations
......
...@@ -96,7 +96,7 @@ static const struct hc_driver mv_ehci_hc_driver = { ...@@ -96,7 +96,7 @@ static const struct hc_driver mv_ehci_hc_driver = {
* generic hardware linkage * generic hardware linkage
*/ */
.irq = ehci_irq, .irq = ehci_irq,
.flags = HCD_MEMORY | HCD_USB2, .flags = HCD_MEMORY | HCD_USB2 | HCD_BH,
/* /*
* basic lifecycle operations * basic lifecycle operations
......
...@@ -51,7 +51,7 @@ static const struct hc_driver ehci_octeon_hc_driver = { ...@@ -51,7 +51,7 @@ static const struct hc_driver ehci_octeon_hc_driver = {
* generic hardware linkage * generic hardware linkage
*/ */
.irq = ehci_irq, .irq = ehci_irq,
.flags = HCD_MEMORY | HCD_USB2, .flags = HCD_MEMORY | HCD_USB2 | HCD_BH,
/* /*
* basic lifecycle operations * basic lifecycle operations
......
...@@ -286,7 +286,7 @@ static const struct hc_driver ehci_msp_hc_driver = { ...@@ -286,7 +286,7 @@ static const struct hc_driver ehci_msp_hc_driver = {
#else #else
.irq = ehci_irq, .irq = ehci_irq,
#endif #endif
.flags = HCD_MEMORY | HCD_USB2, .flags = HCD_MEMORY | HCD_USB2 | HCD_BH,
/* /*
* basic lifecycle operations * basic lifecycle operations
......
...@@ -28,7 +28,7 @@ static const struct hc_driver ehci_ppc_of_hc_driver = { ...@@ -28,7 +28,7 @@ static const struct hc_driver ehci_ppc_of_hc_driver = {
* generic hardware linkage * generic hardware linkage
*/ */
.irq = ehci_irq, .irq = ehci_irq,
.flags = HCD_MEMORY | HCD_USB2, .flags = HCD_MEMORY | HCD_USB2 | HCD_BH,
/* /*
* basic lifecycle operations * basic lifecycle operations
......
...@@ -71,7 +71,7 @@ static const struct hc_driver ps3_ehci_hc_driver = { ...@@ -71,7 +71,7 @@ static const struct hc_driver ps3_ehci_hc_driver = {
.product_desc = "PS3 EHCI Host Controller", .product_desc = "PS3 EHCI Host Controller",
.hcd_priv_size = sizeof(struct ehci_hcd), .hcd_priv_size = sizeof(struct ehci_hcd),
.irq = ehci_irq, .irq = ehci_irq,
.flags = HCD_MEMORY | HCD_USB2, .flags = HCD_MEMORY | HCD_USB2 | HCD_BH,
.reset = ps3_ehci_hc_reset, .reset = ps3_ehci_hc_reset,
.start = ehci_run, .start = ehci_run,
.stop = ehci_stop, .stop = ehci_stop,
......
...@@ -247,8 +247,6 @@ static int qtd_copy_status ( ...@@ -247,8 +247,6 @@ static int qtd_copy_status (
static void static void
ehci_urb_done(struct ehci_hcd *ehci, struct urb *urb, int status) ehci_urb_done(struct ehci_hcd *ehci, struct urb *urb, int status)
__releases(ehci->lock)
__acquires(ehci->lock)
{ {
if (usb_pipetype(urb->pipe) == PIPE_INTERRUPT) { if (usb_pipetype(urb->pipe) == PIPE_INTERRUPT) {
/* ... update hc-wide periodic stats */ /* ... update hc-wide periodic stats */
...@@ -274,11 +272,8 @@ __acquires(ehci->lock) ...@@ -274,11 +272,8 @@ __acquires(ehci->lock)
urb->actual_length, urb->transfer_buffer_length); urb->actual_length, urb->transfer_buffer_length);
#endif #endif
/* complete() can reenter this HCD */
usb_hcd_unlink_urb_from_ep(ehci_to_hcd(ehci), urb); usb_hcd_unlink_urb_from_ep(ehci_to_hcd(ehci), urb);
spin_unlock (&ehci->lock);
usb_hcd_giveback_urb(ehci_to_hcd(ehci), urb, status); usb_hcd_giveback_urb(ehci_to_hcd(ehci), urb, status);
spin_lock (&ehci->lock);
} }
static int qh_schedule (struct ehci_hcd *ehci, struct ehci_qh *qh); static int qh_schedule (struct ehci_hcd *ehci, struct ehci_qh *qh);
......
...@@ -55,7 +55,7 @@ const struct hc_driver ehci_sead3_hc_driver = { ...@@ -55,7 +55,7 @@ const struct hc_driver ehci_sead3_hc_driver = {
* generic hardware linkage * generic hardware linkage
*/ */
.irq = ehci_irq, .irq = ehci_irq,
.flags = HCD_MEMORY | HCD_USB2, .flags = HCD_MEMORY | HCD_USB2 | HCD_BH,
/* /*
* basic lifecycle operations * basic lifecycle operations
......
...@@ -36,7 +36,7 @@ static const struct hc_driver ehci_sh_hc_driver = { ...@@ -36,7 +36,7 @@ static const struct hc_driver ehci_sh_hc_driver = {
* generic hardware linkage * generic hardware linkage
*/ */
.irq = ehci_irq, .irq = ehci_irq,
.flags = HCD_USB2 | HCD_MEMORY, .flags = HCD_USB2 | HCD_MEMORY | HCD_BH,
/* /*
* basic lifecycle operations * basic lifecycle operations
......
...@@ -61,7 +61,7 @@ static const struct hc_driver ehci_tilegx_hc_driver = { ...@@ -61,7 +61,7 @@ static const struct hc_driver ehci_tilegx_hc_driver = {
* Generic hardware linkage. * Generic hardware linkage.
*/ */
.irq = ehci_irq, .irq = ehci_irq,
.flags = HCD_MEMORY | HCD_USB2, .flags = HCD_MEMORY | HCD_USB2 | HCD_BH,
/* /*
* Basic lifecycle operations. * Basic lifecycle operations.
......
...@@ -108,7 +108,7 @@ static const struct hc_driver ehci_w90x900_hc_driver = { ...@@ -108,7 +108,7 @@ static const struct hc_driver ehci_w90x900_hc_driver = {
* generic hardware linkage * generic hardware linkage
*/ */
.irq = ehci_irq, .irq = ehci_irq,
.flags = HCD_USB2|HCD_MEMORY, .flags = HCD_USB2|HCD_MEMORY|HCD_BH,
/* /*
* basic lifecycle operations * basic lifecycle operations
......
...@@ -79,7 +79,7 @@ static const struct hc_driver ehci_xilinx_of_hc_driver = { ...@@ -79,7 +79,7 @@ static const struct hc_driver ehci_xilinx_of_hc_driver = {
* generic hardware linkage * generic hardware linkage
*/ */
.irq = ehci_irq, .irq = ehci_irq,
.flags = HCD_MEMORY | HCD_USB2, .flags = HCD_MEMORY | HCD_USB2 | HCD_BH,
/* /*
* basic lifecycle operations * basic lifecycle operations
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment