From owner-freebsd-current@FreeBSD.ORG Thu Jun 17 07:01:30 2004 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 325F416A4CE for ; Thu, 17 Jun 2004 07:01:30 +0000 (GMT) Received: from mailout2.pacific.net.au (mailout2.pacific.net.au [61.8.0.85]) by mx1.FreeBSD.org (Postfix) with ESMTP id AC99443D2F for ; Thu, 17 Jun 2004 07:01:29 +0000 (GMT) (envelope-from bde@zeta.org.au) Received: from mailproxy2.pacific.net.au (mailproxy2.pacific.net.au [61.8.0.87])i5H71A5v031529; Thu, 17 Jun 2004 17:01:10 +1000 Received: from gamplex.bde.org (katana.zip.com.au [61.8.7.246]) i5H718aU016975; Thu, 17 Jun 2004 17:01:09 +1000 Date: Thu, 17 Jun 2004 17:01:07 +1000 (EST) From: Bruce Evans X-X-Sender: bde@gamplex.bde.org To: Roman Kurakin In-Reply-To: <40D0CABA.1020101@cronyx.ru> Message-ID: <20040617164703.H2144@gamplex.bde.org> References: <40D070B7.5000009@cronyx.ru> <20040617080547.F8883@gamplex.bde.org> <40D0CABA.1020101@cronyx.ru> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII cc: freebsd-current@freebsd.org Subject: Re: How to catch interrupt X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 17 Jun 2004 07:01:30 -0000 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. Bruce