Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 5 Apr 2003 14:59:48 -0500 (EST)
From:      Andrew Gallatin <gallatin@cs.duke.edu>
To:        Bruce Evans <bde@zeta.org.au>
Cc:        freebsd-net@freebsd.org
Subject:   Re: Disable/Enable Interrupts in ISR
Message-ID:  <16015.13748.503036.374679@grasshopper.cs.duke.edu>
In-Reply-To: <20030405163141.T37137@gamplex.bde.org>
References:  <20030404094628.A59969@hub.freebsd.org> <20030405163141.T37137@gamplex.bde.org>

next in thread | previous in thread | raw e-mail | index | archive | help

Bruce Evans writes:
 > > Is there an issue on non-x86 architectures?
 > 
 > Not AFAIK.  Not far, but SMP and FreeBSD's ithread implementation need
 > something like an x86 ICU to work right.  The interrupt mask must be
 > global, and per-cpu ipls don't (naturally) work right even in the 1-cpu
 > case since they are designed for masking interrupts in a nested way with
 > the CPU determining the prioritization, but ithreads are non-nested and
 > want their own prioritization.
 > 
 > Bruce

On 5.0 alpha, when an non-fast interrupt is dispatched, the device
interrupt is disabled in the hardware.  Eg, for PC like machines,
interrupts are disabled/re-enabled each time an interrupt fires via
isa_{en,dis}able_intr() in alpha/isa/isa.c.  Other platforms have
their own way of doing the same thing.  In retrospect, this seems to
be hideously expensive...

In 4.x, there is no SMP on alpha and the IPL level is raised when a
device interrupt handler is run, so that the handler can never be
interrupted by the device itself.

Drew







Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?16015.13748.503036.374679>