|
@@ -59,13 +59,12 @@ static void kvm_get_wallclock(struct timespec *now)
|
|
|
|
|
|
native_write_msr(msr_kvm_wall_clock, low, high);
|
|
|
|
|
|
- preempt_disable();
|
|
|
- cpu = smp_processor_id();
|
|
|
+ cpu = get_cpu();
|
|
|
|
|
|
vcpu_time = &hv_clock[cpu].pvti;
|
|
|
pvclock_read_wallclock(&wall_clock, vcpu_time, now);
|
|
|
|
|
|
- preempt_enable();
|
|
|
+ put_cpu();
|
|
|
}
|
|
|
|
|
|
static int kvm_set_wallclock(const struct timespec *now)
|
|
@@ -107,11 +106,10 @@ static unsigned long kvm_get_tsc_khz(void)
|
|
|
int cpu;
|
|
|
unsigned long tsc_khz;
|
|
|
|
|
|
- preempt_disable();
|
|
|
- cpu = smp_processor_id();
|
|
|
+ cpu = get_cpu();
|
|
|
src = &hv_clock[cpu].pvti;
|
|
|
tsc_khz = pvclock_tsc_khz(src);
|
|
|
- preempt_enable();
|
|
|
+ put_cpu();
|
|
|
return tsc_khz;
|
|
|
}
|
|
|
|
|
@@ -284,23 +282,22 @@ int __init kvm_setup_vsyscall_timeinfo(void)
|
|
|
|
|
|
size = PAGE_ALIGN(sizeof(struct pvclock_vsyscall_time_info)*NR_CPUS);
|
|
|
|
|
|
- preempt_disable();
|
|
|
- cpu = smp_processor_id();
|
|
|
+ cpu = get_cpu();
|
|
|
|
|
|
vcpu_time = &hv_clock[cpu].pvti;
|
|
|
flags = pvclock_read_flags(vcpu_time);
|
|
|
|
|
|
if (!(flags & PVCLOCK_TSC_STABLE_BIT)) {
|
|
|
- preempt_enable();
|
|
|
+ put_cpu();
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
if ((ret = pvclock_init_vsyscall(hv_clock, size))) {
|
|
|
- preempt_enable();
|
|
|
+ put_cpu();
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
- preempt_enable();
|
|
|
+ put_cpu();
|
|
|
|
|
|
kvm_clock.archdata.vclock_mode = VCLOCK_PVCLOCK;
|
|
|
#endif
|