Re: 2.5.69 Interrupt Latency

Greg KH (greg@kroah.com)
Mon, 12 May 2003 09:24:54 -0700


On Mon, May 12, 2003 at 08:57:42AM -0500, Paul Fulghum wrote:
> On Fri, 2003-05-09 at 16:28, Andrew Morton wrote:
>
> > This code was added to wakeup_hc(). It is called from uhci_irq():
> >
> > + /* Global resume for 20ms */
> > + outw(USBCMD_FGR | USBCMD_EGSM, io_addr + USBCMD);
> > + wait_ms(20);
> >
> > The changelog just says "Minor patch for uhci-hcd.c"
> >
> > Can you delete the wait_ms() and see if that is our culprit?
>
> This is the culprit.
>
> Removing this line corrects the latency problems on
> the server. A 20ms delay seems pretty excessive for an
> interrupt handler. I'm not sure what it is supposed to
> accomplish, but this seems like something that should
> be scheduled to run outside of the ISR.

This should only happen when your hardware receives a "RESUME" signal
from a USB device AND the host controller is in a global suspend state
at that time.

Now I think the wait_ms() call is valid for when this is really
happening, but it sounds like you are having this happen all the time
during normal operation. Are you using any USB devices with this
server? Is USB enabled in the BIOS or not?

Also, Johannes / Alan, should we be verifying the global suspend state
when we read this value so that we don't accidentally call wakeup_hc()
for hardware that sets this bit in an illegal way? I think that might
be the proper fix for this problem.

thanks,

greg k-h
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/