@@ -48,6 +48,7 @@ static void vmcall(void)
#define MSR_EFER 0xc0000080
#define EFER_NX_MASK (1ull << 11)
+#define EFER_LMA_MASK (1ull << 10)
static void mov_from_cr8(void)
{
@@ -68,6 +69,15 @@ static int is_smp(void)
return cpu_count() > 1;
}
+static int is_long_mode(void)
+{
+#ifdef __i386__
+ return 0;
+#else
+ return rdmsr(MSR_EFER) | EFER_LMA_MASK;
+#endif
+}
+
static void nop(void *junk)
{
}
@@ -100,8 +110,8 @@ static struct test {
} tests[] = {
{ cpuid_test, "cpuid", .parallel = 1, },
{ vmcall, "vmcall", .parallel = 1, },
- { mov_from_cr8, "mov_from_cr8", .parallel = 1, },
- { mov_to_cr8, "mov_to_cr8" , .parallel = 1, },
+ { mov_from_cr8, "mov_from_cr8", is_long_mode, .parallel = 1, },
+ { mov_to_cr8, "mov_to_cr8" , is_long_mode, .parallel = 1, },
{ inl_pmtimer, "inl_from_pmtimer", .parallel = 1, },
{ ipi, "ipi", is_smp, .parallel = 0, },
{ ipi_halt, "ipi+halt", is_smp, .parallel = 0, },