Re: [v2 PATCH 3/4] x86/kvm: Add host side support for virtual suspend time injection
From: Thomas Gleixner <hidden>
Date: 2021-08-10 15:21:16
Also in:
lkml
On Fri, Aug 06 2021 at 19:07, Hikaru Nishida wrote:
This patch implements virtual suspend time injection support for kvm
git grep 'This patch' Documentation/process/
hosts. If this functionality is enabled and the guest requests it, the host will stop all the clocks observed by the guest during the host's suspension and report the duration of suspend to the guest through struct kvm_host_suspend_time to give a chance to adjust CLOCK_BOOTTIME to the guest. This mechanism can be used to align the guest's clock behavior to the hosts' ones. Signed-off-by: Hikaru Nishida <redacted> --- arch/x86/include/asm/kvm_host.h | 5 ++ arch/x86/kvm/Kconfig | 13 ++++ arch/x86/kvm/cpuid.c | 4 ++ arch/x86/kvm/x86.c | 109 +++++++++++++++++++++++++++++++- include/linux/kvm_host.h | 8 +++ kernel/time/timekeeping.c | 3 +
Please split this into adding the infrastructure and then implementing the x86 side of it.
+#ifdef CONFIG_KVM_VIRT_SUSPEND_TIMING +void kvm_arch_timekeeping_inject_sleeptime(const struct timespec64 *delta);
+#else
+static inline void kvm_arch_timekeeping_inject_sleeptime(const struct timespec64 *delta){}quoted hunk ↗ jump to hunk
+#endif /* CONFIG_KVM_VIRT_SUSPEND_TIMING */ + #endifdiff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index 233ceb6cce1f..3ac3fb479981 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c@@ -1797,6 +1797,9 @@ void timekeeping_resume(void) if (inject_sleeptime) { suspend_timing_needed = false; __timekeeping_inject_sleeptime(tk, &ts_delta); +#ifdef CONFIG_KVM_VIRT_SUSPEND_TIMING + kvm_arch_timekeeping_inject_sleeptime(&ts_delta); +#endif
which get's rid of these ugly ifdefs.
Also this is the wrong place because sleep time can be injected from
other places as well. This should be in __timekeeping_inject_sleeptime()
if at all.
Thanks,
tglx