|
@@ -487,6 +487,7 @@ void kvm_timer_vcpu_load(struct kvm_vcpu *vcpu)
|
|
|
{
|
|
|
struct arch_timer_cpu *timer = &vcpu->arch.timer_cpu;
|
|
|
struct arch_timer_context *vtimer = vcpu_vtimer(vcpu);
|
|
|
+ struct arch_timer_context *ptimer = vcpu_ptimer(vcpu);
|
|
|
|
|
|
if (unlikely(!timer->enabled))
|
|
|
return;
|
|
@@ -502,6 +503,10 @@ void kvm_timer_vcpu_load(struct kvm_vcpu *vcpu)
|
|
|
|
|
|
/* Set the background timer for the physical timer emulation. */
|
|
|
phys_timer_emulate(vcpu);
|
|
|
+
|
|
|
+ /* If the timer fired while we weren't running, inject it now */
|
|
|
+ if (kvm_timer_should_fire(ptimer) != ptimer->irq.level)
|
|
|
+ kvm_timer_update_irq(vcpu, !ptimer->irq.level, ptimer);
|
|
|
}
|
|
|
|
|
|
bool kvm_timer_should_notify_user(struct kvm_vcpu *vcpu)
|