Hi,
While changing our Xen 3.2.x based HVM BIOS ROM to use gPXE instead of
etherboot, I ran into an interesting behavior.  The gPXE code, which
runs in real mode, contains the following sequence:
wait_for_tick:
        pushl   %eax
        pushw   %fs
        movw    $0x40, %ax
        movw    %ax, %fs
        movl    %fs:(0x6c), %eax
1:      pushf
        sti
        hlt
        popf
        cmpl    %fs:(0x6c), %eax
        je      1b
        popw    %fs
        popl    %eax
        ret
It uses this to timeout waiting for a key press.  The expected interrupt
is from the BIOS timer implemented in rombios.  But in fact, the loop
hangs.  However, if I insert a nop instruction between the sti and hlt,
then things work as expected.
Is there something wrong with this sequence?  This happens on AMD, so
it's not a quirk of the real mode emulations on Intel. 
I notice that in the gPXE code currently in xen-unstable, the path that
uses this code is patched out.
        /gary
-- 
Gary Grebus
Virtual Iron Software, Inc.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
 |