Commit e852be8b authored by Paolo Bonzini's avatar Paolo Bonzini
Browse files

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: default avatarSean Christopherson <seanjc@google.com>
Reviewed-by: default avatarPeter Xu <peterx@redhat.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent f18b4aeb
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -71,6 +71,8 @@
#define PTE_NX_MASK             BIT_ULL(63)

#define PAGE_SHIFT		12
#define PAGE_SIZE		(1ULL << PAGE_SHIFT)
#define PAGE_MASK		(~(PAGE_SIZE-1))

#define PHYSICAL_PAGE_MASK      GENMASK_ULL(51, 12)
#define PTE_GET_PFN(pte)        (((pte) & PHYSICAL_PAGE_MASK) >> PAGE_SHIFT)
+6 −6
Original line number Diff line number Diff line
@@ -255,13 +255,13 @@ static uint64_t *_vm_get_page_table_entry(struct kvm_vm *vm, int vcpuid,
	struct kvm_cpuid_entry2 *entry;
	struct kvm_sregs sregs;
	int max_phy_addr;
	/* Set the bottom 52 bits. */
	uint64_t rsvd_mask = 0x000fffffffffffff;
	uint64_t rsvd_mask = 0;

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

	/*
	 * 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,
	 */
	vcpu_sregs_get(vm, vcpuid, &sregs);
	if ((sregs.efer & EFER_NX) == 0) {
		rsvd_mask |= (1ull << 63);
		rsvd_mask |= PTE_NX_MASK;
	}

	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)
	if (!(pte[index[0]] & PTE_PRESENT_MASK))
		goto unmapped_gva;

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

unmapped_gva:
	TEST_FAIL("No mapping for vm virtual address, gva: 0x%lx", gva);
+0 −1
Original line number Diff line number Diff line
@@ -29,7 +29,6 @@
#define X86_FEATURE_XSAVE		(1 << 26)
#define X86_FEATURE_OSXSAVE		(1 << 27)

#define PAGE_SIZE			(1 << 12)
#define NUM_TILES			8
#define TILE_SIZE			1024
#define XSAVE_SIZE			((NUM_TILES * TILE_SIZE) + PAGE_SIZE)
+0 −1
Original line number Diff line number Diff line
@@ -12,7 +12,6 @@
#include "vmx.h"

#define VCPU_ID	   1
#define PAGE_SIZE  4096
#define MAXPHYADDR 36

#define MEM_REGION_GVA	0x0000123456789000
+0 −2
Original line number Diff line number Diff line
@@ -21,8 +21,6 @@

#define VCPU_ID	      1

#define PAGE_SIZE  4096

#define SMRAM_SIZE 65536
#define SMRAM_MEMSLOT ((1 << 16) | 1)
#define SMRAM_PAGES (SMRAM_SIZE / PAGE_SIZE)
Loading