Skip site navigation (1)Skip section navigation (2)
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>