From: "Lorenzo Stoakes (ARM)" <ljs@kernel.org>
To: Fuad Tabba <tabba@google.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>, Marc Zyngier <maz@kernel.org>,
Oliver Upton <oupton@kernel.org>,
Joey Gouly <joey.gouly@arm.com>,
Steffen Eiden <seiden@linux.ibm.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Zenghui Yu <yuzenghui@huawei.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Jonathan Corbet <corbet@lwn.net>,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, kvmarm@lists.linux.dev,
kvm@vger.kernel.org, linux-doc@vger.kernel.org,
linux-kselftest@vger.kernel.org,
Jack Thomson <jackabt@amazon.com>,
Jack Thomson <jackabt.amazon@gmail.com>,
Alexandru Elisei <alexandru.elisei@arm.com>,
Vincent Donnefort <vdonnefort@google.com>,
"Aneesh Kumar K.V" <aneesh.kumar@kernel.org>,
Sean Christopherson <seanjc@google.com>,
Claudio Imbrenda <imbrenda@linux.ibm.com>,
Leo Soares Passos <Leo.Bras@arm.com>
Subject: Re: [PATCH 8/8] KVM: selftests: Add nested pre-fault test for arm64
Date: Fri, 11 Sep 2026 10:21:17 +0100 [thread overview]
Message-ID: <aqPH7yjXOIfCOpmE@gremlin> (raw)
In-Reply-To: <CA+EHjTy8m=b8D6sLOTv3AW05vXqFPRrTYvG7-t3D64Vt1+jAWQ@mail.gmail.com>
On Thu, Sep 10, 2026 at 07:57:03PM +0100, Fuad Tabba wrote:
> Hi,
>
> On Tue, 25 Aug 2026 at 17:02, Lorenzo Stoakes (ARM) <ljs@kernel.org> wrote:
> ..
> > +int main(void)
> > +{
> > + struct nested_s2_state s2;
> > + struct kvm_vcpu_init init;
> > + struct kvm_vcpu *vcpu;
> > + struct kvm_vm *vm;
> > + struct ucall uc;
> > + u64 npages;
> > +
> > + TEST_REQUIRE(kvm_check_cap(KVM_CAP_ARM_EL2));
>
> Would test_supports_el2() work better here? It honours the NV=0
> opt-out, and since HAS_EL2 is set unconditionally below, NV=0 doesn't
> disable this test as things stand.
That sounds sensible :) Will fix on respin.
>
> Cheers,
> /fuad
>
> > + TEST_REQUIRE(kvm_check_cap(KVM_CAP_PRE_FAULT_MEMORY));
> > +
> > + vm = vm_create(1);
> > +
> > + kvm_get_default_vcpu_target(vm, &init);
> > + init.features[0] |= BIT(KVM_ARM_VCPU_HAS_EL2);
> > + vcpu = aarch64_vcpu_add(vm, 0, &init, guest_code);
> > + kvm_arch_vm_finalize_vcpus(vm);
> > +
> > + npages = TEST_MEM_SIZE / vm->page_size;
> > + vm_userspace_mem_region_add(vm, VM_MEM_SRC_ANONYMOUS, TEST_MEM_GPA,
> > + TEST_MEM_SLOT, npages, 0);
> > + virt_map(vm, TEST_MEM_GPA, TEST_MEM_GPA, npages);
> > +
> > + vm_userspace_mem_region_add(vm, VM_MEM_SRC_ANONYMOUS,
> > + NESTED_S2_ROOT_GPA, NESTED_S2_ROOT_SLOT,
> > + vm_adjust_num_guest_pages(vm->mode, 1), 0);
> > +
> > + /* Run the guest until it has ERET'd from vEL2 to vEL1. */
> > + vcpu_run(vcpu);
> > + switch (get_ucall(vcpu, &uc)) {
> > + case UCALL_SYNC:
> > + TEST_ASSERT_EQ(uc.args[1], 1);
> > + break;
> > + case UCALL_ABORT:
> > + REPORT_GUEST_ASSERT(uc);
> > + break;
> > + default:
> > + TEST_FAIL("Unhandled ucall: %ld", uc.cmd);
> > + }
> > +
> > + /*
> > + * The vCPU's last-run context is vEL1, backed by a shadow stage-2
> > + * MMU. Enable nested stage-2 with an empty root so that the ioctl
> > + * fails if it tries to interpret the userspace GPA as an L2 IPA.
> > + *
> > + * Prefault in two halves so that the second ioctl exercises a
> > + * repeated shadow-MMU attach and canonical stage-2 swap.
> > + *
> > + * (Note that an implementation that wrongly populates shadow
> > + * stage-2 page tables would not be caught as userland can't
> > + * inspect these.)
> > + */
> > + s2 = enable_empty_nested_s2(vcpu);
> > + pre_fault(vcpu, TEST_MEM_GPA, TEST_MEM_SIZE / 2);
> > + pre_fault(vcpu, TEST_MEM_GPA + TEST_MEM_SIZE / 2, TEST_MEM_SIZE / 2);
> > + restore_nested_s2(vcpu, &s2);
> > +
> > + /* Resume at vEL1 and touch the prefaulted range. */
> > + vcpu_run(vcpu);
> > + switch (get_ucall(vcpu, &uc)) {
> > + case UCALL_DONE:
> > + break;
> > + case UCALL_ABORT:
> > + REPORT_GUEST_ASSERT(uc);
> > + break;
> > + default:
> > + TEST_FAIL("Unhandled ucall: %ld", uc.cmd);
> > + }
> > +
> > + kvm_vm_free(vm);
> > + return 0;
> > +}
> >
> > --
> > 2.55.0
> >
--
Cheers, Lorenzo
next prev parent reply other threads:[~2026-09-11 9:21 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-25 16:00 [PATCH 0/8] KVM: arm64: Add KVM_PRE_FAULT_MEMORY support Lorenzo Stoakes (ARM)
2026-08-25 16:00 ` [PATCH 1/8] KVM: arm64: Propagate and use esr in s2fd when handling guest aborts Lorenzo Stoakes (ARM)
2026-09-10 8:39 ` Marc Zyngier
2026-09-10 9:04 ` Lorenzo Stoakes (ARM)
2026-08-25 16:00 ` [PATCH 2/8] KVM: arm64: Propagate and use mmu " Lorenzo Stoakes (ARM)
2026-08-25 16:00 ` [PATCH 3/8] KVM: arm64: Propagate and use kvm_s2_fault_result on S2 fault Lorenzo Stoakes (ARM)
2026-09-10 8:49 ` Marc Zyngier
2026-09-10 9:00 ` Lorenzo Stoakes (ARM)
2026-08-25 16:00 ` [PATCH 4/8] KVM: arm64: Pass walk flags to kvm_pgtable_get_leaf() Lorenzo Stoakes (ARM)
2026-08-25 16:00 ` [PATCH 5/8] KVM: arm64: Implement KVM_PRE_FAULT_MEMORY Lorenzo Stoakes (ARM)
2026-09-10 10:02 ` Marc Zyngier
2026-09-10 15:32 ` Lorenzo Stoakes (ARM)
2026-08-25 16:00 ` [PATCH 6/8] KVM: selftests: Enable pre_fault_memory_test for arm64 Lorenzo Stoakes (ARM)
2026-09-10 18:52 ` Fuad Tabba
2026-08-25 16:00 ` [PATCH 7/8] KVM: selftests: Add option for different backing in pre-fault tests Lorenzo Stoakes (ARM)
2026-08-25 16:00 ` [PATCH 8/8] KVM: selftests: Add nested pre-fault test for arm64 Lorenzo Stoakes (ARM)
2026-09-10 18:57 ` Fuad Tabba
2026-09-11 9:21 ` Lorenzo Stoakes (ARM) [this message]
2026-09-11 6:30 ` Itaru Kitayama
2026-09-11 9:32 ` Lorenzo Stoakes (ARM)
2026-09-11 12:42 ` Wei-Lin Chang
2026-09-11 15:44 ` Lorenzo Stoakes (ARM)
2026-09-10 18:44 ` [PATCH 0/8] KVM: arm64: Add KVM_PRE_FAULT_MEMORY support Fuad Tabba
2026-09-11 9:16 ` Lorenzo Stoakes (ARM)
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=aqPH7yjXOIfCOpmE@gremlin \
--to=ljs@kernel.org \
--cc=Leo.Bras@arm.com \
--cc=alexandru.elisei@arm.com \
--cc=aneesh.kumar@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=corbet@lwn.net \
--cc=imbrenda@linux.ibm.com \
--cc=jackabt.amazon@gmail.com \
--cc=jackabt@amazon.com \
--cc=joey.gouly@arm.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=maz@kernel.org \
--cc=oupton@kernel.org \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--cc=seiden@linux.ibm.com \
--cc=suzuki.poulose@arm.com \
--cc=tabba@google.com \
--cc=vdonnefort@google.com \
--cc=will@kernel.org \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.