On Wed, Jun 24, 2020 at 03:43:20AM -0600, Patrick Wildt wrote: > 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@
and ok mpi@