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>
