Two xHCI bugs from the issue tracker, each with a qtest.
The interval mask is 32 bits wide, so once MFINDEX passes 2^32 isoch TDs
with SIA are no longer held until the next interval boundary. This
matches #3973: onset after 6.2 days of uptime, cleared by re-binding the
controller in the guest.
A guest can declare a non-isoch endpoint as isoch and hit an assertion
when the device NAKs (#3886). #544 is the same assertion, reached from
the kick timer as in patch 4. Its reproducer from 2021 no longer
triggers on master, so it is not tagged.
Both tests fail on master (c1c18d1e64). Tested on x86_64 with an
ASan/UBSan build: usb-hcd-xhci-test, usb-hcd-ehci-test and
usb-hcd-uhci-test pass. The new tests skip on ppc64.
Junjie Cao (4):
hw/usb/hcd-xhci: fix interval alignment after MFINDEX passes 2^32
hw/usb/hcd-xhci: don't assert on NAK when retrying an isoch transfer
tests/qtest/usb-hcd-xhci: test isoch pacing with MFINDEX above 2^32
tests/qtest/usb-hcd-xhci: test isoch endpoint type mismatch
hw/usb/hcd-xhci.c | 33 +---
tests/qtest/usb-hcd-xhci-test.c | 318 ++++++++++++++++++++++++++++++++
2 files changed, 328 insertions(+), 23 deletions(-)
base-commit: c1c18d1e640b64292859ce9f30f3c344edfb0294
--
2.43.0