On Tue, 14 Jul 2026 12:01:36 +0200,
Philippe Mathieu-Daudé <[email protected]> wrote:
> 
> Hi Kirill,
> 
> On 13/7/26 13:16, Kirill A. Korinsky wrote:
> > xhci_intr_raise() returned early whenever ERDP.EHB was set; that also
> > skipped IRQ assertion after the guest cleared IMAN.IP while leaving the
> > event handler busy bit asserted.
> > 
> > Track the previous IMAN.IP state and suppress only duplicate raises;
> > when ERDP.EHB remains set after IMAN.IP is cleared, assert the IRQ again
> > so the guest can observe the pending event.
> > 
> > Signed-off-by: Kirill A. Korinsky <[email protected]>
> > ---
> >   hw/usb/hcd-xhci.c | 3 ++-
> >   1 file changed, 2 insertions(+), 1 deletion(-)
> > 
> > diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c
> > index 2cdab3ba0e..ce06d52c36 100644
> > --- a/hw/usb/hcd-xhci.c
> > +++ b/hw/usb/hcd-xhci.c
> > @@ -577,12 +577,13 @@ static void xhci_intr_update(XHCIState *xhci, int v)
> >   static void xhci_intr_raise(XHCIState *xhci, int v)
> >   {
> >       bool pending = (xhci->intr[v].erdp_low & ERDP_EHB);
> > +    bool was_raised = (xhci->intr[v].iman & IMAN_IP);
> 
> Per your description we are missing to clear ERDP_EHB?
> 
> @@ -592,6 +592,7 @@ static void xhci_intr_raise(XHCIState *xhci, int v)
>      }
>      if (xhci->intr_raise) {
>          if (xhci->intr_raise(xhci, v, true)) {
> +            xhci->intr[v].erdp_low &= ~ERDP_EHB;
>              xhci->intr[v].iman &= ~IMAN_IP;
>          }
>      }
> 

What seems a real fix for that may be a real root cause.

My test is simple: I boot OpenBSD/octeon in my machine with USB disk, and
inside machine, via SSH, run cvs checkout of ports with -Q option (no
output). It produces ~200k files and works for about 30 minutes.

Without my or your diff the cvs process stuck in biowait, I can use any IO
at all, ls is blocked.

But network and things like ps works well.

And enough input from serial console usually wake up machines.

So far I had reverted my hack and replaced by yours fix, and it survives two
checkout without an issues.

I'll drop that patch from my series.

-- 
wbr, Kirill

Reply via email to