|
@@ -2477,12 +2477,16 @@ static int handle_tx_event(struct xhci_hcd *xhci,
|
|
|
*/
|
|
|
if (list_empty(&ep_ring->td_list)) {
|
|
|
/*
|
|
|
- * A stopped endpoint may generate an extra completion
|
|
|
- * event if the device was suspended. Don't print
|
|
|
- * warnings.
|
|
|
+ * Don't print wanings if it's due to a stopped endpoint
|
|
|
+ * generating an extra completion event if the device
|
|
|
+ * was suspended. Or, a event for the last TRB of a
|
|
|
+ * short TD we already got a short event for.
|
|
|
+ * The short TD is already removed from the TD list.
|
|
|
*/
|
|
|
+
|
|
|
if (!(trb_comp_code == COMP_STOPPED ||
|
|
|
- trb_comp_code == COMP_STOPPED_LENGTH_INVALID)) {
|
|
|
+ trb_comp_code == COMP_STOPPED_LENGTH_INVALID ||
|
|
|
+ ep_ring->last_td_was_short)) {
|
|
|
xhci_warn(xhci, "WARN Event TRB for slot %d ep %d with no TDs queued?\n",
|
|
|
TRB_TO_SLOT_ID(le32_to_cpu(event->flags)),
|
|
|
ep_index);
|