On Sat, Dec 19, 2015 at 12:03:15PM +0000, Gonglei (Arei) wrote:
Maybe the root cause is not NMI but INTR, so yield() can open hardware interrupt, And then execute interrupt handler, but the interrupt handler make the SeaBIOS stack broken, so that the BSP can't execute the instruction and occur exception, VM_EXIT to Kmod, which is an infinite loop. But I don't have any proofs except the surface phenomenon.
I can't see any reason why allowing interrupts at this location would be a problem.
Kevin, can we drop yield() in smp_setup() ?
It's possible to eliminate this instance of yield, but I think it would just push the crash to the next time interrupts are enabled.
Is it really useful and allowable for SeaBIOS? Maybe for other components? I'm not sure. Because we found that when SeaBIOS is booting, if we inject a NMI by QMP, the guest will *stuck*. And the kvm tracing log is the same with the current problem.
If you apply the patches you had to prevent that NMI crash problem, does it also prevent the above crash?
-Kevin