]> rtime.felk.cvut.cz Git - jailhouse.git/commitdiff
inmates: x86: Enable MTRRs during start to avoid disable caches
authorJan Kiszka <jan.kiszka@siemens.com>
Wed, 6 May 2015 05:43:47 +0000 (07:43 +0200)
committerJan Kiszka <jan.kiszka@siemens.com>
Wed, 6 May 2015 05:43:47 +0000 (07:43 +0200)
Since fe8fac80d7, emulation of the MTRR enable bit works. That has no
effect on KVM so far, but we effectively run with hand break put on over
real hardware.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
inmates/lib/x86/header-32.S
inmates/lib/x86/header.S

index 7487c8ae17283b7dbc5e5fd20130476a0b45fce7..952619e85a00a8d1ea844e67e04995a0e745ea2e 100644 (file)
 
 #include <inmate.h>
 
-#define X86_CR0_PE     0x00000001
-#define X86_CR0_WP     0x00010000
-#define X86_CR0_PG     0x80000000
+#define X86_CR0_PE             0x00000001
+#define X86_CR0_WP             0x00010000
+#define X86_CR0_PG             0x80000000
 
-#define X86_CR4_PSE    0x00000010
+#define X86_CR4_PSE            0x00000010
+
+#define MSR_MTRR_DEF_TYPE      0x000002ff
+#define MTRR_ENABLE            0x00000800
 
        .code16
        .section ".boot", "ax"
@@ -48,6 +51,11 @@ start32:
        mov $(X86_CR0_PG | X86_CR0_WP | X86_CR0_PE),%eax
        mov %eax,%cr0
 
+       movl $MSR_MTRR_DEF_TYPE,%ecx
+       rdmsr
+       or $MTRR_ENABLE,%eax
+       wrmsr
+
        mov $stack_top,%esp
 
        mov $INMATE_DS32,%eax
index adfce6e9c7a7e1434c5c5e844ad75dc691a1eae6..6eb8e497030d215867d7fafd8bad131a505eef5a 100644 (file)
 
 #include <inmate.h>
 
-#define X86_CR0_PE     0x00000001
-#define X86_CR0_WP     0x00010000
-#define X86_CR0_PG     0x80000000
+#define X86_CR0_PE             0x00000001
+#define X86_CR0_WP             0x00010000
+#define X86_CR0_PG             0x80000000
 
-#define X86_CR4_PAE    0x00000020
+#define X86_CR4_PAE            0x00000020
 
-#define MSR_EFER       0xc0000080
-#define EFER_LME       0x00000100
+#define MSR_EFER               0xc0000080
+#define EFER_LME               0x00000100
+
+#define MSR_MTRR_DEF_TYPE      0x000002ff
+#define MTRR_ENABLE            0x00000800
 
        .code16
        .section ".boot", "ax"
@@ -48,6 +51,11 @@ start32:
        mov $pml4 + FSEGMENT_BASE,%eax
        mov %eax,%cr3
 
+       movl $MSR_MTRR_DEF_TYPE,%ecx
+       rdmsr
+       or $MTRR_ENABLE,%eax
+       wrmsr
+
        movl $MSR_EFER,%ecx
        rdmsr
        or $EFER_LME,%eax