[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v4 10/30] KVM: x86: Fold __get_kvmclock() into get_kvmclock()



From: David Woodhouse <dwmw@xxxxxxxxxxxx>

There is no need for the separate __get_kvmclock() helper; just inline
its body into get_kvmclock() within the seqcount retry loop.

No functional change.

Signed-off-by: David Woodhouse <dwmw@xxxxxxxxxxxx>
---
 arch/x86/kvm/x86.c | 63 +++++++++++++++++++++-------------------------
 1 file changed, 28 insertions(+), 35 deletions(-)

diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index ccdfd3fa3402..6f660c3210ee 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -3200,50 +3200,43 @@ static unsigned long get_cpu_tsc_khz(void)
                return __this_cpu_read(cpu_tsc_khz);
 }
 
-/* Called within read_seqcount_begin/retry for kvm->pvclock_sc.  */
-static void __get_kvmclock(struct kvm *kvm, struct kvm_clock_data *data)
+static void get_kvmclock(struct kvm *kvm, struct kvm_clock_data *data)
 {
        struct kvm_arch *ka = &kvm->arch;
        struct pvclock_vcpu_time_info hv_clock;
+       unsigned int seq;
 
-       /* both __this_cpu_read() and rdtsc() should be on the same cpu */
-       get_cpu();
+       do {
+               seq = read_seqcount_begin(&ka->pvclock_sc);
 
-       data->flags = 0;
-       if (ka->use_master_clock &&
-           (static_cpu_has(X86_FEATURE_CONSTANT_TSC) || 
__this_cpu_read(cpu_tsc_khz))) {
+               /* both __this_cpu_read() and rdtsc() should be on the same cpu 
*/
+               get_cpu();
+
+               data->flags = 0;
+               if (ka->use_master_clock &&
+                   (static_cpu_has(X86_FEATURE_CONSTANT_TSC) || 
__this_cpu_read(cpu_tsc_khz))) {
 #ifdef CONFIG_X86_64
-               struct timespec64 ts;
+                       struct timespec64 ts;
 
-               if (kvm_get_walltime_and_clockread(&ts, &data->host_tsc)) {
-                       data->realtime = ts.tv_nsec + NSEC_PER_SEC * ts.tv_sec;
-                       data->flags |= KVM_CLOCK_REALTIME | KVM_CLOCK_HOST_TSC;
-               } else
+                       if (kvm_get_walltime_and_clockread(&ts, 
&data->host_tsc)) {
+                               data->realtime = ts.tv_nsec + NSEC_PER_SEC * 
ts.tv_sec;
+                               data->flags |= KVM_CLOCK_REALTIME | 
KVM_CLOCK_HOST_TSC;
+                       } else
 #endif
-               data->host_tsc = rdtsc();
-
-               data->flags |= KVM_CLOCK_TSC_STABLE;
-               hv_clock.tsc_timestamp = ka->master_cycle_now;
-               hv_clock.system_time = ka->master_kernel_ns + 
ka->kvmclock_offset;
-               kvm_get_time_scale(NSEC_PER_SEC, get_cpu_tsc_khz() * 1000LL,
-                                  &hv_clock.tsc_shift,
-                                  &hv_clock.tsc_to_system_mul);
-               data->clock = __pvclock_read_cycles(&hv_clock, data->host_tsc);
-       } else {
-               data->clock = get_kvmclock_base_ns() + ka->kvmclock_offset;
-       }
-
-       put_cpu();
-}
-
-static void get_kvmclock(struct kvm *kvm, struct kvm_clock_data *data)
-{
-       struct kvm_arch *ka = &kvm->arch;
-       unsigned seq;
+                       data->host_tsc = rdtsc();
+
+                       data->flags |= KVM_CLOCK_TSC_STABLE;
+                       hv_clock.tsc_timestamp = ka->master_cycle_now;
+                       hv_clock.system_time = ka->master_kernel_ns + 
ka->kvmclock_offset;
+                       kvm_get_time_scale(NSEC_PER_SEC, get_cpu_tsc_khz() * 
1000LL,
+                                          &hv_clock.tsc_shift,
+                                          &hv_clock.tsc_to_system_mul);
+                       data->clock = __pvclock_read_cycles(&hv_clock, 
data->host_tsc);
+               } else {
+                       data->clock = get_kvmclock_base_ns() + 
ka->kvmclock_offset;
+               }
 
-       do {
-               seq = read_seqcount_begin(&ka->pvclock_sc);
-               __get_kvmclock(kvm, data);
+               put_cpu();
        } while (read_seqcount_retry(&ka->pvclock_sc, seq));
 }
 
-- 
2.51.0




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.