Skip to content

Commit

Permalink
xhci: Fix oops happening after address device timeout
Browse files Browse the repository at this point in the history
When a command times out, the command ring is first aborted,
and then stopped. If the command ring is empty when it is stopped
the stop event will point to next command which is not yet set.
xHCI tries to handle this next event often causing an oops.

Don't handle command completion events on stopped cmd ring if ring is
empty.

This patch should be backported to kernels as old as 3.7, that contain
the commit b92cc66 "xHCI: add aborting
command ring function"

Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Reported-by: Giovanni <giovanni.nervi@yahoo.com>
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Cc: stable@vger.kernel.org
  • Loading branch information
Mathias Nyman authored and Sarah Sharp committed Sep 23, 2013
1 parent 9d23108 commit 284d205
Showing 1 changed file with 6 additions and 0 deletions.
6 changes: 6 additions & 0 deletions drivers/usb/host/xhci-ring.c
Original file line number Diff line number Diff line change
Expand Up @@ -1414,6 +1414,12 @@ static void handle_cmd_completion(struct xhci_hcd *xhci,
inc_deq(xhci, xhci->cmd_ring);
return;
}
/* There is no command to handle if we get a stop event when the
* command ring is empty, event->cmd_trb points to the next
* unset command
*/
if (xhci->cmd_ring->dequeue == xhci->cmd_ring->enqueue)
return;
}

switch (le32_to_cpu(xhci->cmd_ring->dequeue->generic.field[3])
Expand Down

0 comments on commit 284d205

Please sign in to comment.