lkml.org 
[lkml]   [2019]   [Aug]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:timers/core] KVM: LAPIC: Mark hrtimer to expire in hard interrupt context
    Commit-ID:  2c0d278f3293fc59da0d183075415ca1e8c93b40
    Gitweb: https://git.kernel.org/tip/2c0d278f3293fc59da0d183075415ca1e8c93b40
    Author: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    AuthorDate: Fri, 26 Jul 2019 20:30:55 +0200
    Committer: Thomas Gleixner <tglx@linutronix.de>
    CommitDate: Thu, 1 Aug 2019 20:51:20 +0200

    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



    ---
    arch/x86/kvm/lapic.c | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)

    diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
    index 0aa158657f20..b9e516099d07 100644
    --- a/arch/x86/kvm/lapic.c
    +++ b/arch/x86/kvm/lapic.c
    @@ -1601,7 +1601,7 @@ static void start_sw_tscdeadline(struct kvm_lapic *apic)
    likely(ns > apic->lapic_timer.timer_advance_ns)) {
    expire = ktime_add_ns(now, 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
    apic_timer_expired(apic);

    @@ -2302,7 +2302,7 @@ int kvm_create_lapic(struct kvm_vcpu *vcpu, int timer_advance_ns)
    apic->vcpu = vcpu;

    hrtimer_init(&apic->lapic_timer.timer, CLOCK_MONOTONIC,
    - HRTIMER_MODE_ABS);
    + HRTIMER_MODE_ABS_HARD);
    apic->lapic_timer.timer.function = apic_timer_fn;
    if (timer_advance_ns == -1) {
    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;
    if (hrtimer_cancel(timer))
    - hrtimer_start_expires(timer, HRTIMER_MODE_ABS);
    + hrtimer_start_expires(timer, HRTIMER_MODE_ABS_HARD);
    }

    /*
    \
     
     \ /
      Last update: 2019-08-01 21:01    [W:4.212 / U:0.524 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site