CVSROOT:        /cvs
Module name:    src
Changes by:     patr...@cvs.openbsd.org 2020/06/24 03:43:20

Modified files:
        sys/dev/usb    : xhci.c 

Log message:
Acknowledge xhci(4) interrupts before calling usb_schedsoftintr().

On powerdown (halt -p), sd(4)'s suspend function tries to powerdown
a USB mass storage using a STOP command.  In that case we are already
cold and splhigh(), so that the xhci is supposed to run in polling-
mode.

usb_schedsoftintr() behaves differently when running in polling-mode.
Instead of scheduling a soft interrupt, it immediately dequeues from
the event queue.  But dequeueing means touching the xhci registers.

Apparently we need to acknowledge the interrupts before touching those
registers, the hardware doesn't like it otherwise and we will never get
an interrupt status for the second transfer.

ok gerhard@

Reply via email to