[PATCH v6 08/13] KVM: selftests: Use the right memslot for code, page-tables, and data allocations

2022-09-19 Thread Ricardo Koller
The previous commit added support for callers of vm_create() to specify
what memslots to use for code, page-tables, and data allocations. Change
them accordingly:

- stacks, code, and exception tables use the code memslot
- page tables and the pgd use the pt memslot
- data (anything allocated with vm_vaddr_alloc()) uses the data memslot

No functional change intended. All allocators keep using memslot #0.

Reviewed-by: Oliver Upton 
Cc: Sean Christopherson 
Cc: Andrew Jones 
Signed-off-by: Ricardo Koller 
---
 .../selftests/kvm/include/kvm_util_base.h |  3 +
 .../selftests/kvm/lib/aarch64/processor.c | 11 ++--
 tools/testing/selftests/kvm/lib/elf.c |  3 +-
 tools/testing/selftests/kvm/lib/kvm_util.c| 57 ---
 .../selftests/kvm/lib/riscv/processor.c   |  7 ++-
 .../selftests/kvm/lib/s390x/processor.c   |  7 ++-
 .../selftests/kvm/lib/x86_64/processor.c  | 13 +++--
 7 files changed, 61 insertions(+), 40 deletions(-)

diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h 
b/tools/testing/selftests/kvm/include/kvm_util_base.h
index 26187b8a66c6..59a33000903e 100644
--- a/tools/testing/selftests/kvm/include/kvm_util_base.h
+++ b/tools/testing/selftests/kvm/include/kvm_util_base.h
@@ -402,7 +402,10 @@ void vm_mem_region_move(struct kvm_vm *vm, uint32_t slot, 
uint64_t new_gpa);
 void vm_mem_region_delete(struct kvm_vm *vm, uint32_t slot);
 struct kvm_vcpu *__vm_vcpu_add(struct kvm_vm *vm, uint32_t vcpu_id);
 vm_vaddr_t vm_vaddr_alloc(struct kvm_vm *vm, size_t sz, vm_vaddr_t vaddr_min);
+vm_vaddr_t __vm_vaddr_alloc(struct kvm_vm *vm, size_t sz,
+   vm_vaddr_t vaddr_min, enum kvm_mem_region_type mr);
 vm_vaddr_t vm_vaddr_alloc_pages(struct kvm_vm *vm, int nr_pages);
