]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[pcbios] Do not switch to real mode to check for timer interrupt
authorMichael Brown <mcb30@ipxe.org>
Mon, 28 Apr 2014 19:20:44 +0000 (20:20 +0100)
committerMichael Brown <mcb30@ipxe.org>
Tue, 29 Apr 2014 17:24:10 +0000 (18:24 +0100)
The currticks() function is called at least once per TCP packet, and
so is performance-critical.  Switching to real mode just to allow the
timer interrupt to fire is expensive when running inside a virtual
machine, and imposes a significant performance cost.

Fix by enabling interrupts without switching to real mode.  This
results in an approximately 100% increase in download speed when
running under KVM.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/i386/interface/pcbios/bios_timer.c

index 3cb8756f74841662f2874f3c4cdd557a0d9241da..65bbf9e0105f7b2ab59c7bf667887e21728deb71 100644 (file)
@@ -44,10 +44,10 @@ static unsigned long bios_currticks ( void ) {
        uint8_t midnight;
 
        /* Re-enable interrupts so that the timer interrupt can occur */
-       __asm__ __volatile__ ( REAL_CODE ( "sti\n\t"
-                                          "nop\n\t"
-                                          "nop\n\t"
-                                          "cli\n\t" ) : : );
+       __asm__ __volatile__ ( "sti\n\t"
+                              "nop\n\t"
+                              "nop\n\t"
+                              "cli\n\t" );
 
        get_real ( ticks, BDA_SEG, 0x006c );
        get_real ( midnight, BDA_SEG, 0x0070 );