aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/kvmclock.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/kvmclock.c')
-rw-r--r--arch/x86/kernel/kvmclock.c20
1 files changed, 8 insertions, 12 deletions
diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c
index d9156ceecdff..42caaef897c8 100644
--- a/arch/x86/kernel/kvmclock.c
+++ b/arch/x86/kernel/kvmclock.c
@@ -59,13 +59,12 @@ static void kvm_get_wallclock(struct timespec *now)
59 59
60 native_write_msr(msr_kvm_wall_clock, low, high); 60 native_write_msr(msr_kvm_wall_clock, low, high);
61 61
62 preempt_disable(); 62 cpu = get_cpu();
63 cpu = smp_processor_id();
64 63
65 vcpu_time = &hv_clock[cpu].pvti; 64 vcpu_time = &hv_clock[cpu].pvti;
66 pvclock_read_wallclock(&wall_clock, vcpu_time, now); 65 pvclock_read_wallclock(&wall_clock, vcpu_time, now);
67 66
68 preempt_enable(); 67 put_cpu();
69} 68}
70 69
71static int kvm_set_wallclock(const struct timespec *now) 70static int kvm_set_wallclock(const struct timespec *now)
@@ -107,11 +106,10 @@ static unsigned long kvm_get_tsc_khz(void)
107 int cpu; 106 int cpu;
108 unsigned long tsc_khz; 107 unsigned long tsc_khz;
109 108
110 preempt_disable(); 109 cpu = get_cpu();
111 cpu = smp_processor_id();
112 src = &hv_clock[cpu].pvti; 110 src = &hv_clock[cpu].pvti;
113 tsc_khz = pvclock_tsc_khz(src); 111 tsc_khz = pvclock_tsc_khz(src);
114 preempt_enable(); 112 put_cpu();
115 return tsc_khz; 113 return tsc_khz;
116} 114}
117 115
@@ -263,7 +261,6 @@ void __init kvmclock_init(void)
263#endif 261#endif
264 kvm_get_preset_lpj(); 262 kvm_get_preset_lpj();
265 clocksource_register_hz(&kvm_clock, NSEC_PER_SEC); 263 clocksource_register_hz(&kvm_clock, NSEC_PER_SEC);
266 pv_info.paravirt_enabled = 1;
267 pv_info.name = "KVM"; 264 pv_info.name = "KVM";
268 265
269 if (kvm_para_has_feature(KVM_FEATURE_CLOCKSOURCE_STABLE_BIT)) 266 if (kvm_para_has_feature(KVM_FEATURE_CLOCKSOURCE_STABLE_BIT))
@@ -284,23 +281,22 @@ int __init kvm_setup_vsyscall_timeinfo(void)
284 281
285 size = PAGE_ALIGN(sizeof(struct pvclock_vsyscall_time_info)*NR_CPUS); 282 size = PAGE_ALIGN(sizeof(struct pvclock_vsyscall_time_info)*NR_CPUS);
286 283
287 preempt_disable(); 284 cpu = get_cpu();
288 cpu = smp_processor_id();
289 285
290 vcpu_time = &hv_clock[cpu].pvti; 286 vcpu_time = &hv_clock[cpu].pvti;
291 flags = pvclock_read_flags(vcpu_time); 287 flags = pvclock_read_flags(vcpu_time);
292 288
293 if (!(flags & PVCLOCK_TSC_STABLE_BIT)) { 289 if (!(flags & PVCLOCK_TSC_STABLE_BIT)) {
294 preempt_enable(); 290 put_cpu();
295 return 1; 291 return 1;
296 } 292 }
297 293
298 if ((ret = pvclock_init_vsyscall(hv_clock, size))) { 294 if ((ret = pvclock_init_vsyscall(hv_clock, size))) {
299 preempt_enable(); 295 put_cpu();
300 return ret; 296 return ret;
301 } 297 }
302 298
303 preempt_enable(); 299 put_cpu();
304 300
305 kvm_clock.archdata.vclock_mode = VCLOCK_PVCLOCK; 301 kvm_clock.archdata.vclock_mode = VCLOCK_PVCLOCK;
306#endif 302#endif