Date: Sat, 5 Apr 2003 16:44:49 +1000 (EST) From: Bruce Evans <bde@zeta.org.au> To: Prafulla Deuskar <pdeuskar@freebsd.org> Cc: freebsd-net@freebsd.org Subject: Re: Disable/Enable Interrupts in ISR Message-ID: <20030405163141.T37137@gamplex.bde.org> In-Reply-To: <20030404094628.A59969@hub.freebsd.org> References: <20030404094628.A59969@hub.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 4 Apr 2003, Prafulla Deuskar wrote: > All, > > foo_intr() > { > ... > disable_intr; > ... > process data; > ... > enable_intr; > } > > Most of the network drivers currently do something like this in the ISR. > Is this really necessary as by the time ISR is called interrupts have already been > disabled on APIC and disabling interrupts on network card has no effect. What sort of interrupt disabling? I suppose disabling at the device level might be useful (e.g., so that the interrupt handler can be returned from, with the actual interrupt handling mostly done in a lower priority thread), but most drivers shouldn't need or do this. Maybe it is needed for DEVICE_POLLING? > 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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030405163141.T37137>