usb: xhci: add 'goto' for halted endpoint check in handle_tx_event()
authorNiklas Neronin <niklas.neronin@linux.intel.com>
Wed, 26 Jun 2024 12:48:33 +0000 (15:48 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 27 Jun 2024 14:08:06 +0000 (16:08 +0200)
Add 'goto' statement for a halted endpoint, streamlining the error
handling process. In future handle_tx_event() changes this 'goto'
statement will have more uses.

Signed-off-by: Niklas Neronin <niklas.neronin@linux.intel.com>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Link: https://lore.kernel.org/r/20240626124835.1023046-20-mathias.nyman@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/host/xhci-ring.c

index d037d3bbc7671c7ef33eb2b776bdd62a5ac82a2b..49f8f980776bad4b713a792d573db741a461c482 100644 (file)
@@ -2788,10 +2788,9 @@ static int handle_tx_event(struct xhci_hcd *xhci,
                                xhci_dbg(xhci, "td_list is empty while skip flag set. Clear skip flag for slot %u ep %u.\n",
                                         slot_id, ep_index);
                        }
-                       if (xhci_halted_host_endpoint(ep_ctx, trb_comp_code))
-                               xhci_handle_halted_endpoint(xhci, ep, NULL, EP_HARD_RESET);
 
-                       return 0;
+                       td = NULL;
+                       goto check_endpoint_halted;
                }
 
                td = list_first_entry(&ep_ring->td_list, struct xhci_td,
@@ -2899,20 +2898,22 @@ static int handle_tx_event(struct xhci_hcd *xhci,
         * indefinitely.
         */
 
-       if (trb_is_noop(ep_trb)) {
-               if (xhci_halted_host_endpoint(ep_ctx, trb_comp_code))
-                       xhci_handle_halted_endpoint(xhci, ep, td, EP_HARD_RESET);
-       } else {
-               td->status = status;
+       if (trb_is_noop(ep_trb))
+               goto check_endpoint_halted;
 
-               /* update the urb's actual_length and give back to the core */
-               if (usb_endpoint_xfer_control(&td->urb->ep->desc))
-                       process_ctrl_td(xhci, ep, ep_ring, td, ep_trb, event);
-               else if (usb_endpoint_xfer_isoc(&td->urb->ep->desc))
-                       process_isoc_td(xhci, ep, ep_ring, td, ep_trb, event);
-               else
-                       process_bulk_intr_td(xhci, ep, ep_ring, td, ep_trb, event);
-       }
+       td->status = status;
+
+       /* update the urb's actual_length and give back to the core */
+       if (usb_endpoint_xfer_control(&td->urb->ep->desc))
+               process_ctrl_td(xhci, ep, ep_ring, td, ep_trb, event);
+       else if (usb_endpoint_xfer_isoc(&td->urb->ep->desc))
+               process_isoc_td(xhci, ep, ep_ring, td, ep_trb, event);
+       else
+               process_bulk_intr_td(xhci, ep, ep_ring, td, ep_trb, event);
+
+check_endpoint_halted:
+       if (xhci_halted_host_endpoint(ep_ctx, trb_comp_code))
+               xhci_handle_halted_endpoint(xhci, ep, td, EP_HARD_RESET);
 
        return 0;