USB: xhci: Limit bus sg_tablesize to 62 TRBs.
authorSarah Sharp <sarah.a.sharp@linux.intel.com>
Tue, 18 May 2010 23:05:21 +0000 (16:05 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 20 May 2010 20:21:30 +0000 (13:21 -0700)
When a scatter-gather list is enqueued to the xHCI driver, it translates
each entry into a transfer request block (TRB).  Only 63 TRBs can be
used per ring segment, and there must be one additional TRB reserved to
make sure the hardware does not think the ring is empty (so the enqueue
pointer doesn't equal the dequeue pointer).  Limit the bus sg_tablesize
to 62 TRBs.

Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Cc: stable <stable@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/host/xhci-pci.c

index 417d37aff8d7245d9ca09a1fd830a787e063b81f..98a73cd20cc62f653254b1c6969d695884dbdf18 100644 (file)
@@ -54,7 +54,7 @@ static int xhci_pci_setup(struct usb_hcd *hcd)
        struct pci_dev          *pdev = to_pci_dev(hcd->self.controller);
        int                     retval;
 
-       hcd->self.sg_tablesize = TRBS_PER_SEGMENT - 1;
+       hcd->self.sg_tablesize = TRBS_PER_SEGMENT - 2;
 
        xhci->cap_regs = hcd->regs;
        xhci->op_regs = hcd->regs +