Skip to content

Commit 7682c02

Browse files
Marc Zyngieroupton
authored andcommitted
KVM: arm64: nv: Propagate used_lrs between L1 and L0 contexts
We have so far made sure that L1 and L0 vgic contexts were totally independent. There is however one spot of bother with this approach, and that's in the GICv3 emulation code required by our fruity friends. The issue is that the emulation code needs to know how many LRs are in flight. And while it is easy to reach the L0 version through the vcpu pointer, doing so for the L1 is much more complicated, as these structures are private to the nested code. We could simply expose that structure and pick one or the other depending on the context, but this seems extra complexity for not much benefit. Instead, just propagate the number of used LRs from the nested code into the L0 context, and be done with it. Should this become a burden, it can be easily rectified. Signed-off-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/20250225172930.1850838-14-maz@kernel.org Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
1 parent 93078ae commit 7682c02

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

arch/arm64/kvm/vgic/vgic-v3-nested.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,12 @@ void vgic_v3_load_nested(struct kvm_vcpu *vcpu)
323323
__vgic_v3_activate_traps(cpu_if);
324324

325325
__vgic_v3_restore_state(cpu_if);
326+
327+
/*
328+
* Propagate the number of used LRs for the benefit of the HYP
329+
* GICv3 emulation code. Yes, this is a pretty sorry hack.
330+
*/
331+
vcpu->arch.vgic_cpu.vgic_v3.used_lrs = cpu_if->used_lrs;
326332
}
327333

328334
void vgic_v3_put_nested(struct kvm_vcpu *vcpu)
@@ -358,6 +364,7 @@ void vgic_v3_put_nested(struct kvm_vcpu *vcpu)
358364
}
359365

360366
shadow_if->lr_map = 0;
367+
vcpu->arch.vgic_cpu.vgic_v3.used_lrs = 0;
361368
}
362369

363370
/*

0 commit comments

Comments
 (0)