How to catch interrupt

Bruce Evans bde at
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.


More information about the freebsd-current mailing list