From: Itaru Kitayama <itaru.kitayama@linux.dev>
To: Ganapatrao Kulkarni <gankulkarni@os.amperecomputing.com>
Cc: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev,
linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org,
maz@kernel.org, oliver.upton@linux.dev, joey.gouly@arm.com,
suzuki.poulose@arm.com, yuzenghui@huawei.com, seanjc@google.com,
darren@os.amperecomputing.com
Subject: Re: [RFC PATCH v2 8/9] KVM: selftests: arm64: Extend kvm_page_table_test to run guest code in vEL2
Date: Mon, 2 Jun 2025 15:04:07 +0900 [thread overview]
Message-ID: <aD0+1+aVBrPEeYUl@vm4> (raw)
In-Reply-To: <20250512105251.577874-9-gankulkarni@os.amperecomputing.com>
On Mon, May 12, 2025 at 03:52:50AM -0700, Ganapatrao Kulkarni wrote:
> Adding code to run guest_code in vEL2.
> NV is enabled using command line argument and it is disabled by default.
>
> NV is only enabled on ARM64, for other architectures the test will exit
> with an ASSERT, if tried to run with NV enabled.
>
I'm seeing this in QEMU TCG mode, does this mean the limitation of the
emulation?
$ sudo /mnt/projects/linux/tools/testing/selftests/kvm/arm64/page_fault_test -m 3 -s anonymous
Random seed: 0x6b8b4567
==== Test Assertion Failure ====
arm64/page_fault_test.c:632: test->expected_events.uffd_faults == events.uffd_faults
pid=769 tid=769 errno=9 - Bad file descriptor
1 0x000000000040325b: check_event_counts at page_fault_test.c:632
2 (inlined by) run_test at page_fault_test.c:739
3 0x0000000000403cbf: for_each_guest_mode at guest_modes.c:96
4 0x0000000000401cfb: for_each_test_and_guest_mode at page_fault_test.c:1107
5 (inlined by) main at page_fault_test.c:1133
6 0x0000ffff848122db: ?? ??:0
7 0x0000ffff848123bb: ?? ??:0
8 0x0000000000401def: _start at ??:?
0x2 != 0x1 (test->expected_events.uffd_faults != events.uffd_faults)
Thanks,
Itaru.
> Signed-off-by: Ganapatrao Kulkarni <gankulkarni@os.amperecomputing.com>
> ---
> .../selftests/kvm/kvm_page_table_test.c | 30 +++++++++++++++++--
> 1 file changed, 27 insertions(+), 3 deletions(-)
>
> diff --git a/tools/testing/selftests/kvm/kvm_page_table_test.c b/tools/testing/selftests/kvm/kvm_page_table_test.c
> index dd8b12f626d3..383f9d134ecb 100644
> --- a/tools/testing/selftests/kvm/kvm_page_table_test.c
> +++ b/tools/testing/selftests/kvm/kvm_page_table_test.c
> @@ -20,6 +20,10 @@
> #include "guest_modes.h"
> #include "ucall_common.h"
>
> +#ifdef __aarch64__
> +#include <nv_util.h>
> +#endif
> +
> #define TEST_MEM_SLOT_INDEX 1
>
> /* Default size(1GB) of the memory for testing */
> @@ -229,7 +233,9 @@ static void *vcpu_worker(void *data)
> struct test_params {
> uint64_t phys_offset;
> uint64_t test_mem_size;
> + bool is_nested;
> enum vm_mem_backing_src_type src_type;
> + int fd;
> };
>
> static struct kvm_vm *pre_init_before_test(enum vm_guest_mode mode, void *arg)
> @@ -252,8 +258,17 @@ static struct kvm_vm *pre_init_before_test(enum vm_guest_mode mode, void *arg)
>
> /* Create a VM with enough guest pages */
> guest_num_pages = test_mem_size / guest_page_size;
> - vm = __vm_create_with_vcpus(VM_SHAPE(mode), nr_vcpus, guest_num_pages,
> + if (p->is_nested) {
> +#ifdef __aarch64__
> + vm = __nv_vm_create_with_vcpus_gic(VM_SHAPE(mode), nr_vcpus,
> + test_args.vcpus, guest_num_pages, &p->fd, guest_code);
> +#else
> + TEST_FAIL("Nested Not Supported");
> +#endif
> + } else {
> + vm = __vm_create_with_vcpus(VM_SHAPE(mode), nr_vcpus, guest_num_pages,
> guest_code, test_args.vcpus);
> + }
>
> /* Align down GPA of the testing memslot */
> if (!p->phys_offset)
> @@ -345,6 +360,7 @@ static void run_test(enum vm_guest_mode mode, void *arg)
> struct timespec start;
> struct timespec ts_diff;
> int ret, i;
> + struct test_params *p = (struct test_params *)arg;
>
> /* Create VM with vCPUs and make some pre-initialization */
> vm = pre_init_before_test(mode, arg);
> @@ -414,6 +430,8 @@ static void run_test(enum vm_guest_mode mode, void *arg)
> TEST_ASSERT(ret == 0, "Error in sem_destroy");
>
> free(vcpu_threads);
> + if (p->is_nested)
> + close(p->fd);
> kvm_vm_free(vm);
> }
>
> @@ -421,7 +439,7 @@ static void help(char *name)
> {
> puts("");
> printf("usage: %s [-h] [-p offset] [-m mode] "
> - "[-b mem-size] [-v vcpus] [-s mem-type]\n", name);
> + "[-b mem-size] [-v vcpus] [-s mem-type] [-g nv]\n", name);
> puts("");
> printf(" -p: specify guest physical test memory offset\n"
> " Warning: a low offset can conflict with the loaded test code.\n");
> @@ -430,6 +448,8 @@ static void help(char *name)
> " (default: 1G)\n");
> printf(" -v: specify the number of vCPUs to run\n"
> " (default: 1)\n");
> + printf(" -g: Enable Nested Virtualization, run guest code as guest hypervisor.\n"
> + " (default: Disabled)\n");
> backing_src_help("-s");
> puts("");
> }
> @@ -440,12 +460,13 @@ int main(int argc, char *argv[])
> struct test_params p = {
> .test_mem_size = DEFAULT_TEST_MEM_SIZE,
> .src_type = DEFAULT_VM_MEM_SRC,
> + .is_nested = false,
> };
> int opt;
>
> guest_modes_append_default();
>
> - while ((opt = getopt(argc, argv, "hp:m:b:v:s:")) != -1) {
> + while ((opt = getopt(argc, argv, "hp:m:b:v:s:g:")) != -1) {
> switch (opt) {
> case 'p':
> p.phys_offset = strtoull(optarg, NULL, 0);
> @@ -464,6 +485,9 @@ int main(int argc, char *argv[])
> case 's':
> p.src_type = parse_backing_src_type(optarg);
> break;
> + case 'g':
> + p.is_nested = atoi_non_negative("Is Nested", optarg);
> + break;
> case 'h':
> default:
> help(argv[0]);
> --
> 2.48.1
>
next prev parent reply other threads:[~2025-06-02 6:06 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-12 10:52 [RFC PATCH v2 0/9] KVM: Enable Nested Virt selftests Ganapatrao Kulkarni
2025-05-12 10:52 ` [RFC PATCH v2 1/9] KVM: arm64: nv: selftests: Add support to run guest code in vEL2 Ganapatrao Kulkarni
2025-05-28 13:33 ` Eric Auger
2025-05-28 23:39 ` [PATCH RFC " Itaru Kitayama
2025-05-29 9:04 ` Eric Auger
2025-05-29 11:50 ` [RFC PATCH " Marc Zyngier
2025-05-12 10:52 ` [RFC PATCH v2 2/9] KVM: arm64: nv: selftests: Add simple test " Ganapatrao Kulkarni
2025-06-09 3:14 ` Itaru Kitayama
2025-05-12 10:52 ` [RFC PATCH v2 3/9] KVM: arm64: nv: selftests: Enable hypervisor timer tests to run " Ganapatrao Kulkarni
2025-05-28 13:58 ` Eric Auger
2025-05-12 10:52 ` [RFC PATCH v2 4/9] KVM: arm64: nv: selftests: enable aarch32_id_regs test " Ganapatrao Kulkarni
2025-05-12 10:52 ` [RFC PATCH v2 5/9] KVM: arm64: nv: selftests: Enable vgic tests " Ganapatrao Kulkarni
2025-05-12 10:52 ` [RFC PATCH v2 6/9] KVM: arm64: nv: selftests: Enable set_id_regs test " Ganapatrao Kulkarni
2025-05-12 10:52 ` [RFC PATCH v2 7/9] KVM: arm64: nv: selftests: Enable " Ganapatrao Kulkarni
2025-05-12 10:52 ` [RFC PATCH v2 8/9] KVM: selftests: arm64: Extend kvm_page_table_test to run guest code " Ganapatrao Kulkarni
2025-06-02 6:04 ` Itaru Kitayama [this message]
2025-06-02 15:38 ` Marc Zyngier
2025-05-12 10:52 ` [RFC PATCH v2 9/9] KVM: arm64: nv: selftests: Enable page_fault_test test to run " Ganapatrao Kulkarni
2025-05-28 13:28 ` [RFC PATCH v2 0/9] KVM: Enable Nested Virt selftests Eric Auger
2025-05-29 10:29 ` Ganapatrao Kulkarni
2025-05-29 11:48 ` Marc Zyngier
2025-06-19 9:40 ` Ganapatrao Kulkarni
2025-06-19 11:45 ` Marc Zyngier
2025-06-23 10:31 ` Ganapatrao Kulkarni
2025-06-23 14:11 ` Marc Zyngier
2025-07-25 10:01 ` Ganapatrao Kulkarni
2025-07-25 10:59 ` Marc Zyngier
2025-05-30 17:49 ` Miguel Luis
2025-05-30 21:32 ` Oliver Upton
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=aD0+1+aVBrPEeYUl@vm4 \
--to=itaru.kitayama@linux.dev \
--cc=darren@os.amperecomputing.com \
--cc=gankulkarni@os.amperecomputing.com \
--cc=joey.gouly@arm.com \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=maz@kernel.org \
--cc=oliver.upton@linux.dev \
--cc=seanjc@google.com \
--cc=suzuki.poulose@arm.com \
--cc=yuzenghui@huawei.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