• Steven Rostedt's avatar
    KVM: Remove HIGH_RES_TIMERS dependency · 59cbd4ee
    Steven Rostedt authored
    Commit 92b5265d ("KVM: Depend on HIGH_RES_TIMERS") added a dependency
    to high resolution timers with the comment:
    
        KVM lapic timer and tsc deadline timer based on hrtimer,
        setting a leftmost node to rb tree and then do hrtimer reprogram.
        If hrtimer not configured as high resolution, hrtimer_enqueue_reprogram
        do nothing and then make kvm lapic timer and tsc deadline timer fail.
    
    That was back in 2012, where hrtimer_start_range_ns() would do the
    reprogramming with hrtimer_enqueue_reprogram(). But as that was a nop with
    high resolution timers disabled, this did not work. But a lot has changed
    in the last 12 years.
    
    For example, commit 49a2a075 ("hrtimer: Kick lowres dynticks targets on
    timer enqueue") modifies __hrtimer_start_range_ns() to work with low res
    timers. There's been lots of other changes that make low res work.
    
    ChromeOS has tested this before as well, and it hasn't seen any issues
    with running KVM with high res timers disabled.  There could be problems,
    especially at low HZ, for guests that do not support kvmclock and rely
    on precise delivery of periodic timers to keep their clock running.
    This can be the APIC timer (provided by the kernel), the RTC (provided
    by userspace), or the i8254 (choice of kernel/userspace).  These guests
    are few and far between these days, and in the case of the APIC timer +
    Intel hosts we can use the preemption timer (which is TSC-based and has
    better latency _and_ accuracy).
    
    In KVM, only x86 is requiring CONFIG_HIGH_RES_TIMERS; perhaps a "depends
    on HIGH_RES_TIMERS || EXPERT" could be added to virt/kvm, or a pr_warn
    could be added to kvm_init if HIGH_RES_TIMERS are not enabled.  But in
    general, it seems that there must be other code in the kernel (maybe
    sound/?) that is relying on having high-enough HZ or hrtimers but that's
    not documented anywhere.  Whenever you disable it you probably need to
    know what you're doing and what your workload is; so the dependency is
    not particularly interesting, and we can just remove it.
    Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
    Message-ID: <20240821095127.45d17b19@gandalf.local.home>
    [Added the last two paragraphs to the commit message. - Paolo]
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    59cbd4ee
Kconfig 6.48 KB