mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-24 17:23:25 -05:00
xhci: Update last segment pointer after Event Ring expansion
When expanding a ring at its "end", ring->last_seg needs to be updated for Event Rings as well, not just for all the other ring types. This is not a fix because ring expansion currently isn't done on the Event Ring. It's just in preparation for when it's added. Signed-off-by: Lukas Wunner <lukas@wunner.de> Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> Link: https://lore.kernel.org/r/20231019102924.2797346-8-mathias.nyman@linux.intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
35899f58fe
commit
67ab841a17
1 changed files with 7 additions and 5 deletions
|
@ -146,11 +146,13 @@ static void xhci_link_rings(struct xhci_hcd *xhci, struct xhci_ring *ring,
|
|||
xhci_link_segments(last, next, ring->type, chain_links);
|
||||
ring->num_segs += num_segs;
|
||||
|
||||
if (ring->type != TYPE_EVENT && ring->enq_seg == ring->last_seg) {
|
||||
ring->last_seg->trbs[TRBS_PER_SEGMENT-1].link.control
|
||||
&= ~cpu_to_le32(LINK_TOGGLE);
|
||||
last->trbs[TRBS_PER_SEGMENT-1].link.control
|
||||
|= cpu_to_le32(LINK_TOGGLE);
|
||||
if (ring->enq_seg == ring->last_seg) {
|
||||
if (ring->type != TYPE_EVENT) {
|
||||
ring->last_seg->trbs[TRBS_PER_SEGMENT-1].link.control
|
||||
&= ~cpu_to_le32(LINK_TOGGLE);
|
||||
last->trbs[TRBS_PER_SEGMENT-1].link.control
|
||||
|= cpu_to_le32(LINK_TOGGLE);
|
||||
}
|
||||
ring->last_seg = last;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue