[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