[PATCH 13/43] KVM: arm64: gic-v5: Make VPEs (non-)resident in vgic_load/put
Sascha Bischoff
Sascha.Bischoff at arm.com
Fri May 8 10:07:48 PDT 2026
On Thu, 2026-04-30 at 11:26 +0100, Marc Zyngier wrote:
> On Mon, 27 Apr 2026 17:10:28 +0100,
> Sascha Bischoff <Sascha.Bischoff at 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 at 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.
Yeah, agreed. I've merged #3 and #13 together.
>
> Thanks,
>
> M.
>
Thanks,
Sascha
More information about the linux-arm-kernel
mailing list