+vm_vaddr_t __vm_vaddr_alloc_page(struct kvm_vm *vm, enum kvm_mem_region_type 
mr);
 vm_vaddr_t vm_vaddr_alloc_page(struct kvm_vm *vm);
 
 void virt_map(struct kvm_vm *vm, uint64_t vaddr, uint64_t paddr,
diff --git a/tools/testing/selftests/kvm/lib/aarch64/processor.c 
b/tools/testing/selftests/kvm/lib/aarch64/processor.c
index 26f0eccff6fe..3d4bb11bbd85 100644
--- a/tools/testing/selftests/kvm/lib/aarch64/processor.c
+++ b/tools/testing/selftests/kvm/lib/aarch64/processor.c
@@ -79,7 +79,7 @@ void virt_arch_pgd_alloc(struct kvm_vm *vm)
if (!vm->pgd_created) {
vm_paddr_t paddr = vm_phy_pages_alloc(vm,
page_align(vm, ptrs_per_pgd(vm) * 8) / vm->page_size,
-   KVM_GUEST_PAGE_TABLE_MIN_PADDR, 0);
+   KVM_GUEST_PAGE_TABLE_MIN_PADDR, 
vm->memslots[MEM_REGION_PT]);
vm->pgd = paddr;
vm->pgd_created = true;
}
@@ -328,8 +328,9 @@ struct kvm_vcpu *aarch64_vcpu_add(struct kvm_vm *vm, 
uint32_t vcpu_id,
size_t stack_size = vm->page_size == 4096 ?
DEFAULT_STACK_PGS * vm->page_size :
vm->page_size;
-   uint64_t stack_vaddr = vm_vaddr_alloc(vm, stack_size,
- 
DEFAULT_ARM64_GUEST_STACK_VADDR_MIN);
+   uint64_t stack_vaddr = __vm_vaddr_alloc(vm, stack_size,
+   
DEFAULT_ARM64_GUEST_STACK_VADDR_MIN,
+   MEM_REGION_CODE);
struct kvm_vcpu *vcpu = __vm_vcpu_add(vm, vcpu_id);
 
aarch64_vcpu_setup(vcpu, init);
@@ -435,8 +436,8 @@ void route_exception(struct ex_regs *regs, int vector)
 
 void vm_init_descriptor_tables(struct kvm_vm *vm)
 {
-   vm->handlers = vm_vaddr_alloc(vm, sizeof(struct handlers),
-   vm->page_size);
+   vm->handlers = __vm_vaddr_alloc(vm, sizeof(struct handlers),
+   vm->page_size, MEM_REGION_CODE);
 
*(vm_vaddr_t *)addr_gva2hva(vm, (vm_vaddr_t)(_handlers)) = 
vm->handlers;
 }
diff --git a/tools/testing/selftests/kvm/lib/elf.c 
b/tools/testing/selftests/kvm/lib/elf.c
index 9f54c098d9d0..51f280c412ba 100644
--- a/tools/testing/selftests/kvm/lib/elf.c
+++ b/tools/testing/selftests/kvm/lib/elf.c
@@ -161,7 +161,8 @@ void kvm_vm_elf_load(struct kvm_vm *vm, const char 
*filename)
seg_vend |= vm->page_size - 1;
size_t seg_size = seg_vend - seg_vstart + 1;
 
-   vm_vaddr_t vaddr = vm_vaddr_alloc(vm, seg_size, seg_vstart);
+   vm_vaddr_t vaddr = __vm_vaddr_alloc(vm, seg_size, seg_vstart,
+   MEM_REGION_CODE);
TEST_ASSERT(vaddr == seg_vstart, "Unable to allocate "
"virtual memory for segment at requested min addr,\n"
"  segment idx: %u\n"
diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c 
b/tools/testing/selftests/kvm/lib/kvm_util.c
index 2e36d6323518..7e5d565f9b8c 100644
--- a/tools/testing/selftests/kvm/lib/kvm_util.c
+++ b/tools/testing/selftests/kvm/lib/kvm_util.c
@@ 

Re: [PATCH v6 08/13] KVM: selftests: Use the right memslot for code, page-tables, and data allocations

2022-09-19 Thread Andrew Jones
On Tue, Sep 06, 2022 at 06:09:25PM +, Ricardo Koller wrote:
> The previous commit added support for callers of vm_create() to specify
> what memslots to use for code, page-tables, and data allocations. Change
> them accordingly:
> 
> - stacks, code, and exception tables use the code memslot
> - page tables and the pgd use the pt memslot
> - data (anything allocated with vm_vaddr_alloc()) uses the data memslot
> 
> No functional change intended. All allocators keep using memslot #0.
> 
> Cc: Sean Christopherson 
> Cc: Andrew Jones 
> Signed-off-by: Ricardo Koller 
> ---
>  .../selftests/kvm/include/kvm_util_base.h |  3 +
>  .../selftests/kvm/lib/aarch64/processor.c | 11 ++--
>  tools/testing/selftests/kvm/lib/elf.c |  3 +-
>  tools/testing/selftests/kvm/lib/kvm_util.c| 57 ---
>  .../selftests/kvm/lib/riscv/processor.c   |  7 ++-
>  .../selftests/kvm/lib/s390x/processor.c   |  7 ++-
>  .../selftests/kvm/lib/x86_64/processor.c  | 13 +++--
>  7 files changed, 61 insertions(+), 40 deletions(-)
>

Reviewed-by: Andrew Jones 
___
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm