From: Vincent Donnefort <vdonnefort@google.com>
To: Fuad Tabba <fuad.tabba@linux.dev>
Cc: maz@kernel.org, oupton@kernel.org, kvmarm@lists.linux.dev,
linux-arm-kernel@lists.infradead.org, joey.gouly@arm.com,
seiden@linux.ibm.com, suzuki.poulose@arm.com,
yuzenghui@huawei.com, catalin.marinas@arm.com, will@kernel.org,
kernel-team@android.com, qperret@google.com
Subject: Re: [PATCH v4 11/17] KVM: arm64: Filter out non-kernel addresses in kern_hyp_va
Date: Tue, 25 Aug 2026 10:34:34 +0100 [thread overview]
Message-ID: <ao1hqq-BCmKWmQE7@google.com> (raw)
In-Reply-To: <CA+EHjTycM7b4d1foNQr33e7dN7WHyeg-Ww8nPkSKu78DGDs9_w@mail.gmail.com>
On Tue, Aug 18, 2026 at 03:45:23PM +0100, Fuad Tabba wrote:
> Hi Vincent,
>
>
> On Fri, 31 Jul 2026 at 15:36, Vincent Donnefort <vdonnefort@google.com> wrote:
> >
> > kern_hyp_va() is idempotent for the hypervisor linear space. This is
> > handy for nVHE hypervisor callers handling kvm_vcpu or kvm_arch
> > pointers. Those pointers can originate from the hypervisor space (when
> > protected mode is enabled, we don't trust the kernel and the hypervisor
> > uses its own copy) or from the kernel space (we do trust the kernel in
> > "non-protected" nVHE).
> >
> > This idempotence does not hold for addresses within the hypervisor
> > private range, like the ones you get from the pKVM heap allocator
> > (hyp_alloc()). To resolve this, filter out non-kernel addresses based on
> > PAGE_OFFSET.
> >
> > Leave the assembly version untouched as it has no current users.
> >
> > Reviewed-by: Fuad Tabba <fuad.tabba@linux.dev>
> > Tested-by: Fuad Tabba <fuad.tabba@linux.dev>
> > Signed-off-by: Vincent Donnefort <vdonnefort@google.com>
> >
> > diff --git a/arch/arm64/include/asm/kvm_mmu.h b/arch/arm64/include/asm/kvm_mmu.h
> > index 6eae7e7e2a68..d60e5f2de10c 100644
> > --- a/arch/arm64/include/asm/kvm_mmu.h
> > +++ b/arch/arm64/include/asm/kvm_mmu.h
> > @@ -126,6 +126,9 @@ static __always_inline unsigned long __kern_hyp_va(unsigned long v)
> > * replace the instructions with `nop`s.
> > */
> > #ifndef __KVM_VHE_HYPERVISOR__
> > + if (!is_ttbr1_addr(v))
> > + return v;
> > +
>
> I gave this a tag earlier and only came back to the cost side now, sorry.
>
> The check is unconditional, so plain nVHE pays it on every
> kern_hyp_va(), including the one in __kvm_vcpu_run(), and it has no
> private range to protect.
>
> Could it be gated on is_protected_kvm_enabled(), the same way patch 17
> gates hyp_trace_buffer_alloc_bpages()?
>
> Cheers,
> /fuad
Sure, that's really a micro optimisation though, I don't think that
is_ttbr1_addr() is expensive.
--
Vincent
>
>
> > asm volatile(ALTERNATIVE_CB("and %0, %0, #1\n" /* mask with va_mask */
> > "ror %0, %0, #1\n" /* rotate to the first tag bit */
> > "add %0, %0, #0\n" /* insert the low 12 bits of the tag */
> > --
> > 2.55.0.508.g3f0d502094-goog
> >
next prev parent reply other threads:[~2026-08-25 9:39 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-31 14:35 [PATCH v4 00/17] KVM: arm64: Introduce pKVM hypervisor heap allocator Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 01/17] KVM: arm64: Add pkvm_private_va_range_pa Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 02/17] KVM: arm64: Add pkvm_remove_mappings Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 03/17] KVM: arm64: Add pkvm_map_private_va_range Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 04/17] KVM: arm64: Add a heap allocator for the pKVM hyp Vincent Donnefort
2026-08-18 14:22 ` Fuad Tabba
2026-08-24 15:19 ` Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 05/17] KVM: arm64: Allow kvm_hyp_memcache usage outside of stage-2 Vincent Donnefort
2026-07-31 14:51 ` sashiko-bot
2026-07-31 14:35 ` [PATCH v4 06/17] KVM: arm64: Add pkvm_hyp_req infrastructure Vincent Donnefort
2026-07-31 14:45 ` sashiko-bot
2026-08-18 15:33 ` Fuad Tabba
2026-08-25 7:41 ` Aneesh Kumar K.V
2026-08-25 8:10 ` Vincent Donnefort
2026-08-25 8:51 ` Fuad Tabba
2026-08-25 13:28 ` Aneesh Kumar K.V
2026-07-31 14:35 ` [PATCH v4 07/17] KVM: arm64: Add PKVM_HYP_REQ_HYP_ALLOC request Vincent Donnefort
2026-07-31 14:52 ` sashiko-bot
2026-08-18 15:11 ` Fuad Tabba
2026-08-18 15:12 ` Fuad Tabba
2026-07-31 14:35 ` [PATCH v4 08/17] KVM: arm64: Add reclaim interface for the pKVM heap alloc Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 09/17] KVM: arm64: Add selftests for the pKVM heap allocator Vincent Donnefort
2026-07-31 15:03 ` sashiko-bot
2026-08-18 15:43 ` Fuad Tabba
2026-08-24 16:23 ` Vincent Donnefort
2026-08-24 18:15 ` Fuad Tabba
2026-07-31 14:35 ` [PATCH v4 10/17] KVM: arm64: Add a shrinker for pKVM Vincent Donnefort
2026-08-18 15:28 ` Fuad Tabba
2026-08-24 16:38 ` Vincent Donnefort
2026-08-24 18:10 ` Fuad Tabba
2026-08-25 7:22 ` Vincent Donnefort
2026-08-25 7:40 ` Fuad Tabba
2026-08-25 8:20 ` Vincent Donnefort
2026-08-25 8:38 ` Fuad Tabba
2026-07-31 14:35 ` [PATCH v4 11/17] KVM: arm64: Filter out non-kernel addresses in kern_hyp_va Vincent Donnefort
2026-08-18 14:45 ` Fuad Tabba
2026-08-25 9:34 ` Vincent Donnefort [this message]
2026-07-31 14:35 ` [PATCH v4 12/17] KVM: arm64: Move hyp_vm refcount into the structure Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 13/17] KVM: arm64: Alloc pkvm_hyp_vm using pKVM heap allocator Vincent Donnefort
2026-07-31 15:06 ` sashiko-bot
2026-08-17 13:38 ` Fuad Tabba
2026-07-31 14:35 ` [PATCH v4 14/17] KVM: arm64: Alloc pkvm_hyp_vcpu " Vincent Donnefort
2026-07-31 15:04 ` sashiko-bot
2026-08-17 13:39 ` Fuad Tabba
2026-07-31 14:35 ` [PATCH v4 15/17] KVM: arm64: Reject hyp trace descriptors with fewer CPUs than hyp_nr_cpus Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 16/17] KVM: arm64: Reject hyp trace descriptors with fewer than 3 pages Vincent Donnefort
2026-08-17 14:00 ` Fuad Tabba
2026-07-31 14:35 ` [PATCH v4 17/17] KVM: arm64: Alloc simple_buffer_page using pKVM hyp allocator Vincent Donnefort
2026-08-17 14:16 ` Fuad Tabba
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=ao1hqq-BCmKWmQE7@google.com \
--to=vdonnefort@google.com \
--cc=catalin.marinas@arm.com \
--cc=fuad.tabba@linux.dev \
--cc=joey.gouly@arm.com \
--cc=kernel-team@android.com \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=maz@kernel.org \
--cc=oupton@kernel.org \
--cc=qperret@google.com \
--cc=seiden@linux.ibm.com \
--cc=suzuki.poulose@arm.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.