]> git.ipfire.org Git - people/arne_f/kernel.git/commitdiff
xhci: remove extra URB_SHORT_NOT_OK checks in xhci, core handles most cases
authorMathias Nyman <mathias.nyman@linux.intel.com>
Fri, 11 Nov 2016 13:13:15 +0000 (15:13 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 14 Nov 2016 09:18:21 +0000 (10:18 +0100)
We only check for the URB_SHORT_NOT_OK urb flag to set the urb status
to -EREMOTEIO for transfers that didn't transfer all data.

This will be done in __usb_hcd_giveback() for other than isoc tranfers,
so remove the redundant check from xhci.

Also fix a couple split lines in debug messages to make them greppable.

Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/host/xhci-ring.c

index b150079a9d27cbc3654b2a8db274323c44eb25ad..ae3a02e83e30b334043e1df4c523b7336d19b074 100644 (file)
@@ -1896,9 +1896,6 @@ td_cleanup:
                        urb->transfer_buffer_length,
                        urb->actual_length);
                urb->actual_length = 0;
-               if (td->urb->transfer_flags & URB_SHORT_NOT_OK)
-                       *status = -EREMOTEIO;
-               else
                        *status = 0;
        }
        list_del_init(&td->td_list);
@@ -1958,9 +1955,6 @@ static int process_ctrl_td(struct xhci_hcd *xhci, struct xhci_td *td,
                }
                break;
        case COMP_SHORT_TX:
-               if (td->urb->transfer_flags & URB_SHORT_NOT_OK)
-                       *status = -EREMOTEIO;
-               else
                        *status = 0;
                break;
        case COMP_STOP_SHORT:
@@ -2007,16 +2001,7 @@ static int process_ctrl_td(struct xhci_hcd *xhci, struct xhci_td *td,
        if (event_trb != ep_ring->dequeue) {
                /* The event was for the status stage */
                if (event_trb == td->last_trb) {
-                       if (td->urb_length_set) {
-                               /* Don't overwrite a previously set error code
-                                */
-                               if ((*status == -EINPROGRESS || *status == 0) &&
-                                               (td->urb->transfer_flags
-                                                & URB_SHORT_NOT_OK))
-                                       /* Did we already see a short data
-                                        * stage? */
-                                       *status = -EREMOTEIO;
-                       } else {
+                       if (!td->urb_length_set) {
                                td->urb->actual_length =
                                        td->urb->transfer_buffer_length;
                        }
@@ -2180,24 +2165,15 @@ static int process_bulk_intr_td(struct xhci_hcd *xhci, struct xhci_td *td,
                /* Double check that the HW transferred everything. */
                if (event_trb != td->last_trb ||
                    EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)) != 0) {
-                       xhci_warn(xhci, "WARN Successful completion "
-                                       "on short TX\n");
-                       if (td->urb->transfer_flags & URB_SHORT_NOT_OK)
-                               *status = -EREMOTEIO;
-                       else
-                               *status = 0;
+                       xhci_warn(xhci, "WARN Successful completion on short TX\n");
                        if ((xhci->quirks & XHCI_TRUST_TX_LENGTH))
                                trb_comp_code = COMP_SHORT_TX;
-               } else {
-                       *status = 0;
                }
+               *status = 0;
                break;
        case COMP_STOP_SHORT:
        case COMP_SHORT_TX:
-               if (td->urb->transfer_flags & URB_SHORT_NOT_OK)
-                       *status = -EREMOTEIO;
-               else
-                       *status = 0;
+               *status = 0;
                break;
        default:
                /* Others already handled above */
@@ -2229,29 +2205,13 @@ static int process_bulk_intr_td(struct xhci_hcd *xhci, struct xhci_td *td,
                                EVENT_TRB_LEN(le32_to_cpu(event->transfer_len));
                        if (td->urb->transfer_buffer_length <
                                        td->urb->actual_length) {
-                               xhci_warn(xhci, "HC gave bad length "
-                                               "of %d bytes left\n",
+                               xhci_warn(xhci, "HC gave bad length of %d bytes left\n",
                                          EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)));
                                td->urb->actual_length = 0;
-                               if (td->urb->transfer_flags & URB_SHORT_NOT_OK)
-                                       *status = -EREMOTEIO;
-                               else
-                                       *status = 0;
+                               *status = 0;
                        }
                        /* Don't overwrite a previously set error code */
-                       if (*status == -EINPROGRESS) {
-                               if (td->urb->transfer_flags & URB_SHORT_NOT_OK)
-                                       *status = -EREMOTEIO;
-                               else
-                                       *status = 0;
-                       }
-               } else {
-                       td->urb->actual_length =
-                               td->urb->transfer_buffer_length;
-                       /* Ignore a short packet completion if the
-                        * untransferred length was zero.
-                        */
-                       if (*status == -EREMOTEIO)
+                       if (*status == -EINPROGRESS)
                                *status = 0;
                }
        } else {