Subject: Re: Interrupts
To: Tim Kelly <hockey@dialectronics.com>
From: Michael <macallan18@earthlink.net>
List: port-macppc
Date: 12/06/2004 12:53:17
Hello,

> >> If an interrupt comes in after enabling it (gc_enable_irq) but before
> >> ci->ci_ipending is unset, would you lose the interrupt?
> >Depends - if processor interrupts are enabled it will be processed
> >normally, if not gc_read_irq() will see >it.
> 
> I'm finding that we can't count on processor interrupts being on when we
> expect them. This was at the heart of the MP problem. If a call chain comes
> through Idle(), the do_pending_int() via spllower() gets called with the
> PSL_EE off. Keeping PSL_EE on before spllower() appears to have some
> problems. I can't explain why, as it seems to me it would make sense to
> alter Idle().

Hmm, that's something for the original author - compare do_pending_intr() and ext_intr(), one of them explicitly sets PSL_EE, the other one masks it out - so do_pending_intr() only intends to turn off interrupts at some point, but ext_intr() explixitly turns them on. Looks intentional.

have fun
Michael