From: Sean Christopherson <seanjc@google.com>
To: Ricardo Koller <ricarkol@google.com>
Cc: kvm@vger.kernel.org, kvmarm@lists.linux.dev,
kvmarm@lists.cs.columbia.edu, andrew.jones@linux.dev,
pbonzini@redhat.com, maz@kernel.org, alexandru.elisei@arm.com,
eric.auger@redhat.com, oupton@google.com, reijiw@google.com,
rananta@google.com, bgardon@google.com, dmatlack@google.com,
axelrasmussen@google.com
Subject: Re: [PATCH v9 10/14] KVM: selftests: aarch64: Add aarch64/page_fault_test
Date: Fri, 14 Oct 2022 21:23:30 +0000 [thread overview]
Message-ID: <Y0nTUmsC7YGTQery@google.com> (raw)
In-Reply-To: <20221011010628.1734342-11-ricarkol@google.com>
On Tue, Oct 11, 2022, Ricardo Koller wrote:
> +/* Returns true to continue the test, and false if it should be skipped. */
> +static bool punch_hole_in_backing_store(struct kvm_vm *vm,
> + struct userspace_mem_region *region)
> +{
> + void *hva = (void *)region->region.userspace_addr;
> + uint64_t paging_size = region->region.memory_size;
> + int ret, fd = region->fd;
> +
> + if (fd != -1) {
> + ret = fallocate(fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
> + 0, paging_size);
> + TEST_ASSERT(ret == 0, "fallocate failed, errno: %d\n", errno);
> + } else {
> + ret = madvise(hva, paging_size, MADV_DONTNEED);
> + TEST_ASSERT(ret == 0, "madvise failed, errno: %d\n", errno);
> + }
Uber nit, no need to manually print the errno, TEST_ASSERT() does that automatically
and pretty prints the string too. I know this because I keep forgetting myself :-).
> +/* Returns true to continue the test, and false if it should be skipped. */
> +static bool handle_cmd(struct kvm_vm *vm, int cmd)
> +{
> + struct userspace_mem_region *data_region, *pt_region;
> + bool continue_test = true;
> +
> + data_region = vm_get_mem_region(vm, MEM_REGION_TEST_DATA);
> + pt_region = vm_get_mem_region(vm, MEM_REGION_PT);
> +
> + if (cmd == CMD_SKIP_TEST)
> + continue_test = false;
> +
> + if (cmd & CMD_HOLE_PT)
> + continue_test = punch_hole_in_backing_store(vm, pt_region);
> + if (cmd & CMD_HOLE_DATA)
> + continue_test = punch_hole_in_backing_store(vm, data_region);
> +
> + return continue_test;
> +}
...
> +static void setup_abort_handlers(struct kvm_vm *vm, struct kvm_vcpu *vcpu,
> + struct test_desc *test)
Align params.
static void setup_abort_handlers(struct kvm_vm *vm, struct kvm_vcpu *vcpu,
struct test_desc *test)
> +static void for_each_test_and_guest_mode(
> + void (*func)(enum vm_guest_mode m, void *a),
If you spin a new version, can you put together a patch or mini-series to add a
typedef for this function pointer? Then this function doesn't need a funky wrap.
Or alternatively, as follow-up to avoid delaying this series even longer.
E.g.
static void for_each_test_and_guest_mode(guest_mode_test_t func,
enum vm_mem_backing_src_type src_type)
diff --git a/tools/testing/selftests/kvm/include/guest_modes.h b/tools/testing/selftests/kvm/include/guest_modes.h
index b691df33e64e..ee7c5c271eb2 100644
--- a/tools/testing/selftests/kvm/include/guest_modes.h
+++ b/tools/testing/selftests/kvm/include/guest_modes.h
@@ -15,7 +15,9 @@ extern struct guest_mode guest_modes[NUM_VM_MODES];
guest_modes[mode] = (struct guest_mode){ supported, enabled }; \
})
+typedef void (*guest_mode_test_t)(enum vm_guest_mode, void *);
+
void guest_modes_append_default(void);
-void for_each_guest_mode(void (*func)(enum vm_guest_mode, void *), void *arg);
+void for_each_guest_mode(guest_mode_test_t func, void *arg);
void guest_modes_help(void);
void guest_modes_cmdline(const char *arg);
> + enum vm_mem_backing_src_type src_type)
> +{
> + struct test_desc *t;
> +
> + for (t = &tests[0]; t->name; t++) {
> + if (t->skip)
> + continue;
> +
> + struct test_params p = {
> + .src_type = src_type,
> + .test_desc = t,
> + };
> +
> + for_each_guest_mode(run_test, &p);
> + }
> +}
> +
> +int main(int argc, char *argv[])
> +{
> + enum vm_mem_backing_src_type src_type;
> + int opt;
> +
> + setbuf(stdout, NULL);
> +
> + src_type = DEFAULT_VM_MEM_SRC;
> +
> + while ((opt = getopt(argc, argv, "hm:s:")) != -1) {
> + switch (opt) {
> + case 'm':
> + guest_modes_cmdline(optarg);
> + break;
> + case 's':
> + src_type = parse_backing_src_type(optarg);
> + break;
> + case 'h':
> + default:
> + help(argv[0]);
> + exit(0);
> + }
> + }
> +
> + for_each_test_and_guest_mode(run_test, src_type);
> + return 0;
> +}
> diff --git a/tools/testing/selftests/kvm/include/aarch64/processor.h b/tools/testing/selftests/kvm/include/aarch64/processor.h
> index c1ddca8db225..5f977528e09c 100644
> --- a/tools/testing/selftests/kvm/include/aarch64/processor.h
> +++ b/tools/testing/selftests/kvm/include/aarch64/processor.h
> @@ -105,11 +105,19 @@ enum {
> #define ESR_EC_MASK (ESR_EC_NUM - 1)
>
> #define ESR_EC_SVC64 0x15
> +#define ESR_EC_IABT 0x21
> +#define ESR_EC_DABT 0x25
> #define ESR_EC_HW_BP_CURRENT 0x31
> #define ESR_EC_SSTEP_CURRENT 0x33
> #define ESR_EC_WP_CURRENT 0x35
> #define ESR_EC_BRK_INS 0x3c
>
> +/* Access flag */
> +#define PTE_AF (1ULL << 10)
> +
> +/* Access flag update enable/disable */
> +#define TCR_EL1_HA (1ULL << 39)
> +
> void aarch64_get_supported_page_sizes(uint32_t ipa,
> bool *ps4k, bool *ps16k, bool *ps64k);
>
> --
> 2.38.0.rc1.362.ged0d419d3c-goog
>
next prev parent reply other threads:[~2022-10-14 21:23 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-11 1:06 [PATCH v9 00/14] KVM: selftests: Add aarch64/page_fault_test Ricardo Koller
2022-10-11 1:06 ` [PATCH v9 01/14] KVM: selftests: Add a userfaultfd library Ricardo Koller
2022-10-14 21:15 ` Sean Christopherson
2022-10-11 1:06 ` [PATCH v9 02/14] KVM: selftests: aarch64: Add virt_get_pte_hva() library function Ricardo Koller
2022-10-11 1:06 ` [PATCH v9 03/14] KVM: selftests: Add missing close and munmap in __vm_mem_region_delete() Ricardo Koller
2022-10-11 1:06 ` [PATCH v9 04/14] KVM: selftests: aarch64: Construct DEFAULT_MAIR_EL1 using sysreg.h macros Ricardo Koller
2022-10-11 1:06 ` [PATCH v9 05/14] tools: Copy bitfield.h from the kernel sources Ricardo Koller
2022-10-11 1:06 ` [PATCH v9 06/14] KVM: selftests: Stash backing_src_type in struct userspace_mem_region Ricardo Koller
2022-10-11 1:06 ` [PATCH v9 07/14] KVM: selftests: Add vm->memslots[] and enum kvm_mem_region_type Ricardo Koller
2022-10-11 1:06 ` [PATCH v9 08/14] KVM: selftests: Fix alignment in virt_arch_pgd_alloc() and vm_vaddr_alloc() Ricardo Koller
2022-10-13 14:09 ` Andrew Jones
2022-10-11 1:06 ` [PATCH v9 09/14] KVM: selftests: Use the right memslot for code, page-tables, and data allocations Ricardo Koller
2022-10-13 14:14 ` Andrew Jones
2022-10-11 1:06 ` [PATCH v9 10/14] KVM: selftests: aarch64: Add aarch64/page_fault_test Ricardo Koller
2022-10-14 21:23 ` Sean Christopherson [this message]
2022-10-11 1:06 ` [PATCH v9 11/14] KVM: selftests: aarch64: Add userfaultfd tests into page_fault_test Ricardo Koller
2022-10-14 21:27 ` Sean Christopherson
2022-10-11 1:06 ` [PATCH v9 12/14] KVM: selftests: aarch64: Add dirty logging " Ricardo Koller
2022-10-14 21:28 ` Sean Christopherson
2022-10-11 1:06 ` [PATCH v9 13/14] KVM: selftests: aarch64: Add readonly memslot " Ricardo Koller
2022-10-11 1:06 ` [PATCH v9 14/14] KVM: selftests: aarch64: Add mix of " Ricardo Koller
2022-10-14 21:30 ` [PATCH v9 00/14] KVM: selftests: Add aarch64/page_fault_test Sean Christopherson
2022-10-14 21:37 ` Ricardo Koller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Y0nTUmsC7YGTQery@google.com \
--to=seanjc@google.com \
--cc=alexandru.elisei@arm.com \
--cc=andrew.jones@linux.dev \
--cc=axelrasmussen@google.com \
--cc=bgardon@google.com \
--cc=dmatlack@google.com \
--cc=eric.auger@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=kvmarm@lists.linux.dev \
--cc=maz@kernel.org \
--cc=oupton@google.com \
--cc=pbonzini@redhat.com \
--cc=rananta@google.com \
--cc=reijiw@google.com \
--cc=ricarkol@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox