[SeaBIOS] [Qemu-devel] [PATCH] SeaBios: Fix reset procedure reentrancy problem on qemu-kvm platform

Kevin O'Connor kevin at koconnor.net
Mon Dec 21 19:47:14 CET 2015

On Mon, Dec 21, 2015 at 09:41:32AM +0000, Gonglei (Arei) wrote:
> When the gurb of OS is booting, then the softirq and C function send_disk_op()
> may use extra stack of SeaBIOS. If we inject a NMI, romlayout.S: irqentry_extrastack
> is invoked, and the extra stack will be used again. And the stack of first calling
> will be broken, so that the SeaBIOS stuck. 
> You can easily reproduce the problem.
> 1. start on guest
> 2. reset the guest
> 3. inject a NMI when the guest show the grub surface
> 4. then the guest stuck

Does the SeaBIOS patch below help?  I'm not familiar with how to
"inject a NMI" - can you describe the process in more detail?


--- a/src/romlayout.S
+++ b/src/romlayout.S
@@ -548,7 +548,9 @@ entry_post:
         ENTRY_INTO32 _cfunc32flat_handle_post   // Normal entry point
         ORG 0xe2c3
-        IRQ_ENTRY 02
+        .global entry_02
+        ENTRY handle_02  // NMI handler does not switch onto extra stack
         ORG 0xe3fe
         .global entry_13_official

More information about the SeaBIOS mailing list