mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 10:04:04 +02:00
usb: xhci: remove redundant update_ring_for_set_deq_completion() function
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>
This commit is contained in:
parent
b020761e8c
commit
856563be98
|
|
@ -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",
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user