Skip to content

Commit 7c652c0

Browse files
author
Marc Zyngier
committed
Merge branch kvm-arm64/selftests-6.20 into kvmarm-master/next
* kvm-arm64/selftests-6.20: : . : Some selftest fixes addressing page alignment issues as well as : a bad MMU setup bug, courtesy of Fuad Tabba. : . KVM: selftests: Fix typos and stale comments in kvm_util KVM: selftests: Move page_align() to shared header KVM: riscv: selftests: Fix incorrect rounding in page_align() KVM: arm64: selftests: Fix incorrect rounding in page_align() KVM: arm64: selftests: Disable unused TTBR1_EL1 translations Signed-off-by: Marc Zyngier <maz@kernel.org>
2 parents 1c07f35 + e0a99a2 commit 7c652c0

5 files changed

Lines changed: 16 additions & 15 deletions

File tree

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,17 @@
9090
#define TCR_TG0_64K (UL(1) << TCR_TG0_SHIFT)
9191
#define TCR_TG0_16K (UL(2) << TCR_TG0_SHIFT)
9292

93+
#define TCR_EPD1_SHIFT 23
94+
#define TCR_EPD1_MASK (UL(1) << TCR_EPD1_SHIFT)
95+
9396
#define TCR_IPS_SHIFT 32
9497
#define TCR_IPS_MASK (UL(7) << TCR_IPS_SHIFT)
9598
#define TCR_IPS_52_BITS (UL(6) << TCR_IPS_SHIFT)
9699
#define TCR_IPS_48_BITS (UL(5) << TCR_IPS_SHIFT)
97100
#define TCR_IPS_40_BITS (UL(2) << TCR_IPS_SHIFT)
98101
#define TCR_IPS_36_BITS (UL(1) << TCR_IPS_SHIFT)
99102

103+
#define TCR_TBI1 (UL(1) << 38)
100104
#define TCR_HA (UL(1) << 39)
101105
#define TCR_DS (UL(1) << 59)
102106

tools/testing/selftests/kvm/include/kvm_util.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -939,7 +939,7 @@ void *vcpu_map_dirty_ring(struct kvm_vcpu *vcpu);
939939
* VM VCPU Args Set
940940
*
941941
* Input Args:
942-
* vm - Virtual Machine
942+
* vcpu - vCPU
943943
* num - number of arguments
944944
* ... - arguments, each of type uint64_t
945945
*
@@ -1258,8 +1258,13 @@ static inline int __vm_disable_nx_huge_pages(struct kvm_vm *vm)
12581258
return __vm_enable_cap(vm, KVM_CAP_VM_DISABLE_NX_HUGE_PAGES, 0);
12591259
}
12601260

1261+
static inline uint64_t vm_page_align(struct kvm_vm *vm, uint64_t v)
1262+
{
1263+
return (v + vm->page_size - 1) & ~(vm->page_size - 1);
1264+
}
1265+
12611266
/*
1262-
* Arch hook that is invoked via a constructor, i.e. before exeucting main(),
1267+
* Arch hook that is invoked via a constructor, i.e. before executing main(),
12631268
* to allow for arch-specific setup that is common to all tests, e.g. computing
12641269
* the default guest "mode".
12651270
*/

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,6 @@
2121

2222
static vm_vaddr_t exception_handlers;
2323

24-
static uint64_t page_align(struct kvm_vm *vm, uint64_t v)
25-
{
26-
return (v + vm->page_size) & ~(vm->page_size - 1);
27-
}
28-
2924
static uint64_t pgd_index(struct kvm_vm *vm, vm_vaddr_t gva)
3025
{
3126
unsigned int shift = (vm->pgtable_levels - 1) * (vm->page_shift - 3) + vm->page_shift;
@@ -115,7 +110,7 @@ static uint64_t __maybe_unused ptrs_per_pte(struct kvm_vm *vm)
115110

116111
void virt_arch_pgd_alloc(struct kvm_vm *vm)
117112
{
118-
size_t nr_pages = page_align(vm, ptrs_per_pgd(vm) * 8) / vm->page_size;
113+
size_t nr_pages = vm_page_align(vm, ptrs_per_pgd(vm) * 8) / vm->page_size;
119114

120115
if (vm->pgd_created)
121116
return;
@@ -384,6 +379,8 @@ void aarch64_vcpu_setup(struct kvm_vcpu *vcpu, struct kvm_vcpu_init *init)
384379

385380
tcr_el1 |= TCR_IRGN0_WBWA | TCR_ORGN0_WBWA | TCR_SH0_INNER;
386381
tcr_el1 |= TCR_T0SZ(vm->va_bits);
382+
tcr_el1 |= TCR_TBI1;
383+
tcr_el1 |= TCR_EPD1_MASK;
387384
if (use_lpa2_pte_format(vm))
388385
tcr_el1 |= TCR_DS;
389386

tools/testing/selftests/kvm/lib/kvm_util.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1351,7 +1351,7 @@ struct kvm_vcpu *__vm_vcpu_add(struct kvm_vm *vm, uint32_t vcpu_id)
13511351
* Output Args: None
13521352
*
13531353
* Return:
1354-
* Lowest virtual address at or below vaddr_min, with at least
1354+
* Lowest virtual address at or above vaddr_min, with at least
13551355
* sz unused bytes. TEST_ASSERT failure if no area of at least
13561356
* size sz is available.
13571357
*

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

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,6 @@ bool __vcpu_has_ext(struct kvm_vcpu *vcpu, uint64_t ext)
2626
return !ret && !!value;
2727
}
2828

29-
static uint64_t page_align(struct kvm_vm *vm, uint64_t v)
30-
{
31-
return (v + vm->page_size) & ~(vm->page_size - 1);
32-
}
33-
3429
static uint64_t pte_addr(struct kvm_vm *vm, uint64_t entry)
3530
{
3631
return ((entry & PGTBL_PTE_ADDR_MASK) >> PGTBL_PTE_ADDR_SHIFT) <<
@@ -68,7 +63,7 @@ static uint64_t pte_index(struct kvm_vm *vm, vm_vaddr_t gva, int level)
6863

6964
void virt_arch_pgd_alloc(struct kvm_vm *vm)
7065
{
71-
size_t nr_pages = page_align(vm, ptrs_per_pte(vm) * 8) / vm->page_size;
66+
size_t nr_pages = vm_page_align(vm, ptrs_per_pte(vm) * 8) / vm->page_size;
7267

7368
if (vm->pgd_created)
7469
return;

0 commit comments

Comments
 (0)