| From f48b7caed7ae859d7d2e25b3b57fa04ebd803740 Mon Sep 17 00:00:00 2001 |
| From: Sarah Sharp <sarah.a.sharp@linux.intel.com> |
| Date: Tue, 8 May 2012 07:09:26 -0700 |
| Subject: [PATCH] xhci: Reset reserved command ring TRBs on cleanup. |
| |
| commit 33b2831ac870d50cc8e01c317b07fb1e69c13fe1 upstream. |
| |
| When the xHCI driver needs to clean up memory (perhaps due to a failed |
| register restore on resume from S3 or resume from S4), it needs to reset |
| the number of reserved TRBs on the command ring to zero. Otherwise, |
| several resume cycles (about 30) with a UAS device attached will |
| continually increment the number of reserved TRBs, until all command |
| submissions fail because there isn't enough room on the command ring. |
| |
| This patch should be backported to kernels as old as 2.6.32, |
| that contain the commit 913a8a344ffcaf0b4a586d6662a2c66a7106557d |
| "USB: xhci: Change how xHCI commands are handled." |
| |
| Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| --- |
| drivers/usb/host/xhci-mem.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c |
| index 31cf540480fe..cb743a6bcfe4 100644 |
| --- a/drivers/usb/host/xhci-mem.c |
| +++ b/drivers/usb/host/xhci-mem.c |
| @@ -1048,6 +1048,7 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci) |
| xhci_dbg(xhci, "Freed event ring\n"); |
| |
| xhci_write_64(xhci, 0, &xhci->op_regs->cmd_ring); |
| + xhci->cmd_ring_reserved_trbs = 0; |
| if (xhci->cmd_ring) |
| xhci_ring_free(xhci, xhci->cmd_ring); |
| xhci->cmd_ring = NULL; |
| -- |
| 1.8.5.2 |
| |