Source-Changes-D archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: CVS commit: src/sys/dev/usb



Hi,

On 2022/05/14 19:44, Taylor R Campbell wrote:
> Module Name:	src
> Committed By:	riastradh
> Date:		Sat May 14 19:44:37 UTC 2022
> 
> Modified Files:
> 	src/sys/dev/usb: xhci.c
> 
> Log Message:
> xhci(4): Handle race between software abort and hardware stall.

xhci_abortx is expected to stop given single xfer, but it actually
stops all xfers in pipe. When usbd_ar_pipe stops the first xfer in
up_queue of isoc pipe such as uvideo(4), HCI generates multiple
Transfer Events (UVIDEO_NXFERS (3) for uvideo) in order xfers are posted.
ux_status of first xfer is set to USBD_CANCELLED by usbd_xfer_abort, so
usbd_xfer_trycomplete in xhci_event_transfer fails and
usb_transfer_complete is not called (xhci_abortx does it instead).
However, other two xfers has ux_status = USBD_IN_PROGRESS, depending on
how quick events are generated, xhci_event_transfer may call
usb_transfer_complete for them before xhci_abortx calls usb_transfer_complete. 
It may fire KASSERT failure "not start of queue."


Home | Main Index | Thread Index | Old Index