diff options
author | H. Peter Anvin <hpa@zytor.com> | 2009-05-21 10:25:43 -0700 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2009-05-21 10:25:43 -0700 |
commit | 652070309f5d283efacaa8c5102368da20a92c4a (patch) | |
tree | fbd14207e9c3c4b92c19a177a9f52993a60c5603 /core/highmem.inc | |
parent | 55092109e53ae43ceefb5f7c6314aff103931c9a (diff) | |
download | syslinux-652070309f5d283efacaa8c5102368da20a92c4a.tar.gz |
idle: handle PXE stacks which improperly disable interruptssyslinux-3.81-pre9
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>
Diffstat (limited to 'core/highmem.inc')
-rw-r--r-- | core/highmem.inc | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/core/highmem.inc b/core/highmem.inc index 5ae3abea..c7e602f8 100644 --- a/core/highmem.inc +++ b/core/highmem.inc @@ -25,6 +25,7 @@ ; highmemsize: push es + pushfd pushad push cs @@ -152,6 +153,7 @@ got_highmem: %endif mov [HighMemSize],eax popad + popfd pop es ret ; Done! |