Message ID | 20240709125704.61312-2-schlameuss@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | selftests: kvm: s390: Add s390x ucontrol selftests | expand |
On Tue, 9 Jul 2024 14:56:56 +0200 Christoph Schlameuss <schlameuss@linux.ibm.com> wrote: > Multiple test cases need page size and shift definitions. > By moving the definitions to a single architecture specific header we > limit the repetition. > > Make use of PAGE_SIZE, PAGE_SHIFT and PAGE_MASK defines in existing > code. > > Signed-off-by: Christoph Schlameuss <schlameuss@linux.ibm.com> Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com> > --- > tools/testing/selftests/kvm/include/s390x/processor.h | 5 +++++ > tools/testing/selftests/kvm/lib/s390x/processor.c | 10 +++++----- > tools/testing/selftests/kvm/s390x/cmma_test.c | 7 ++++--- > tools/testing/selftests/kvm/s390x/memop.c | 4 +--- > tools/testing/selftests/kvm/s390x/tprot.c | 5 ++--- > 5 files changed, 17 insertions(+), 14 deletions(-) > > diff --git a/tools/testing/selftests/kvm/include/s390x/processor.h b/tools/testing/selftests/kvm/include/s390x/processor.h > index 255c9b990f4c..481bd2fd6a32 100644 > --- a/tools/testing/selftests/kvm/include/s390x/processor.h > +++ b/tools/testing/selftests/kvm/include/s390x/processor.h > @@ -21,6 +21,11 @@ > #define PAGE_PROTECT 0x200 /* HW read-only bit */ > #define PAGE_NOEXEC 0x100 /* HW no-execute bit */ > > +/* Page size definitions */ > +#define PAGE_SHIFT 12 > +#define PAGE_SIZE BIT_ULL(PAGE_SHIFT) > +#define PAGE_MASK (~(PAGE_SIZE - 1)) > + > /* Is there a portable way to do this? */ > static inline void cpu_relax(void) > { > diff --git a/tools/testing/selftests/kvm/lib/s390x/processor.c b/tools/testing/selftests/kvm/lib/s390x/processor.c > index 4ad4492eea1d..20cfe970e3e3 100644 > --- a/tools/testing/selftests/kvm/lib/s390x/processor.c > +++ b/tools/testing/selftests/kvm/lib/s390x/processor.c > @@ -14,7 +14,7 @@ void virt_arch_pgd_alloc(struct kvm_vm *vm) > { > vm_paddr_t paddr; > > - TEST_ASSERT(vm->page_size == 4096, "Unsupported page size: 0x%x", > + TEST_ASSERT(vm->page_size == PAGE_SIZE, "Unsupported page size: 0x%x", > vm->page_size); > > if (vm->pgd_created) > @@ -79,7 +79,7 @@ void virt_arch_pg_map(struct kvm_vm *vm, uint64_t gva, uint64_t gpa) > } > > /* Fill in page table entry */ > - idx = (gva >> 12) & 0x0ffu; /* page index */ > + idx = (gva >> PAGE_SHIFT) & 0x0ffu; /* page index */ > if (!(entry[idx] & PAGE_INVALID)) > fprintf(stderr, > "WARNING: PTE for gpa=0x%"PRIx64" already set!\n", gpa); > @@ -91,7 +91,7 @@ vm_paddr_t addr_arch_gva2gpa(struct kvm_vm *vm, vm_vaddr_t gva) > int ri, idx; > uint64_t *entry; > > - TEST_ASSERT(vm->page_size == 4096, "Unsupported page size: 0x%x", > + TEST_ASSERT(vm->page_size == PAGE_SIZE, "Unsupported page size: 0x%x", > vm->page_size); > > entry = addr_gpa2hva(vm, vm->pgd); > @@ -103,7 +103,7 @@ vm_paddr_t addr_arch_gva2gpa(struct kvm_vm *vm, vm_vaddr_t gva) > entry = addr_gpa2hva(vm, entry[idx] & REGION_ENTRY_ORIGIN); > } > > - idx = (gva >> 12) & 0x0ffu; /* page index */ > + idx = (gva >> PAGE_SHIFT) & 0x0ffu; /* page index */ > > TEST_ASSERT(!(entry[idx] & PAGE_INVALID), > "No page mapping for vm virtual address 0x%lx", gva); > @@ -168,7 +168,7 @@ struct kvm_vcpu *vm_arch_vcpu_add(struct kvm_vm *vm, uint32_t vcpu_id) > struct kvm_sregs sregs; > struct kvm_vcpu *vcpu; > > - TEST_ASSERT(vm->page_size == 4096, "Unsupported page size: 0x%x", > + TEST_ASSERT(vm->page_size == PAGE_SIZE, "Unsupported page size: 0x%x", > vm->page_size); > > stack_vaddr = __vm_vaddr_alloc(vm, stack_size, > diff --git a/tools/testing/selftests/kvm/s390x/cmma_test.c b/tools/testing/selftests/kvm/s390x/cmma_test.c > index b39033844756..e32dd59703a0 100644 > --- a/tools/testing/selftests/kvm/s390x/cmma_test.c > +++ b/tools/testing/selftests/kvm/s390x/cmma_test.c > @@ -17,16 +17,17 @@ > #include "kvm_util.h" > #include "kselftest.h" > #include "ucall_common.h" > +#include "processor.h" > > #define MAIN_PAGE_COUNT 512 > > #define TEST_DATA_PAGE_COUNT 512 > #define TEST_DATA_MEMSLOT 1 > -#define TEST_DATA_START_GFN 4096 > +#define TEST_DATA_START_GFN PAGE_SIZE > > #define TEST_DATA_TWO_PAGE_COUNT 256 > #define TEST_DATA_TWO_MEMSLOT 2 > -#define TEST_DATA_TWO_START_GFN 8192 > +#define TEST_DATA_TWO_START_GFN (2 * PAGE_SIZE) > > static char cmma_value_buf[MAIN_PAGE_COUNT + TEST_DATA_PAGE_COUNT]; > > @@ -66,7 +67,7 @@ static void guest_dirty_test_data(void) > " lghi 5,%[page_count]\n" > /* r5 += r1 */ > "2: agfr 5,1\n" > - /* r2 = r1 << 12 */ > + /* r2 = r1 << PAGE_SHIFT */ > "1: sllg 2,1,12(0)\n" > /* essa(r4, r2, SET_STABLE) */ > " .insn rrf,0xb9ab0000,4,2,1,0\n" > diff --git a/tools/testing/selftests/kvm/s390x/memop.c b/tools/testing/selftests/kvm/s390x/memop.c > index f2df7416be84..4374b4cd2a80 100644 > --- a/tools/testing/selftests/kvm/s390x/memop.c > +++ b/tools/testing/selftests/kvm/s390x/memop.c > @@ -16,6 +16,7 @@ > #include "kvm_util.h" > #include "kselftest.h" > #include "ucall_common.h" > +#include "processor.h" > > enum mop_target { > LOGICAL, > @@ -226,9 +227,6 @@ static void memop_ioctl(struct test_info info, struct kvm_s390_mem_op *ksmo, > > #define CHECK_N_DO(f, ...) ({ f(__VA_ARGS__, CHECK_ONLY); f(__VA_ARGS__); }) > > -#define PAGE_SHIFT 12 > -#define PAGE_SIZE (1ULL << PAGE_SHIFT) > -#define PAGE_MASK (~(PAGE_SIZE - 1)) > #define CR0_FETCH_PROTECTION_OVERRIDE (1UL << (63 - 38)) > #define CR0_STORAGE_PROTECTION_OVERRIDE (1UL << (63 - 39)) > > diff --git a/tools/testing/selftests/kvm/s390x/tprot.c b/tools/testing/selftests/kvm/s390x/tprot.c > index 7a742a673b7c..12d5e1cb62e3 100644 > --- a/tools/testing/selftests/kvm/s390x/tprot.c > +++ b/tools/testing/selftests/kvm/s390x/tprot.c > @@ -9,9 +9,8 @@ > #include "kvm_util.h" > #include "kselftest.h" > #include "ucall_common.h" > +#include "processor.h" > > -#define PAGE_SHIFT 12 > -#define PAGE_SIZE (1 << PAGE_SHIFT) > #define CR0_FETCH_PROTECTION_OVERRIDE (1UL << (63 - 38)) > #define CR0_STORAGE_PROTECTION_OVERRIDE (1UL << (63 - 39)) > > @@ -151,7 +150,7 @@ static enum stage perform_next_stage(int *i, bool mapped_0) > * instead. > * In order to skip these tests we detect this inside the guest > */ > - skip = tests[*i].addr < (void *)4096 && > + skip = tests[*i].addr < (void *)PAGE_SIZE && > tests[*i].expected != TRANSL_UNAVAIL && > !mapped_0; > if (!skip) {
diff --git a/tools/testing/selftests/kvm/include/s390x/processor.h b/tools/testing/selftests/kvm/include/s390x/processor.h index 255c9b990f4c..481bd2fd6a32 100644 --- a/tools/testing/selftests/kvm/include/s390x/processor.h +++ b/tools/testing/selftests/kvm/include/s390x/processor.h @@ -21,6 +21,11 @@ #define PAGE_PROTECT 0x200 /* HW read-only bit */ #define PAGE_NOEXEC 0x100 /* HW no-execute bit */ +/* Page size definitions */ +#define PAGE_SHIFT 12 +#define PAGE_SIZE BIT_ULL(PAGE_SHIFT) +#define PAGE_MASK (~(PAGE_SIZE - 1)) + /* Is there a portable way to do this? */ static inline void cpu_relax(void) { diff --git a/tools/testing/selftests/kvm/lib/s390x/processor.c b/tools/testing/selftests/kvm/lib/s390x/processor.c index 4ad4492eea1d..20cfe970e3e3 100644 --- a/tools/testing/selftests/kvm/lib/s390x/processor.c +++ b/tools/testing/selftests/kvm/lib/s390x/processor.c @@ -14,7 +14,7 @@ void virt_arch_pgd_alloc(struct kvm_vm *vm) { vm_paddr_t paddr; - TEST_ASSERT(vm->page_size == 4096, "Unsupported page size: 0x%x", + TEST_ASSERT(vm->page_size == PAGE_SIZE, "Unsupported page size: 0x%x", vm->page_size); if (vm->pgd_created) @@ -79,7 +79,7 @@ void virt_arch_pg_map(struct kvm_vm *vm, uint64_t gva, uint64_t gpa) } /* Fill in page table entry */ - idx = (gva >> 12) & 0x0ffu; /* page index */ + idx = (gva >> PAGE_SHIFT) & 0x0ffu; /* page index */ if (!(entry[idx] & PAGE_INVALID)) fprintf(stderr, "WARNING: PTE for gpa=0x%"PRIx64" already set!\n", gpa); @@ -91,7 +91,7 @@ vm_paddr_t addr_arch_gva2gpa(struct kvm_vm *vm, vm_vaddr_t gva) int ri, idx; uint64_t *entry; - TEST_ASSERT(vm->page_size == 4096, "Unsupported page size: 0x%x", + TEST_ASSERT(vm->page_size == PAGE_SIZE, "Unsupported page size: 0x%x", vm->page_size); entry = addr_gpa2hva(vm, vm->pgd); @@ -103,7 +103,7 @@ vm_paddr_t addr_arch_gva2gpa(struct kvm_vm *vm, vm_vaddr_t gva) entry = addr_gpa2hva(vm, entry[idx] & REGION_ENTRY_ORIGIN); } - idx = (gva >> 12) & 0x0ffu; /* page index */ + idx = (gva >> PAGE_SHIFT) & 0x0ffu; /* page index */ TEST_ASSERT(!(entry[idx] & PAGE_INVALID), "No page mapping for vm virtual address 0x%lx", gva); @@ -168,7 +168,7 @@ struct kvm_vcpu *vm_arch_vcpu_add(struct kvm_vm *vm, uint32_t vcpu_id) struct kvm_sregs sregs; struct kvm_vcpu *vcpu; - TEST_ASSERT(vm->page_size == 4096, "Unsupported page size: 0x%x", + TEST_ASSERT(vm->page_size == PAGE_SIZE, "Unsupported page size: 0x%x", vm->page_size); stack_vaddr = __vm_vaddr_alloc(vm, stack_size, diff --git a/tools/testing/selftests/kvm/s390x/cmma_test.c b/tools/testing/selftests/kvm/s390x/cmma_test.c index b39033844756..e32dd59703a0 100644 --- a/tools/testing/selftests/kvm/s390x/cmma_test.c +++ b/tools/testing/selftests/kvm/s390x/cmma_test.c @@ -17,16 +17,17 @@ #include "kvm_util.h" #include "kselftest.h" #include "ucall_common.h" +#include "processor.h" #define MAIN_PAGE_COUNT 512 #define TEST_DATA_PAGE_COUNT 512 #define TEST_DATA_MEMSLOT 1 -#define TEST_DATA_START_GFN 4096 +#define TEST_DATA_START_GFN PAGE_SIZE #define TEST_DATA_TWO_PAGE_COUNT 256 #define TEST_DATA_TWO_MEMSLOT 2 -#define TEST_DATA_TWO_START_GFN 8192 +#define TEST_DATA_TWO_START_GFN (2 * PAGE_SIZE) static char cmma_value_buf[MAIN_PAGE_COUNT + TEST_DATA_PAGE_COUNT]; @@ -66,7 +67,7 @@ static void guest_dirty_test_data(void) " lghi 5,%[page_count]\n" /* r5 += r1 */ "2: agfr 5,1\n" - /* r2 = r1 << 12 */ + /* r2 = r1 << PAGE_SHIFT */ "1: sllg 2,1,12(0)\n" /* essa(r4, r2, SET_STABLE) */ " .insn rrf,0xb9ab0000,4,2,1,0\n" diff --git a/tools/testing/selftests/kvm/s390x/memop.c b/tools/testing/selftests/kvm/s390x/memop.c index f2df7416be84..4374b4cd2a80 100644 --- a/tools/testing/selftests/kvm/s390x/memop.c +++ b/tools/testing/selftests/kvm/s390x/memop.c @@ -16,6 +16,7 @@ #include "kvm_util.h" #include "kselftest.h" #include "ucall_common.h" +#include "processor.h" enum mop_target { LOGICAL, @@ -226,9 +227,6 @@ static void memop_ioctl(struct test_info info, struct kvm_s390_mem_op *ksmo, #define CHECK_N_DO(f, ...) ({ f(__VA_ARGS__, CHECK_ONLY); f(__VA_ARGS__); }) -#define PAGE_SHIFT 12 -#define PAGE_SIZE (1ULL << PAGE_SHIFT) -#define PAGE_MASK (~(PAGE_SIZE - 1)) #define CR0_FETCH_PROTECTION_OVERRIDE (1UL << (63 - 38)) #define CR0_STORAGE_PROTECTION_OVERRIDE (1UL << (63 - 39)) diff --git a/tools/testing/selftests/kvm/s390x/tprot.c b/tools/testing/selftests/kvm/s390x/tprot.c index 7a742a673b7c..12d5e1cb62e3 100644 --- a/tools/testing/selftests/kvm/s390x/tprot.c +++ b/tools/testing/selftests/kvm/s390x/tprot.c @@ -9,9 +9,8 @@ #include "kvm_util.h" #include "kselftest.h" #include "ucall_common.h" +#include "processor.h" -#define PAGE_SHIFT 12 -#define PAGE_SIZE (1 << PAGE_SHIFT) #define CR0_FETCH_PROTECTION_OVERRIDE (1UL << (63 - 38)) #define CR0_STORAGE_PROTECTION_OVERRIDE (1UL << (63 - 39)) @@ -151,7 +150,7 @@ static enum stage perform_next_stage(int *i, bool mapped_0) * instead. * In order to skip these tests we detect this inside the guest */ - skip = tests[*i].addr < (void *)4096 && + skip = tests[*i].addr < (void *)PAGE_SIZE && tests[*i].expected != TRANSL_UNAVAIL && !mapped_0; if (!skip) {
Multiple test cases need page size and shift definitions. By moving the definitions to a single architecture specific header we limit the repetition. Make use of PAGE_SIZE, PAGE_SHIFT and PAGE_MASK defines in existing code. Signed-off-by: Christoph Schlameuss <schlameuss@linux.ibm.com> --- tools/testing/selftests/kvm/include/s390x/processor.h | 5 +++++ tools/testing/selftests/kvm/lib/s390x/processor.c | 10 +++++----- tools/testing/selftests/kvm/s390x/cmma_test.c | 7 ++++--- tools/testing/selftests/kvm/s390x/memop.c | 4 +--- tools/testing/selftests/kvm/s390x/tprot.c | 5 ++--- 5 files changed, 17 insertions(+), 14 deletions(-)