mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	KVM: LAPIC: Mark hrtimer to expire in hard interrupt context
On PREEMPT_RT enabled kernels unmarked hrtimers are moved into soft interrupt expiry mode by default. While that's not a functional requirement for the KVM local APIC timer emulation, it's a latency issue which can be avoided by marking the timer so hard interrupt context expiry is enforced. No functional change. [ tglx: Split out from larger combo patch. Add changelog. ] Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Paolo Bonzini <pbonzini@redhat.com> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lkml.kernel.org/r/20190726185753.363363474@linutronix.de
This commit is contained in:
		
							parent
							
								
									d2ab4cf494
								
							
						
					
					
						commit
						2c0d278f32
					
				
					 1 changed files with 3 additions and 3 deletions
				
			
		| 
						 | 
					@ -1601,7 +1601,7 @@ static void start_sw_tscdeadline(struct kvm_lapic *apic)
 | 
				
			||||||
	    likely(ns > apic->lapic_timer.timer_advance_ns)) {
 | 
						    likely(ns > apic->lapic_timer.timer_advance_ns)) {
 | 
				
			||||||
		expire = ktime_add_ns(now, ns);
 | 
							expire = ktime_add_ns(now, ns);
 | 
				
			||||||
		expire = ktime_sub_ns(expire, ktimer->timer_advance_ns);
 | 
							expire = ktime_sub_ns(expire, ktimer->timer_advance_ns);
 | 
				
			||||||
		hrtimer_start(&ktimer->timer, expire, HRTIMER_MODE_ABS);
 | 
							hrtimer_start(&ktimer->timer, expire, HRTIMER_MODE_ABS_HARD);
 | 
				
			||||||
	} else
 | 
						} else
 | 
				
			||||||
		apic_timer_expired(apic);
 | 
							apic_timer_expired(apic);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2302,7 +2302,7 @@ int kvm_create_lapic(struct kvm_vcpu *vcpu, int timer_advance_ns)
 | 
				
			||||||
	apic->vcpu = vcpu;
 | 
						apic->vcpu = vcpu;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	hrtimer_init(&apic->lapic_timer.timer, CLOCK_MONOTONIC,
 | 
						hrtimer_init(&apic->lapic_timer.timer, CLOCK_MONOTONIC,
 | 
				
			||||||
		     HRTIMER_MODE_ABS);
 | 
							     HRTIMER_MODE_ABS_HARD);
 | 
				
			||||||
	apic->lapic_timer.timer.function = apic_timer_fn;
 | 
						apic->lapic_timer.timer.function = apic_timer_fn;
 | 
				
			||||||
	if (timer_advance_ns == -1) {
 | 
						if (timer_advance_ns == -1) {
 | 
				
			||||||
		apic->lapic_timer.timer_advance_ns = LAPIC_TIMER_ADVANCE_ADJUST_INIT;
 | 
							apic->lapic_timer.timer_advance_ns = LAPIC_TIMER_ADVANCE_ADJUST_INIT;
 | 
				
			||||||
| 
						 | 
					@ -2487,7 +2487,7 @@ void __kvm_migrate_apic_timer(struct kvm_vcpu *vcpu)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	timer = &vcpu->arch.apic->lapic_timer.timer;
 | 
						timer = &vcpu->arch.apic->lapic_timer.timer;
 | 
				
			||||||
	if (hrtimer_cancel(timer))
 | 
						if (hrtimer_cancel(timer))
 | 
				
			||||||
		hrtimer_start_expires(timer, HRTIMER_MODE_ABS);
 | 
							hrtimer_start_expires(timer, HRTIMER_MODE_ABS_HARD);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue