From: Avi Kivity <[email protected]>

This reverts commits b8a578a03d18fab78ea1f79886e32c90f1d071a1 and
2616ac0be4b12bf31cfe8880a5b21c5a2da7d150.

Turns out this doesn't actually save any math or locking, name
is chosen rather poorly, it doesn't match the existing kernel
APIs, and requires kvm-kmod changes.

Signed-off-by: Zachary Amsden <[email protected]>
Signed-off-by: Avi Kivity <[email protected]>

diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 6e6659d..a810d47 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -895,6 +895,16 @@ static void kvm_set_time_scale(uint32_t tsc_khz, struct 
pvclock_vcpu_time_info *
                 hv_clock->tsc_to_system_mul);
 }
 
+static inline u64 get_kernel_ns(void)
+{
+       struct timespec ts;
+
+       WARN_ON(preemptible());
+       ktime_get_ts(&ts);
+       monotonic_to_bootbased(&ts);
+       return timespec_to_ns(&ts);
+}
+
 static DEFINE_PER_CPU(unsigned long, cpu_tsc_khz);
 
 static inline int kvm_tsc_changes_freq(void)
@@ -928,7 +938,7 @@ void kvm_write_tsc(struct kvm_vcpu *vcpu, u64 data)
 
        spin_lock_irqsave(&kvm->arch.tsc_write_lock, flags);
        offset = data - native_read_tsc();
-       ns = getnsboottime();
+       ns = get_kernel_ns();
        elapsed = ns - kvm->arch.last_tsc_nsec;
        sdiff = data - kvm->arch.last_tsc_write;
        if (sdiff < 0)
@@ -981,7 +991,7 @@ static int kvm_write_guest_time(struct kvm_vcpu *v)
        /* Keep irq disabled to prevent changes to the clock */
        local_irq_save(flags);
        kvm_get_msr(v, MSR_IA32_TSC, &tsc_timestamp);
-       kernel_ns = getnsboottime();
+       kernel_ns = get_kernel_ns();
        this_tsc_khz = __get_cpu_var(cpu_tsc_khz);
        local_irq_restore(flags);
 
@@ -3349,7 +3359,7 @@ long kvm_arch_vm_ioctl(struct file *filp,
                        goto out;
 
                r = 0;
-               now_ns = getnsboottime();
+               now_ns = get_kernel_ns();
                delta = user_ns.clock - now_ns;
                kvm->arch.kvmclock_offset = delta;
                break;
@@ -3358,7 +3368,7 @@ long kvm_arch_vm_ioctl(struct file *filp,
                struct kvm_clock_data user_ns;
                u64 now_ns;
 
-               now_ns = getnsboottime();
+               now_ns = get_kernel_ns();
                user_ns.clock = kvm->arch.kvmclock_offset + now_ns;
                user_ns.flags = 0;
 
diff --git a/include/linux/time.h b/include/linux/time.h
index 909e62a..9f15ac7 100644
--- a/include/linux/time.h
+++ b/include/linux/time.h
@@ -160,7 +160,6 @@ extern void getnstimeofday(struct timespec *tv);
 extern void getrawmonotonic(struct timespec *ts);
 extern void getboottime(struct timespec *ts);
 extern void monotonic_to_bootbased(struct timespec *ts);
-extern s64 getnsboottime(void);
 
 extern struct timespec timespec_trunc(struct timespec t, unsigned gran);
 extern int timekeeping_valid_for_hres(void);
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index 77e930d..49010d8 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -284,33 +284,6 @@ void ktime_get_ts(struct timespec *ts)
 }
 EXPORT_SYMBOL_GPL(ktime_get_ts);
 
-
-/**
- * getnsboottime - get the bootbased clock in nsec format
- *
- * The function calculates the bootbased clock from the realtime
- * clock and the wall_to_monotonic offset and stores the result
- * in normalized timespec format in the variable pointed to by @ts.
- */
-s64 getnsboottime(void)
-{
-       unsigned int seq;
-       s64 secs, nsecs;
-
-       WARN_ON(timekeeping_suspended);
-
-       do {
-               seq = read_seqbegin(&xtime_lock);
-               secs = xtime.tv_sec + wall_to_monotonic.tv_sec;
-               secs += total_sleep_time.tv_sec;
-               nsecs = xtime.tv_nsec + wall_to_monotonic.tv_nsec;
-               nsecs += total_sleep_time.tv_nsec + timekeeping_get_ns();
-
-       } while (read_seqretry(&xtime_lock, seq));
-       return nsecs + (secs * NSEC_PER_SEC);
-}
-EXPORT_SYMBOL_GPL(getnsboottime);
-
 /**
  * do_gettimeofday - Returns the time of day in a timeval
  * @tv:                pointer to the timeval to be set
--
To unsubscribe from this list: send the line "unsubscribe kvm-commits" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to