Revert "Revert "USB: EHCI: support running URB giveback in tasklet context""
This reverts commit3b8d7321ed
, which brings back commit428aac8a81
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: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
dc4fea795b
commit
c04ee4b113
14 changed files with 13 additions and 18 deletions
|
@ -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 = {
|
||||||
* 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 = {
|
||||||
* 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 = {
|
||||||
* 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 = {
|
||||||
* 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 = {
|
||||||
#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 = {
|
||||||
* 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 = {
|
||||||
.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 (
|
||||||
|
|
||||||
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)
|
||||||
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 = {
|
||||||
* 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 = {
|
||||||
* 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 = {
|
||||||
* 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 = {
|
||||||
* 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 = {
|
||||||
* 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
|
||||||
|
|
Loading…
Add table
Reference in a new issue