Hi,
I had been looking into booting a 32-bit kernel with efiboot and the
first thing I stumbled upon is that when we jump back into 32-bit mode
we don't disable the Long Mode Extension. Thus when the i386 kernel
turns on paging, LME goes active as well and "weird things happen".
Not sure this path is worth pursuing, but this diff at least resets
EFER correctly.
Opinions? ok?
Patrick
diff --git a/sys/arch/amd64/stand/efiboot/run_i386.S
b/sys/arch/amd64/stand/efiboot/run_i386.S
index 1c70f8d4610..63d6f1f1dca 100644
--- a/sys/arch/amd64/stand/efiboot/run_i386.S
+++ b/sys/arch/amd64/stand/efiboot/run_i386.S
@@ -88,6 +88,12 @@ start32a:
andl $(~CR4_PAE), %eax
movl %eax, %cr4
+ /* Disable LME */
+ movl $MSR_EFER, %ecx
+ rdmsr
+ xor %eax, %eax
+ wrmsr
+
jmp start32b
start32b:
.code32