All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marc Zyngier <maz@kernel.org>
To: Fuad Tabba <fuad.tabba@linux.dev>
Cc: oupton@kernel.org, kvmarm@lists.linux.dev,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, catalin.marinas@arm.com,
	will@kernel.org, joey.gouly@arm.com, seiden@linux.ibm.com,
	suzuki.poulose@arm.com, yuzenghui@huawei.com,
	mark.rutland@arm.com, steven.price@arm.com,
	vdonnefort@google.com, qperret@google.com, tabba@google.com
Subject: Re: [PATCH v3 16/18] KVM: arm64: Reject host power-on of a vCPU that EL2 holds powered off
Date: Wed, 16 Sep 2026 17:43:20 +0100	[thread overview]
Message-ID: <868q515eqf.wl-maz@kernel.org> (raw)
In-Reply-To: <20260914113338.159227-17-fuad.tabba@linux.dev>

On Mon, 14 Sep 2026 12:33:36 +0100,
Fuad Tabba <fuad.tabba@linux.dev> wrote:
> 
> A protected vCPU's power state belongs to EL2, which changes it only
> on the guest's own PSCI calls. KVM_SET_MP_STATE(RUNNABLE) on a vCPU
> EL2 holds powered off changes the host's copy alone, and the guest's
> next CPU_ON of that vCPU then fails: mp_state is no longer STOPPED, so
> the host returns ALREADY_ON, and the guest's retry fails the same way
> until the VMM stops the vCPU again. SUSPENDED has the same effect.
> 
> Track at the host whether EL2 holds a protected vCPU powered off and
> return -EPERM for both writes in that state. STOPPED stays permitted,
> so a VMM can pause a vCPU, and RUNNABLE on a vCPU EL2 has powered on,
> so it can resume one.
> 
> The guest's CPU_ON is gated on the same record rather than on STOPPED.
> A VMM that sets STOPPED between the target's CPU_OFF exit and the
> host's power-off of it would otherwise let the CPU_ON through, and the
> power-off would then record the target powered off while EL2 holds it
> ON_PENDING, with no way back before VM teardown. Gated on the record,
> that CPU_ON returns ALREADY_ON and the retry succeeds once the
> power-off has run.
> 
> Signed-off-by: Fuad Tabba <fuad.tabba@linux.dev>
> ---
>  arch/arm64/include/asm/kvm_host.h |  2 ++
>  arch/arm64/kvm/arm.c              | 19 +++++++++++++++++++
>  arch/arm64/kvm/pkvm.c             | 21 +++++++++++++++++----
>  arch/arm64/kvm/psci.c             | 10 +++++++++-
>  4 files changed, 47 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h
> index 37d0721d39a45..2e2c051dd8e62 100644
> --- a/arch/arm64/include/asm/kvm_host.h
> +++ b/arch/arm64/include/asm/kvm_host.h
> @@ -922,6 +922,8 @@ struct kvm_vcpu_arch {
>  	/* vcpu power state */
>  	struct kvm_mp_state mp_state;
>  	spinlock_t mp_state_lock;
> +	/* EL2 holds the protected vCPU powered off. Under mp_state_lock. */
> +	bool pkvm_powered_off;

I'm definitely not keen on yet another random boolean to describe some
new state. We already have mp_state. Why can't we use one of the
unused encodings and check that, since it very much looks like a case
of "let userspace change the MP_STATE unless EL2 says otherwise".

Can that be made to work?

	M.

-- 
Without deviation from the norm, progress is not possible.


  reply	other threads:[~2026-09-16 16:43 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-14 11:33 [PATCH v3 00/18] KVM: arm64: Confine protected VM vCPU state to EL2 Fuad Tabba
2026-09-14 11:33 ` [PATCH v3 01/18] KVM: arm64: Sync HCR_EL2.VSE back to the host vCPU under pKVM Fuad Tabba
2026-09-14 11:33 ` [PATCH v3 02/18] KVM: arm64: Validate the host vCPU's VM before reading it " Fuad Tabba
2026-09-14 11:33 ` [PATCH v3 03/18] KVM: arm64: Pin the host vCPU before adjusting its PC " Fuad Tabba
2026-09-14 13:01   ` sashiko-bot
2026-09-14 14:00     ` Fuad Tabba
2026-09-14 11:33 ` [PATCH v3 04/18] KVM: arm64: Disable steal time for protected VMs Fuad Tabba
2026-09-22 14:34   ` Vincent Donnefort
2026-09-14 11:33 ` [PATCH v3 05/18] KVM: arm64: Introduce per-EC entry handlers for pKVM Fuad Tabba
2026-09-14 11:33 ` [PATCH v3 06/18] KVM: arm64: Skip fixed-feature state flush for protected vCPUs Fuad Tabba
2026-09-14 13:42   ` sashiko-bot
2026-09-14 14:27     ` Fuad Tabba
2026-09-14 11:33 ` [PATCH v3 07/18] KVM: arm64: Add {flush,sync}_hyp_timer_state() primitives Fuad Tabba
2026-09-14 11:33 ` [PATCH v3 08/18] KVM: arm64: Add system register reset framework for protected VMs Fuad Tabba
2026-09-14 11:33 ` [PATCH v3 09/18] KVM: arm64: Implement HVC handling for protected guests at EL2 Fuad Tabba
2026-09-14 11:33 ` [PATCH v3 10/18] KVM: arm64: Handle PSCI calls for protected VMs " Fuad Tabba
2026-09-22 16:35   ` Vincent Donnefort
2026-09-22 16:37     ` Vincent Donnefort
2026-09-22 17:07   ` Vincent Donnefort
2026-09-23  9:51     ` Fuad Tabba
2026-09-24  8:30       ` Will Deacon
2026-09-24 11:26         ` Fuad Tabba
2026-09-24 12:14           ` Will Deacon
2026-09-24 15:21             ` Fuad Tabba
2026-10-01 12:58               ` Will Deacon
2026-10-01 13:11                 ` Fuad Tabba
2026-10-01 12:59   ` Will Deacon
2026-10-01 13:11     ` Fuad Tabba
2026-09-14 11:33 ` [PATCH v3 11/18] KVM: arm64: Restrict KVM_ARM_VCPU_INIT and PSCI version for protected VMs Fuad Tabba
2026-09-14 11:33 ` [PATCH v3 12/18] KVM: arm64: Prevent host PC adjustments for protected vCPUs Fuad Tabba
2026-09-14 13:42   ` Marc Zyngier
2026-09-14 14:43     ` Fuad Tabba
2026-09-15 11:02       ` Marc Zyngier
2026-09-15 11:19         ` Fuad Tabba
2026-09-14 11:33 ` [PATCH v3 13/18] KVM: arm64: Inject an UNDEF at EL2 for unhandled protected guest exits Fuad Tabba
2026-09-14 11:33 ` [PATCH v3 14/18] KVM: arm64: Add per-EC entry/exit state marshalling for protected guests Fuad Tabba
2026-09-16 16:27   ` Marc Zyngier
2026-09-16 19:05     ` Fuad Tabba
2026-09-14 11:33 ` [PATCH v3 15/18] KVM: arm64: Reject host access to protected VM private state Fuad Tabba
2026-09-16 16:30   ` Marc Zyngier
2026-09-16 19:07     ` Fuad Tabba
2026-09-17  8:06       ` Marc Zyngier
2026-09-17 18:42         ` Fuad Tabba
2026-09-18 13:21         ` Will Deacon
2026-09-18 13:24           ` Will Deacon
2026-09-27  8:20           ` Marc Zyngier
2026-09-27 12:37             ` Fuad Tabba
2026-09-28 19:00             ` Fuad Tabba
2026-09-14 11:33 ` [PATCH v3 16/18] KVM: arm64: Reject host power-on of a vCPU that EL2 holds powered off Fuad Tabba
2026-09-16 16:43   ` Marc Zyngier [this message]
2026-09-16 19:08     ` Fuad Tabba
2026-09-14 11:33 ` [PATCH v3 17/18] KVM: arm64: Advertise the capabilities that protected VMs support Fuad Tabba
2026-09-14 16:23   ` sashiko-bot
2026-09-14 18:01     ` Fuad Tabba
2026-09-14 11:33 ` [PATCH v3 18/18] KVM: arm64: Document the protected VM userspace API 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=868q515eqf.wl-maz@kernel.org \
    --to=maz@kernel.org \
    --cc=catalin.marinas@arm.com \
    --cc=fuad.tabba@linux.dev \
    --cc=joey.gouly@arm.com \
    --cc=kvmarm@lists.linux.dev \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=oupton@kernel.org \
    --cc=qperret@google.com \
    --cc=seiden@linux.ibm.com \
    --cc=steven.price@arm.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.