On Wed, Dec 23, 2015 at 06:40:12AM +0000, Gonglei (Arei) wrote:
> From: Kevin O'Connor [mailto:firstname.lastname@example.org]
> On Tue, Dec 22, 2015 at 02:14:12AM +0000, Gonglei (Arei) wrote:
> > Sorry, it doesn't work. What's worse is we cannot stop SeaBIOS stuck
> > Setting "CONFIG_ENTRY_EXTRASTACK=n" after applying this patch.
> Oops, can you try with the patch below instead?
It works now. Thanks!
But do we need to check other possible situations
that maybe cause *extra stack* broken or overridden?
I believe the issue is that an NMI could occur while SeaBIOS is
already using its extra stack. The code is not prepared to switch
into the extra stack while already on the extra stack. SeaBIOS is
careful to always disable IRQs while running C code to prevent this
issue, but disabling normal IRQs does not disable NMIs. So, I believe
this issue is specific to the nature of NMIs.