Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 03 Nov 1996 00:43:51 -0800
From:      David Greenman <dg@root.com>
To:        Steve Passe <smp@csn.net>
Cc:        hackers@freefall.freebsd.org, smp@freefall.freebsd.org
Subject:   Re: ed0 timeouts 
Message-ID:  <199611030843.AAA23866@root.com>
In-Reply-To: Your message of "Sat, 02 Nov 1996 23:43:56 MST." <199611030643.XAA25052@clem.systemsix.com> 

next in thread | previous in thread | raw e-mail | index | archive | help
>Question:
>
>Is it possible for a new INT to be asserted by the if_ed driver WHILE
>it is currently being serviced by the edintr() routine?
>
>What I have discovered is that unlike the 8259, the IO APIC will ignore
>(ie NOT delivered or held pending) an edge level INT if it currently is
>masked.  The routine in vector.s masks the INT, calls edintr(), then after
>edintr() returns it unmasks the INT.  If another INT fired as a result
>of ed_start() being called in edintr() BEFORE the INT was unmasked it
>would be LOST.

   Yes, you can get another interrupt while servicing one. The driver loops
until all interrupts are serviced, but there would be a window between when it
thinks there are no more interrupts to service and returning to vector.s to
unmask the interrupts. This window will exist in all ISA drivers.

-DG

David Greenman
Core-team/Principal Architect, The FreeBSD Project



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