diff -ru etherboot-5.4.3.orig/src/arch/i386/core/pxe_callbacks.c etherboot-5.4.3/src/arch/i386/core/pxe_callbacks.c
--- etherboot-5.4.3.orig/src/arch/i386/core/pxe_callbacks.c	2007-02-24 06:44:59.000000000 -0800
+++ etherboot-5.4.3/src/arch/i386/core/pxe_callbacks.c	2008-02-15 10:59:06.000000000 -0800
@@ -279,6 +279,7 @@
 	RM_FRAGMENT(jump_to_pxe_nbp,
 		"popw %bx\n\t"
 		"popw %es\n\t"
+		"sti\n\t"
 		"lcall $" RM_STR(PXE_LOAD_SEGMENT) ", $" RM_STR(PXE_LOAD_OFFSET) "\n\t"
 	);
 
diff -ru etherboot-5.4.3.orig/src/arch/i386/core/realmode.c etherboot-5.4.3/src/arch/i386/core/realmode.c
--- etherboot-5.4.3.orig/src/arch/i386/core/realmode.c	2007-02-24 06:44:59.000000000 -0800
+++ etherboot-5.4.3/src/arch/i386/core/realmode.c	2008-02-15 10:58:54.000000000 -0800
@@ -126,7 +126,8 @@
 	 * being certain exactly how gcc handles %esp.
 	 */
 
-	__asm__ ( "pushl %%ebp\n\t"
+	__asm__ ( "pushf\n\t"
+		  "pushl %%ebp\n\t"
 		  "movl  %%esp, %%ebp\n\t"	/* %esp preserved via %ebp */
 		  "subl  %%ecx, %%esp\n\t"	/* space for inline RM stack */
 		  "pushl %%esp\n\t"		/* set up RM stack */
@@ -139,6 +140,7 @@
 		  "call  _phys_to_virt\n\t"	/* switch to virt addr */
 		  "movl  %%ebp, %%esp\n\t"	/* restore %esp & %ebp */
 		  "popl  %%ebp\n\t"
+		  "popf\n\t"
 		  : "=a" ( retval )
 		  : "0" ( &fragment )
 		  , "c" ( ( ( in_stack_len + prot_to_real_prefix_size +
