@@ -3457,14 +3457,13 @@ static void test_cr3_targets(void)
}
/*
- * Test a particular address setting for a physical page reference in
- * the VMCS.
+ * Test a particular address setting in the VMCS
*/
-static void test_vmcs_page_addr(const char *name,
- enum Encoding encoding,
- bool ignored,
- bool xfail_beyond_mapped_ram,
- u64 addr)
+static void test_vmcs_addr(const char *name,
+ enum Encoding encoding,
+ bool ignored,
+ bool xfail_beyond_mapped_ram,
+ u64 addr)
{
bool xfail =
(xfail_beyond_mapped_ram &&
@@ -3481,9 +3480,9 @@ static void test_vmcs_page_addr(const char *name,
}
/*
- * Test interesting values for a physical page reference in the VMCS.
+ * Test interesting values for a VMCS address
*/
-static void test_vmcs_page_values(const char *name,
+static void test_vmcs_addr_values(const char *name,
enum Encoding encoding,
bool ignored,
bool xfail_beyond_mapped_ram)
@@ -3492,28 +3491,28 @@ static void test_vmcs_page_values(const char *name,
u64 orig_val = vmcs_read(encoding);
for (i = 0; i < 64; i++)
- test_vmcs_page_addr(name, encoding, ignored,
- xfail_beyond_mapped_ram, 1ul << i);
-
- test_vmcs_page_addr(name, encoding, ignored,
- xfail_beyond_mapped_ram, PAGE_SIZE - 1);
- test_vmcs_page_addr(name, encoding, ignored,
- xfail_beyond_mapped_ram, PAGE_SIZE);
- test_vmcs_page_addr(name, encoding, ignored,
- xfail_beyond_mapped_ram,
- (1ul << cpuid_maxphyaddr()) - PAGE_SIZE);
- test_vmcs_page_addr(name, encoding, ignored,
- xfail_beyond_mapped_ram,
- -1ul);
+ test_vmcs_addr(name, encoding, ignored,
+ xfail_beyond_mapped_ram, 1ul << i);
+
+ test_vmcs_addr(name, encoding, ignored,
+ xfail_beyond_mapped_ram, PAGE_SIZE - 1);
+ test_vmcs_addr(name, encoding, ignored,
+ xfail_beyond_mapped_ram, PAGE_SIZE);
+ test_vmcs_addr(name, encoding, ignored,
+ xfail_beyond_mapped_ram,
+ (1ul << cpuid_maxphyaddr()) - PAGE_SIZE);
+ test_vmcs_addr(name, encoding, ignored,
+ xfail_beyond_mapped_ram,
+ -1ul);
vmcs_write(encoding, orig_val);
}
/*
- * Test a physical page reference in the VMCS, when the corresponding
+ * Test a physical address reference in the VMCS, when the corresponding
* feature is enabled and when the corresponding feature is disabled.
*/
-static void test_vmcs_page_reference(u32 control_bit, enum Encoding field,
+static void test_vmcs_addr_reference(u32 control_bit, enum Encoding field,
const char *field_name,
const char *control_name,
bool xfail_beyond_mapped_ram,
@@ -3540,7 +3539,7 @@ static void test_vmcs_page_reference(u32 control_bit, enum Encoding field,
vmcs_write(CPU_EXEC_CTRL0, primary | CPU_SECONDARY);
vmcs_write(CPU_EXEC_CTRL1, secondary | control_bit);
}
- test_vmcs_page_values(field_name, field, false, xfail_beyond_mapped_ram);
+ test_vmcs_addr_values(field_name, field, false, xfail_beyond_mapped_ram);
report_prefix_pop();
report_prefix_pushf("%s disabled", control_name);
@@ -3550,7 +3549,7 @@ static void test_vmcs_page_reference(u32 control_bit, enum Encoding field,
vmcs_write(CPU_EXEC_CTRL0, primary & ~CPU_SECONDARY);
vmcs_write(CPU_EXEC_CTRL1, secondary & ~control_bit);
}
- test_vmcs_page_values(field_name, field, true, false);
+ test_vmcs_addr_values(field_name, field, true, false);
report_prefix_pop();
vmcs_write(field, page_addr);
@@ -3565,10 +3564,10 @@ static void test_vmcs_page_reference(u32 control_bit, enum Encoding field,
*/
static void test_io_bitmaps(void)
{
- test_vmcs_page_reference(CPU_IO_BITMAP, IO_BITMAP_A,
+ test_vmcs_addr_reference(CPU_IO_BITMAP, IO_BITMAP_A,
"I/O bitmap A", "Use I/O bitmaps", false,
true);
- test_vmcs_page_reference(CPU_IO_BITMAP, IO_BITMAP_B,
+ test_vmcs_addr_reference(CPU_IO_BITMAP, IO_BITMAP_B,
"I/O bitmap B", "Use I/O bitmaps", false,
true);
}
@@ -3581,7 +3580,7 @@ static void test_io_bitmaps(void)
*/
static void test_msr_bitmap(void)
{
- test_vmcs_page_reference(CPU_MSR_BITMAP, MSR_BITMAP,
+ test_vmcs_addr_reference(CPU_MSR_BITMAP, MSR_BITMAP,
"MSR bitmap", "Use MSR bitmaps", false,
true);
}
@@ -3596,7 +3595,7 @@ static void test_msr_bitmap(void)
*/
static void test_apic_virt_addr(void)
{
- test_vmcs_page_reference(CPU_TPR_SHADOW, APIC_VIRT_ADDR,
+ test_vmcs_addr_reference(CPU_TPR_SHADOW, APIC_VIRT_ADDR,
"virtual-APIC address", "Use TPR shadow",
true, true);
}
@@ -3615,7 +3614,7 @@ static void test_apic_access_addr(void)
vmcs_write(APIC_ACCS_ADDR, virt_to_phys(apic_access_page));
- test_vmcs_page_reference(CPU_VIRT_APIC_ACCESSES, APIC_ACCS_ADDR,
+ test_vmcs_addr_reference(CPU_VIRT_APIC_ACCESSES, APIC_ACCS_ADDR,
"APIC-access address",
"virtualize APIC-accesses", false, false);
}
@@ -3903,7 +3902,7 @@ static void test_posted_intr(void)
test_pi_desc_addr(0x00, true);
test_pi_desc_addr(0xc000, true);
- test_vmcs_page_values("process-posted interrupts",
+ test_vmcs_addr_values("process-posted interrupts",
POSTED_INTR_DESC_ADDR, false, false);
vmcs_write(CPU_EXEC_CTRL0, saved_primary);
@@ -4714,7 +4713,7 @@ static void test_pml(void)
test_vmx_controls(true, false);
report_prefix_pop();
- test_vmcs_page_reference(CPU_PML, PMLADDR, "PML address",
+ test_vmcs_addr_reference(CPU_PML, PMLADDR, "PML address",
"PML", false, false);
vmcs_write(CPU_EXEC_CTRL0, primary_saved);
... because these functions can be used for any VMCS address and not just a page. Signed-off-by: Krish Sadhukhan <krish.sadhukhan@oracle.com> --- x86/vmx_tests.c | 65 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 32 insertions(+), 33 deletions(-)