Date: Mon, 26 Jul 1999 20:24:41 +0200 From: Nicolas Souchu <nsouch@teaser.fr> To: Bruce Evans <bde@zeta.org.au> Cc: current@FreeBSD.ORG, des@flood.ping.uio.no, obrien@NUXI.com, sobomax@altavista.net Subject: Re: PLIP is still broken :( Message-ID: <19990726202441.57962@breizh.teaser.fr> In-Reply-To: <199907251904.FAA12887@godzilla.zeta.org.au>; from Bruce Evans on Mon, Jul 26, 1999 at 05:04:42AM %2B1000 References: <199907251904.FAA12887@godzilla.zeta.org.au>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Jul 26, 1999 at 05:04:42AM +1000, Bruce Evans wrote: > >>>Otherwise, >>>the generic code is missing mainly update of the interrupt masks when >>>an interrupt is unregistered. >> >>For the low level side, we could consider something like the following code. >>But this shall be called by the nexus layer and then needs generic newbus >>support (as you said above, didn't you?). > >>/* >> * Switch an irq from a maskptr to another without unregistering the irq >> * handler. >> * This function is supposed to work with only one handler per irq. >> */ >>void >>switch_masks(intrmask_t *oldmaskptr, intrmask_t *newmaskptr, int irq) >.... > >I don't like most of this. Driver level code won't even know the >correct maskptrs. (irq, maskptr) pairs depend on i386 implementation >details for uniqueness. Use { s = splhigh(); BUS_TEARDOWN_INTR(...); >BUS_SETUP_INTR(...); splx(s); } until/unless the newbus level provides This is what I meant when I said the nexus layer shall do the switch_masks() call. The current implementation of SETUP_INTR/TEARDOWN involves the overhead of unregistering and registering the interrupt. This is why I propose switch_masks() which doesn't. Moreover, in the ppbus model, the ppc_intr() function is _always_ the registered interrupt handler and it dispatches the interrupt depending on the device driver which currently owns the bus when the interrupt occurs. >a better interface. The problem with the masks not being updated when >interrupts are unregistered should be fixed in update*_masks(). I agree if unregistering/registering is declared better than switching masks for the current registered handler. > >Bruce > -- nsouch@teaser.fr / nsouch@freebsd.org FreeBSD - Turning PCs into workstations - http://www.FreeBSD.org To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19990726202441.57962>