diff options
| author | Borislav Petkov <bp@suse.de> | 2021-03-18 18:43:11 +0300 | 
|---|---|---|
| committer | Borislav Petkov <bp@suse.de> | 2021-03-18 18:43:11 +0300 | 
| commit | afb4a37778491eae010a43edebea32ff2d45f01c (patch) | |
| tree | c40bcc6143e5542134477dd96a108d24b1f9074f /arch/x86/kvm/lapic.c | |
| parent | 229164175ff0c61ff581e6bf37fbfcb608b6e9bb (diff) | |
| parent | 1e28eed17697bcf343c6743f0028cc3b5dd88bf0 (diff) | |
| download | linux-afb4a37778491eae010a43edebea32ff2d45f01c.tar.xz | |
Merge tag 'v5.12-rc3' into x86/seves
Pick up dependent SEV-ES urgent changes which went into -rc3 to base new
work ontop.
Signed-off-by: Borislav Petkov <bp@suse.de>
Diffstat (limited to 'arch/x86/kvm/lapic.c')
| -rw-r--r-- | arch/x86/kvm/lapic.c | 12 | 
1 files changed, 11 insertions, 1 deletions
diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c index 45d40bfacb7c..cc369b9ad8f1 100644 --- a/arch/x86/kvm/lapic.c +++ b/arch/x86/kvm/lapic.c @@ -1642,7 +1642,16 @@ static void apic_timer_expired(struct kvm_lapic *apic, bool from_timer_fn)  	}  	if (kvm_use_posted_timer_interrupt(apic->vcpu)) { -		kvm_wait_lapic_expire(vcpu); +		/* +		 * Ensure the guest's timer has truly expired before posting an +		 * interrupt.  Open code the relevant checks to avoid querying +		 * lapic_timer_int_injected(), which will be false since the +		 * interrupt isn't yet injected.  Waiting until after injecting +		 * is not an option since that won't help a posted interrupt. +		 */ +		if (vcpu->arch.apic->lapic_timer.expired_tscdeadline && +		    vcpu->arch.apic->lapic_timer.timer_advance_ns) +			__kvm_wait_lapic_expire(vcpu);  		kvm_apic_inject_pending_timer_irqs(apic);  		return;  	} @@ -2595,6 +2604,7 @@ int kvm_apic_set_state(struct kvm_vcpu *vcpu, struct kvm_lapic_state *s)  	apic_update_ppr(apic);  	hrtimer_cancel(&apic->lapic_timer.timer); +	apic->lapic_timer.expired_tscdeadline = 0;  	apic_update_lvtt(apic);  	apic_manage_nmi_watchdog(apic, kvm_lapic_get_reg(apic, APIC_LVT0));  	update_divide_count(apic);  | 
