]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
usb: xhci: remove redundant update_ring_for_set_deq_completion() function
authorNiklas Neronin <niklas.neronin@linux.intel.com>
Thu, 6 Mar 2025 14:49:41 +0000 (16:49 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 6 Mar 2025 15:46:15 +0000 (16:46 +0100)
The function is a remnant from a previous implementation and is now
redundant. There is no longer a need to search for the dequeue pointer,
as both the TRB and segment dequeue pointers are saved within
'queued_deq_seg' and 'queued_deq_ptr'.

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/20250306144954.3507700-3-mathias.nyman@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/host/xhci-ring.c

index 965bffce301e24502310fd4a848ede01e1348530..23cf20026359b4691900d26ab03885cb04433f50 100644 (file)
@@ -1332,43 +1332,6 @@ void xhci_hc_died(struct xhci_hcd *xhci)
                usb_hc_died(xhci_to_hcd(xhci));
 }
 
-static void update_ring_for_set_deq_completion(struct xhci_hcd *xhci,
-               struct xhci_virt_device *dev,
-               struct xhci_ring *ep_ring,
-               unsigned int ep_index)
-{
-       union xhci_trb *dequeue_temp;
-
-       dequeue_temp = ep_ring->dequeue;
-
-       /* If we get two back-to-back stalls, and the first stalled transfer
-        * ends just before a link TRB, the dequeue pointer will be left on
-        * the link TRB by the code in the while loop.  So we have to update
-        * the dequeue pointer one segment further, or we'll jump off
-        * the segment into la-la-land.
-        */
-       if (trb_is_link(ep_ring->dequeue)) {
-               ep_ring->deq_seg = ep_ring->deq_seg->next;
-               ep_ring->dequeue = ep_ring->deq_seg->trbs;
-       }
-
-       while (ep_ring->dequeue != dev->eps[ep_index].queued_deq_ptr) {
-               /* We have more usable TRBs */
-               ep_ring->dequeue++;
-               if (trb_is_link(ep_ring->dequeue)) {
-                       if (ep_ring->dequeue ==
-                                       dev->eps[ep_index].queued_deq_ptr)
-                               break;
-                       ep_ring->deq_seg = ep_ring->deq_seg->next;
-                       ep_ring->dequeue = ep_ring->deq_seg->trbs;
-               }
-               if (ep_ring->dequeue == dequeue_temp) {
-                       xhci_dbg(xhci, "Unable to find new dequeue pointer\n");
-                       break;
-               }
-       }
-}
-
 /*
  * When we get a completion for a Set Transfer Ring Dequeue Pointer command,
  * we need to clear the set deq pending flag in the endpoint ring state, so that
@@ -1473,8 +1436,8 @@ static void xhci_handle_cmd_set_deq(struct xhci_hcd *xhci, int slot_id,
                        /* Update the ring's dequeue segment and dequeue pointer
                         * to reflect the new position.
                         */
-                       update_ring_for_set_deq_completion(xhci, ep->vdev,
-                               ep_ring, ep_index);
+                       ep_ring->deq_seg = ep->queued_deq_seg;
+                       ep_ring->dequeue = ep->queued_deq_ptr;
                } else {
                        xhci_warn(xhci, "Mismatch between completed Set TR Deq Ptr command & xHCI internal state.\n");
                        xhci_warn(xhci, "ep deq seg = %p, deq ptr = %p\n",