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 <hikalium@xxxxxxxxxxxx> > --- > > 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){} > +#endif /* CONFIG_KVM_VIRT_SUSPEND_TIMING */ > + > #endif > diff --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