idle: handle PXE stacks which improperly disable interrupts
authorH. Peter Anvin <hpa@zytor.com>
Thu, 21 May 2009 17:25:43 +0000 (10:25 -0700)
committerH. Peter Anvin <hpa@zytor.com>
Thu, 21 May 2009 17:25:43 +0000 (10:25 -0700)
commit652070309f5d283efacaa8c5102368da20a92c4a
treefbd14207e9c3c4b92c19a177a9f52993a60c5603
parent55092109e53ae43ceefb5f7c6314aff103931c9a
idle: handle PXE stacks which improperly disable interrupts

At least Etherboot (and all-but-super-recent versions of gPXE) PXE
ROMs improperly disable interrupts when calling an intercepted version
of INT 15h and 1Ah; this is due to the old trick of using "ret 2" to
return... this avoids resetting the flags for status, but it also
doesn't restore the value of the interrupt flag.  Needless to say,
this causes serious issues.

Work around it by adding explicit pushf/popf or STI in places known to
have issues, but also add an STI in reset_idle, and add an error alert
in do_idle if we ever get called with interrupts disabled.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
core/conio.inc
core/highmem.inc
core/idle.inc
core/pxelinux.asm
core/ui.inc