On 12/12/2018 11:01 AM, Jim Mattson wrote:
On Tue, Dec 11, 2018 at 5:29 PM Krish Sadhukhan
<krish.sadhukhan@xxxxxxxxxx> wrote:
.. because not all alignments fall on page size boundary.
Signed-off-by: Krish Sadhukhan <krish.sadhukhan@xxxxxxxxxx>
Reviewed-by: Mihai Carabas <mihai.carabas@xxxxxxxxxx>
---
x86/vmx_tests.c | 40 ++++++++++++++++++++++------------------
1 file changed, 22 insertions(+), 18 deletions(-)
diff --git a/x86/vmx_tests.c b/x86/vmx_tests.c
index bdd23df..3e6babe 100644
--- a/x86/vmx_tests.c
+++ b/x86/vmx_tests.c
@@ -3463,16 +3463,17 @@ static void test_vmcs_addr(const char *name,
enum Encoding encoding,
bool ignored,
bool xfail_beyond_mapped_ram,
- u64 addr)
+ u64 addr,
+ u64 align)
{
bool xfail =
(xfail_beyond_mapped_ram &&
- addr > fwcfg_get_u64(FW_CFG_RAM_SIZE) - PAGE_SIZE &&
+ addr > fwcfg_get_u64(FW_CFG_RAM_SIZE) - align &&
addr < (1ul << cpuid_maxphyaddr()));
report_prefix_pushf("%s = %lx", name, addr);
vmcs_write(encoding, addr);
- test_vmx_controls(ignored || (IS_ALIGNED(addr, PAGE_SIZE) &&
+ test_vmx_controls(ignored || (IS_ALIGNED(addr, align) &&
addr < (1ul << cpuid_maxphyaddr())),
xfail);
report_prefix_pop();
@@ -3485,25 +3486,26 @@ static void test_vmcs_addr(const char *name,
static void test_vmcs_addr_values(const char *name,
enum Encoding encoding,
bool ignored,
- bool xfail_beyond_mapped_ram)
+ bool xfail_beyond_mapped_ram,
+ u64 align)
s/align/alignment/, and move before 'ignored'?
Using the full word is better, but I used 'align' to save some space :).
If you feel strongly about it, I will change it.
I will move the parameter before 'ignored'.
{
unsigned i;
u64 orig_val = vmcs_read(encoding);
for (i = 0; i < 64; i++)
test_vmcs_addr(name, encoding, ignored,
- xfail_beyond_mapped_ram, 1ul << i);
+ xfail_beyond_mapped_ram, 1ul << i, align);
test_vmcs_addr(name, encoding, ignored,
- xfail_beyond_mapped_ram, PAGE_SIZE - 1);
+ xfail_beyond_mapped_ram, PAGE_SIZE - 1, align);
Should PAGE_SIZE, here and below, be changed to align?
The two parameters are semantically different even though both are using
PAGE_SIZE. That's why I didn't parameterize the address parameter.
test_vmcs_addr(name, encoding, ignored,
- xfail_beyond_mapped_ram, PAGE_SIZE);
+ xfail_beyond_mapped_ram, PAGE_SIZE, align);
test_vmcs_addr(name, encoding, ignored,
xfail_beyond_mapped_ram,
- (1ul << cpuid_maxphyaddr()) - PAGE_SIZE);
+ (1ul << cpuid_maxphyaddr()) - PAGE_SIZE, align);
test_vmcs_addr(name, encoding, ignored,
xfail_beyond_mapped_ram,
- -1ul);
+ -1ul, align);
vmcs_write(encoding, orig_val);
}
@@ -3516,7 +3518,7 @@ 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,
- bool control_primary)
+ bool control_primary, u64 align)
s/align/alignment/?