usb: xhci: avoid unnecessary calculation
authorLu Baolu <baolu.lu@linux.intel.com>
Mon, 23 Jan 2017 12:20:01 +0000 (14:20 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 25 Jan 2017 09:57:35 +0000 (10:57 +0100)
No need to calculate remainder and length_field, if there is
no data phase of a control transfer.

Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
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 61b5fea4cdb3d56afc0940131a07f1874c96e205..2374a13efb56c64184b31fc53373c6705eb0a8a9 100644 (file)
@@ -3237,7 +3237,7 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
        struct usb_ctrlrequest *setup;
        struct xhci_generic_trb *start_trb;
        int start_cycle;
-       u32 field, length_field, remainder;
+       u32 field;
        struct urb_priv *urb_priv;
        struct xhci_td *td;
 
@@ -3310,16 +3310,16 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
        else
                field = TRB_TYPE(TRB_DATA);
 
-       remainder = xhci_td_remainder(xhci, 0,
-                                  urb->transfer_buffer_length,
-                                  urb->transfer_buffer_length,
-                                  urb, 1);
-
-       length_field = TRB_LEN(urb->transfer_buffer_length) |
-               TRB_TD_SIZE(remainder) |
-               TRB_INTR_TARGET(0);
-
        if (urb->transfer_buffer_length > 0) {
+               u32 length_field, remainder;
+
+               remainder = xhci_td_remainder(xhci, 0,
+                               urb->transfer_buffer_length,
+                               urb->transfer_buffer_length,
+                               urb, 1);
+               length_field = TRB_LEN(urb->transfer_buffer_length) |
+                               TRB_TD_SIZE(remainder) |
+                               TRB_INTR_TARGET(0);
                if (setup->bRequestType & USB_DIR_IN)
                        field |= TRB_DIR_IN;
                queue_trb(xhci, ep_ring, true,