|
@@ -2463,14 +2463,21 @@ static int handle_tx_event(struct xhci_hcd *xhci,
|
|
|
* TD list.
|
|
|
*/
|
|
|
if (list_empty(&ep_ring->td_list)) {
|
|
|
- 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);
|
|
|
- xhci_dbg(xhci, "Event TRB with TRB type ID %u\n",
|
|
|
- (le32_to_cpu(event->flags) &
|
|
|
- TRB_TYPE_BITMASK)>>10);
|
|
|
- xhci_print_trb_offsets(xhci, (union xhci_trb *) event);
|
|
|
+ /*
|
|
|
+ * A stopped endpoint may generate an extra completion
|
|
|
+ * event if the device was suspended. Don't print
|
|
|
+ * warnings.
|
|
|
+ */
|
|
|
+ if (!(trb_comp_code == COMP_STOP ||
|
|
|
+ trb_comp_code == COMP_STOP_INVAL)) {
|
|
|
+ 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);
|
|
|
+ xhci_dbg(xhci, "Event TRB with TRB type ID %u\n",
|
|
|
+ (le32_to_cpu(event->flags) &
|
|
|
+ TRB_TYPE_BITMASK)>>10);
|
|
|
+ xhci_print_trb_offsets(xhci, (union xhci_trb *) event);
|
|
|
+ }
|
|
|
if (ep->skip) {
|
|
|
ep->skip = false;
|
|
|
xhci_dbg(xhci, "td_list is empty while skip "
|