I'm looking at adding SMP support for 2.6.10 kernel on a ppc64. I'm having
trouble scratching my way through the mpic version of using IPI's to trigger
interrupts on the other cpu's. In the Intel ports, an irq is assigned to
(ADEOS_CRITICAL_VECTOR) to act as the critical sync isr, and an IPI is sent
to "allbutself" to trigger it. I need some advice on the best approach to
do this on a ppc64.
I see two options to handle this one.
The first option is to use smp_call_function (or a similar adeos version) to
send the IPI to the other cpu. The version in smp.c says : "You must not
call this function with disabled interrupts or from a hardware interrupt
context or from a bottom half handler". It looks as if I'd be doing just
that, as the critical_enter function first does a local_irq_save_hw(flags)
before calling the send_ipi. So I'd need a new version of one or the other
to prevent deadlocks.
The other option is to create a virq for the ADEOS_CRITICAL_VECTOR, and map
that to the one unused IPI ( mpic has 4 IPI's one of which is currently
unused). That doesn't seem like a good plan, as ppc64 linux may decide to
start using that one some day.
Anyone have any suggestions, or can explain how I misunderstood all of the
above?
Thanks in advance!
Terry