How to catch interrupt
Bruce Evans
bde at zeta.org.au
Thu Jun 17 07:01:30 GMT 2004
On Thu, 17 Jun 2004, Roman Kurakin wrote:
> Bruce Evans:
> >However, you may only need to test for pending interrupts. This can
> >be done for isa interrupts using isa_irq_pending() to get a bitmap of
> >
> It seems that this function is not working for interrupts that were
> already used
> by some driver before I call it.
It only works for unacknowledged interrupts, so it can only work for
masked interrupts. See sio.c:
% /*
% * We don't want to get actual interrupts, just masked ones.
% * Interrupts from this line should already be masked in the ICU,
% * but mask them in the processor as well in case there are some
% * (misconfigured) shared interrupts.
% */
% mtx_lock_spin(&sio_lock);
Note that masking interrupts in the processor only helps for the non-SMP
case, and the comment has rotted:
- the code acquires a spinlock. It only masks interrupts as a BAD side
effect. In my version, acquiring a spinlock doesn't mask processor
interrupts, and there is an explicit intr_disable().
- interrupts can now be shared in some non-misconfigured cases.
Bruce
More information about the freebsd-current
mailing list