Skip to content

Commit e852be8

Browse files
committed
kvm: selftests: introduce and use more page size-related constants
Clean up code that was hardcoding masks for various fields, now that the masks are included in processor.h. For more cleanup, define PAGE_SIZE and PAGE_MASK just like in Linux. PAGE_SIZE in particular was defined by several tests. Suggested-by: Sean Christopherson <seanjc@google.com> Reviewed-by: Peter Xu <peterx@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
1 parent f18b4ae commit e852be8

File tree

8 files changed

+8
-13
lines changed

8 files changed

+8
-13
lines changed

tools/testing/selftests/kvm/include/x86_64/processor.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@
7171
#define PTE_NX_MASK BIT_ULL(63)
7272

7373
#define PAGE_SHIFT 12
74+
#define PAGE_SIZE (1ULL << PAGE_SHIFT)
75+
#define PAGE_MASK (~(PAGE_SIZE-1))
7476

7577
#define PHYSICAL_PAGE_MASK GENMASK_ULL(51, 12)
7678
#define PTE_GET_PFN(pte) (((pte) & PHYSICAL_PAGE_MASK) >> PAGE_SHIFT)

tools/testing/selftests/kvm/lib/x86_64/processor.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -255,13 +255,13 @@ static uint64_t *_vm_get_page_table_entry(struct kvm_vm *vm, int vcpuid,
255255
struct kvm_cpuid_entry2 *entry;
256256
struct kvm_sregs sregs;
257257
int max_phy_addr;
258-
/* Set the bottom 52 bits. */
259-
uint64_t rsvd_mask = 0x000fffffffffffff;
258+
uint64_t rsvd_mask = 0;
260259

261260
entry = kvm_get_supported_cpuid_index(0x80000008, 0);
262261
max_phy_addr = entry->eax & 0x000000ff;
263-
/* Clear the bottom bits of the reserved mask. */
264-
rsvd_mask = (rsvd_mask >> max_phy_addr) << max_phy_addr;
262+
/* Set the high bits in the reserved mask. */
263+
if (max_phy_addr < 52)
264+
rsvd_mask = GENMASK_ULL(51, max_phy_addr);
265265

266266
/*
267267
* SDM vol 3, fig 4-11 "Formats of CR3 and Paging-Structure Entries
@@ -271,7 +271,7 @@ static uint64_t *_vm_get_page_table_entry(struct kvm_vm *vm, int vcpuid,
271271
*/
272272
vcpu_sregs_get(vm, vcpuid, &sregs);
273273
if ((sregs.efer & EFER_NX) == 0) {
274-
rsvd_mask |= (1ull << 63);
274+
rsvd_mask |= PTE_NX_MASK;
275275
}
276276

277277
TEST_ASSERT(vm->mode == VM_MODE_PXXV48_4K, "Attempt to use "
@@ -549,7 +549,7 @@ vm_paddr_t addr_gva2gpa(struct kvm_vm *vm, vm_vaddr_t gva)
549549
if (!(pte[index[0]] & PTE_PRESENT_MASK))
550550
goto unmapped_gva;
551551

552-
return (PTE_GET_PFN(pte[index[0]]) * vm->page_size) + (gva & 0xfffu);
552+
return (PTE_GET_PFN(pte[index[0]]) * vm->page_size) + (gva & ~PAGE_MASK);
553553

554554
unmapped_gva:
555555
TEST_FAIL("No mapping for vm virtual address, gva: 0x%lx", gva);

tools/testing/selftests/kvm/x86_64/amx_test.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
#define X86_FEATURE_XSAVE (1 << 26)
3030
#define X86_FEATURE_OSXSAVE (1 << 27)
3131

32-
#define PAGE_SIZE (1 << 12)
3332
#define NUM_TILES 8
3433
#define TILE_SIZE 1024
3534
#define XSAVE_SIZE ((NUM_TILES * TILE_SIZE) + PAGE_SIZE)

tools/testing/selftests/kvm/x86_64/emulator_error_test.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
#include "vmx.h"
1313

1414
#define VCPU_ID 1
15-
#define PAGE_SIZE 4096
1615
#define MAXPHYADDR 36
1716

1817
#define MEM_REGION_GVA 0x0000123456789000

tools/testing/selftests/kvm/x86_64/smm_test.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121

2222
#define VCPU_ID 1
2323

24-
#define PAGE_SIZE 4096
25-
2624
#define SMRAM_SIZE 65536
2725
#define SMRAM_MEMSLOT ((1 << 16) | 1)
2826
#define SMRAM_PAGES (SMRAM_SIZE / PAGE_SIZE)

tools/testing/selftests/kvm/x86_64/vmx_tsc_adjust_test.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
#define MSR_IA32_TSC_ADJUST 0x3b
3333
#endif
3434

35-
#define PAGE_SIZE 4096
3635
#define VCPU_ID 5
3736

3837
#define TSC_ADJUST_VALUE (1ll << 32)

tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
#define SHINFO_REGION_GVA 0xc0000000ULL
2424
#define SHINFO_REGION_GPA 0xc0000000ULL
2525
#define SHINFO_REGION_SLOT 10
26-
#define PAGE_SIZE 4096
2726

2827
#define DUMMY_REGION_GPA (SHINFO_REGION_GPA + (2 * PAGE_SIZE))
2928
#define DUMMY_REGION_SLOT 11

tools/testing/selftests/kvm/x86_64/xen_vmcall_test.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616
#define HCALL_REGION_GPA 0xc0000000ULL
1717
#define HCALL_REGION_SLOT 10
18-
#define PAGE_SIZE 4096
1918

2019
static struct kvm_vm *vm;
2120

0 commit comments

Comments
 (0)