diff options
Diffstat (limited to 'arch/x86/kernel/kvmclock.c')
-rw-r--r-- | arch/x86/kernel/kvmclock.c | 20 |
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 | ||
71 | static int kvm_set_wallclock(const struct timespec *now) | 70 | static 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 |