From owner-freebsd-smp Sun Nov 3 00:45:03 1996 Return-Path: owner-smp Received: (from root@localhost) by freefall.freebsd.org (8.7.5/8.7.3) id AAA07224 for smp-outgoing; Sun, 3 Nov 1996 00:45:03 -0800 (PST) Received: from root.com (implode.root.com [198.145.90.17]) by freefall.freebsd.org (8.7.5/8.7.3) with ESMTP id AAA07206; Sun, 3 Nov 1996 00:44:56 -0800 (PST) Received: from localhost (localhost [127.0.0.1]) by root.com (8.7.6/8.6.5) with SMTP id AAA23866; Sun, 3 Nov 1996 00:43:51 -0800 (PST) Message-Id: <199611030843.AAA23866@root.com> X-Authentication-Warning: implode.root.com: Host localhost [127.0.0.1] didn't use HELO protocol To: Steve Passe cc: hackers@freefall.freebsd.org, smp@freefall.freebsd.org Subject: Re: ed0 timeouts In-reply-to: Your message of "Sat, 02 Nov 1996 23:43:56 MST." <199611030643.XAA25052@clem.systemsix.com> From: David Greenman Reply-To: dg@Root.COM Date: Sun, 03 Nov 1996 00:43:51 -0800 Sender: owner-smp@FreeBSD.ORG X-Loop: FreeBSD.org Precedence: bulk >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