[parisc-linux] Thoughts on arch/parisc/irq.c
Alan Cox
alan@lxorguk.ukuu.org.uk
Thu, 26 Aug 1999 13:06:22 +0100 (BST)
> Alan - looks like something got dropped here. Try again?
The perils of 2am posting - add the word "different"
> I think there is going to a problem with "cookies" on PA.
> The problem is GSC devices need to program an "EIM" register.
> (For Dino, this is IAR0). The contents of the EIM register
> are a processor HPA (bits 11-31) and EIRR bit number (bits 0-4;
> ie a value 0-31). The location of this register is NOT
> defined by PA I/O architecture - or at least not well defined.
> Is this a real problem or not?
It isnt. If need be you hand out irq numbers to drivers that are
indexes into an array that gives all the real gsc/pci mappings, registers
and other goodies.
> > on the next return. BH's are not run if they are already running - they
> > are single threaded with respect to each other right now - that may change
> > to be 'with respect to self' one day.
>
> For single CPU is doesn't matter. For SMP scalability it might.
Thats why it might change
> SPL levels allow the system clock to always get service regardless of how
> badly an ISR behaves on the interrupt stack. SPL levels also allow
We flame people who write badly behaving irq handlers instead.
> to guarantee the timeout is called "pretty soon". SPL levels also
> allow device drivers to service IRQs while the bottom half is active.
We service IRQs with the bottom half active. The idea is that all non
immediate processing occurs at bh layer - think of the BH system as a BSD
like kernel with only one SPL level.
Having one level reflects the realities of more machines and doesn't really
lose us anything. A typical example flow is
user space
[IRQ arrives]
myether_irq
handle ring buffer
netif_rx(buffer)
(marks the NET bh to run)
end irq
runs net_bh if not running, irqs are enabled
process packets
done
user space
Alan