[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] Problem with BIOS timer interrupts



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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.