Patchwork [21/28] KVM: arm/arm64: arch_timer: Simplify kvm_timer_vcpu_terminate

mail settings
Submitter Marc Zyngier
Date Dec. 19, 2018, 6:03 p.m.
Message ID <>
Download mbox | patch
Permalink /patch/686481/
State New
Headers show


Marc Zyngier - Dec. 19, 2018, 6:03 p.m.
From: Christoffer Dall <>

kvm_timer_vcpu_terminate can only be called in two scenarios:

 1. As part of cleanup during a failed VCPU create
 2. As part of freeing the whole VM (struct kvm refcount == 0)

In the first case, we cannot have programmed any timers or mapped any
IRQs, and therefore we do not have to cancel anything or unmap anything.

In the second case, the VCPU will have gone through kvm_timer_vcpu_put,
which will have canceled the emulated physical timer's hrtimer, and we
do not need to that here as well.  We also do not care if the irq is
recorded as mapped or not in the VGIC data structure, because the whole
VM is going away.  That leaves us only with having to ensure that we
cancel the bg_timer if we were blocking the last time we called

Signed-off-by: Christoffer Dall <>
Signed-off-by: Marc Zyngier <>
 virt/kvm/arm/arch_timer.c | 3 ---
 1 file changed, 3 deletions(-)


diff --git a/virt/kvm/arm/arch_timer.c b/virt/kvm/arm/arch_timer.c
index da261f5e2a91..b07ac4614e1c 100644
--- a/virt/kvm/arm/arch_timer.c
+++ b/virt/kvm/arm/arch_timer.c
@@ -772,11 +772,8 @@  int kvm_timer_hyp_init(bool has_gic)
 void kvm_timer_vcpu_terminate(struct kvm_vcpu *vcpu)
 	struct arch_timer_cpu *timer = &vcpu->arch.timer_cpu;
-	struct arch_timer_context *vtimer = vcpu_vtimer(vcpu);
-	soft_timer_cancel(&timer->phys_timer);
-	kvm_vgic_unmap_phys_irq(vcpu, vtimer->irq.irq);
 static bool timer_irqs_are_valid(struct kvm_vcpu *vcpu)