I modified the cross-cpu call code to allow use of the NMI interrupt
when the IPI interrupt is not responding. Hopefully this will avoid
the xcall code from busting a lock due to a deadlock/timeout.
It looks like the APIC allows specific interrupts to be marked as
NMI - which would be great since rather than sharing the NMI with
other users of the interrupt, we could just make the IPI interrupt
work like an NMI and avoid the deadlock scenario.
For now, the interrupt handler tries to be careful and not trigger
when its uncalled for. It does present a problem if we need the NMI
and someone else does at the same time, but I can investigate what/how
the APIC works a little better (or check the Solaris code to see
if indeed, that is what it does).
I also need to update the dtrace_linux.c code so that I dont just
grab interrupt vector 0xea (random interrupt which appears not to be
used, but it could be). I am a naughty programmer.
Release 20110619 contains the above fixes.