Re: [PATCH v3 10/18] KVM: arm64: Handle PSCI calls for protected VMs at EL2

From: Will Deacon

Date: Thu Oct 01 2026 - 09:06:17 EST


On Mon, Sep 14, 2026 at 12:33:30PM +0100, Fuad Tabba wrote:
> diff --git a/arch/arm64/kvm/hyp/nvhe/pkvm.c b/arch/arm64/kvm/hyp/nvhe/pkvm.c
> index 855cb77c8bba1..d970cba12ca47 100644
> --- a/arch/arm64/kvm/hyp/nvhe/pkvm.c
> +++ b/arch/arm64/kvm/hyp/nvhe/pkvm.c
>
> +/*
> + * Reset the vCPU to its power-on state and commit ON_PENDING -> ON, on the
> + * target's own CPU. Returns -ECANCELED, with no side effects, if a rollback
> + * raced the reset.
> + */
> +int pkvm_reset_vcpu(struct pkvm_hyp_vcpu *hyp_vcpu)
> +{
> + struct vcpu_reset_state *reset_state = &hyp_vcpu->vcpu.arch.reset_state;
> + int prev;
> +
> + /*
> + * Pairs with smp_store_release(&reset_state->reset, true) in
> + * pvm_psci_vcpu_on(). The acquire must precede the cmpxchg: reversed, a
> + * winning cmpxchg with a false acquire would leave power_state == ON
> + * with the reset skipped.
> + */
> + if (!smp_load_acquire(&reset_state->reset))
> + return -ECANCELED;
> +
> + prev = cmpxchg_relaxed(&hyp_vcpu->power_state,
> + PSCI_0_2_AFFINITY_LEVEL_ON_PENDING,
> + PSCI_0_2_AFFINITY_LEVEL_ON);
> + if (prev != PSCI_0_2_AFFINITY_LEVEL_ON_PENDING) {
> + /* The only other writer of ON_PENDING is the rollback. */
> + WARN_ON(prev != PSCI_0_2_AFFINITY_LEVEL_OFF);

If you go with the idea we're discussing later in the thread, then I think
you need to drop this WARN_ON() and the comment that goes with it.

Will