kernel - Fix Xinvltlb issue, fix ipiq issue, add Xsniff
* The Xinvltlb IPI interrupt enables interrupts in smp_inval_intr(), which
allows potentially pending interrupts and other things to happen. We
must use doreti instead of doreti_iret.
* Fix a reentrancy issue with lwkt_ipiq. Reentrancy can occur when the ipi
callback itself needs to issue an IPI, but the target cpu FIFO is full.
When this happens, the cpu mask may not be correct so force a scan of all
cpus in this situation.
* Add an infinite loop detection test to lwkt_process_ipiq() and jigger
another IPI if it persists more than 10 seconds, hopefully recovering the
system if as-yet unknown IPI issues persist.
* Add the Xsniff IPI and augment systat -pv to use it. This sniffs the %rip
and %rpc on all cpus, allowing us to see where where the kernel spends its
time.
15 files changed: