Re: Interrupt latency problems

From: Paul Richards <paul_at_freebsd-services.com>
Date: 19 May 2003 20:24:13 +0100
On Mon, 2003-05-12 at 14:09, Paul Richards wrote:
> On Mon, May 12, 2003 at 08:55:34AM -0400, Andrew Gallatin wrote:
> > 
> > Paul Richards writes:
> >  > 
> >  > I tried shifting the irq around last night, the bios does support this.
> >  > I definitely think there's something to this theory, when I put it on
> >  > irq 10 the problem got a whole lots worse to the point that the machine
> >  > couldn't be used and I had to reboot it (just error messages streaming
> >  > past on the console).
> >  > 
> >  > Unfortunately, I don't know what else was on irq10 at the time since
> >  > they move around when I change the bios settings.
> >  > 
> >  > I'm continuing to poke around to find out exactly what's causing
> >  > what....
> > 
> > I have this vague memory that the acpi always uses irq 9.  Perhaps
> > you inadvertently moved something else which generates more interrupts
> > onto irq 9..
> Yeah, that email wasn't very clear. I moved fxp to irq10, so you're
> right, something else probably ended up on irq9.

I've confirmed this was the cause of my poor interrupt performance.

The acpi interrupt handler doesn't do anything to check whether the
interrupt belongs to it or not and so executes every time there's an
interrupt on irq9. If something busy shares irq9 then it can be called
quite a lot.

Since there's no actual GPE event to handle, it always fails to find a
method and so ends up writing an error message for every irq9 interrupt
that happens.

As you can imagine, that's a lot of error messages and I think the
periodic freezes are a result of the message buffer filling up.

I've hacked the method dispatcher to just return if there's not a valid
method and the box is no longer hanging periodically.

I'm not sure how to fix this properly though. Ideally the interrupt
wrapper should be able to check whether there's been an acpi interrupt
and only call the handler if there has been, but I can find no way of
doing that, there doesn't seem to be a bit that signifies an SCI
interrupt. The only solution would seem to be to check all the status
bits in the GPE registers but I'm not sure that would be correct either
since there could be fixed hardware events that could cause an SCI too.
In any case, you'll still end up calling the acpi handler code for each
irq9 interrupt rather than detecting whether it's acpi related or not
before calling the handler.

I'm also not sure why a lot more people aren't seeing this, unless my
motherboard is odd in sharing the acpi interrupt with a pci slot.

-- 
Paul Richards <paul_at_freebsd-services.com>
Received on Mon May 19 2003 - 10:29:19 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:08 UTC