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
>

-- 
[EMAIL PROTECTED] / [EMAIL PROTECTED]
FreeBSD - Turning PCs into workstations - http://www.FreeBSD.org


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to