Re: [PATCH 13/43] KVM: arm64: gic-v5: Make VPEs (non-)resident in vgic_load/put

Marc Zyngier
2026-04-30T10:26:52Z

On Mon, 27 Apr 2026 17:10:28 +0100,
Sascha Bischoff <Sascha.Bischoff@arm.com> wrote:
>
> Extend vgic_v5_load and vgic_v5_put to make the VPEs resident and
> non-resident, respectively. This makes the IRS aware of which VPE is
> currently resident, and therefore allows it to perform HPPI selection
> for LPIs and SPIs, which would otherwise never be signalled to the
> VPE.
>
> Signed-off-by: Sascha Bischoff <sascha.bischoff@arm.com>
> ---
> arch/arm64/kvm/vgic/vgic-v5.c | 12 ++++++++++--
> 1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arm64/kvm/vgic/vgic-v5.c b/arch/arm64/kvm/vgic/vgic-v5.c
> index 92bb63b6dd6bb..11a1a491b7e0a 100644
> --- a/arch/arm64/kvm/vgic/vgic-v5.c
> +++ b/arch/arm64/kvm/vgic/vgic-v5.c
> @@ -1053,6 +1053,8 @@ void vgic_v5_flush_ppi_state(struct kvm_vcpu *vcpu)
> void vgic_v5_load(struct kvm_vcpu *vcpu)
> {
> struct vgic_v5_cpu_if *cpu_if = &vcpu->arch.vgic_cpu.vgic_v5;
> + u16 vm = vgic_v5_vm_id(vcpu->kvm);
> + u16 vpe = vgic_v5_vpe_id(vcpu);
>
> /*
> * On the WFI path, vgic_load is called a second time. The first is when
> @@ -1065,7 +1067,11 @@ void vgic_v5_load(struct kvm_vcpu *vcpu)
>
> kvm_call_hyp(__vgic_v5_restore_vmcr_apr, cpu_if);
>
> - cpu_if->gicv5_vpe.resident = true;
> + cpu_if->vgic_contextr = FIELD_PREP(ICH_CONTEXTR_EL2_V, true) |
> + FIELD_PREP(ICH_CONTEXTR_EL2_VPE, vpe) |
> + FIELD_PREP(ICH_CONTEXTR_EL2_VM, vm);
> +
> + kvm_call_hyp(__vgic_v5_make_resident, cpu_if);
> }
>
> void vgic_v5_put(struct kvm_vcpu *vcpu)
> @@ -1083,7 +1089,9 @@ void vgic_v5_put(struct kvm_vcpu *vcpu)
>
> kvm_call_hyp(__vgic_v5_save_apr, cpu_if);
>
> - cpu_if->gicv5_vpe.resident = false;
> + cpu_if->vgic_contextr = 0;
> +
> + kvm_call_hyp(__vgic_v5_make_non_resident, cpu_if);
>
> /* The shadow priority is only updated on entering WFI */
> if (vcpu_get_flag(vcpu, IN_WFI))

Should this patch be folded in patch #3? They seem to overlap in major
ways.

Thanks,

M.

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