KVM: arm64: Finalize ID registers only once per VM
Marc Zyngier
maintainerPATCH 1/1 KVM: arm64: Finalize ID registers only once per VM
Owing to the ID registers being global to the VM, there is no point in computing them more than once. However, recent changes making use of kvm_set_vm_id_reg() outlined that we repeatedly hammer the ID registers when we shouldn't.
Gate the ID reg update on the VM having never run.
--- arch/arm64/kvm/sys_regs.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
arch/arm64/kvm/sys_regs.c +5 -1
@@ -5624,7 +5624,11 @@ int kvm_finalize_sys_regs(struct kvm_vcpu *vcpu)guard (mutex)(&kvm->arch.config_lock); -if (!irqchip_in_kernel (kvm)) { +/* +* This hacks into the ID registers, so only perform it when the +* first vcpu runs, or the kvm_set_vm_id_reg() helper will scream. +*/ +if (!irqchip_in_kernel (kvm) && !kvm_vm_has_ran_once (kvm)) {u64 val; val =kvm_read_vm_id_reg (kvm,SYS_ID_AA64PFR0_EL1 ) & ~ID_AA64PFR0_EL1_GIC ;
Signature · 1 line
2.47.3
Quoted 6 lines · Marc Zyngier
Owing to the ID registers being global to the VM, there is no point in computing them more than once. However, recent changes making use of
kvm_set_vm_id_reg()outlined that we repeatedly hammer the ID registers when we shouldn't.Gate the ID reg update on the VM having never run.
This resolves all the test issues I was seeing:
Quoted 8 lines · Marc Zyngier
Owing to the ID registers being global to the VM, there is no point in computing them more than once. However, recent changes making use of
kvm_set_vm_id_reg()outlined that we repeatedly hammer the ID registers when we shouldn't.Gate the ID reg update on the VM having never run.
[...]
Applied to fixes, thanks!
[1/1] KVM: arm64: Finalize ID registers only once per VM
commit: 0f559cd91e37b7978e4198ca2fbf7eb95df11361
Cheers,
M.
Signature · 1 line
Without deviation from the norm, progress is not possible.