|
@@ -1759,7 +1759,7 @@ static void kvm_gen_update_masterclock(struct kvm *kvm)
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
-static u64 __get_kvmclock_ns(struct kvm *kvm)
|
|
|
+u64 get_kvmclock_ns(struct kvm *kvm)
|
|
|
{
|
|
|
struct kvm_arch *ka = &kvm->arch;
|
|
|
struct pvclock_vcpu_time_info hv_clock;
|
|
@@ -1780,18 +1780,6 @@ static u64 __get_kvmclock_ns(struct kvm *kvm)
|
|
|
return __pvclock_read_cycles(&hv_clock, rdtsc());
|
|
|
}
|
|
|
|
|
|
-u64 get_kvmclock_ns(struct kvm *kvm)
|
|
|
-{
|
|
|
- unsigned long flags;
|
|
|
- s64 ns;
|
|
|
-
|
|
|
- local_irq_save(flags);
|
|
|
- ns = __get_kvmclock_ns(kvm);
|
|
|
- local_irq_restore(flags);
|
|
|
-
|
|
|
- return ns;
|
|
|
-}
|
|
|
-
|
|
|
static void kvm_setup_pvclock_page(struct kvm_vcpu *v)
|
|
|
{
|
|
|
struct kvm_vcpu_arch *vcpu = &v->arch;
|
|
@@ -4202,10 +4190,8 @@ long kvm_arch_vm_ioctl(struct file *filp,
|
|
|
goto out;
|
|
|
|
|
|
r = 0;
|
|
|
- local_irq_disable();
|
|
|
- now_ns = __get_kvmclock_ns(kvm);
|
|
|
+ now_ns = get_kvmclock_ns(kvm);
|
|
|
kvm->arch.kvmclock_offset += user_ns.clock - now_ns;
|
|
|
- local_irq_enable();
|
|
|
kvm_gen_update_masterclock(kvm);
|
|
|
break;
|
|
|
}
|
|
@@ -4213,11 +4199,9 @@ long kvm_arch_vm_ioctl(struct file *filp,
|
|
|
struct kvm_clock_data user_ns;
|
|
|
u64 now_ns;
|
|
|
|
|
|
- local_irq_disable();
|
|
|
- now_ns = __get_kvmclock_ns(kvm);
|
|
|
+ now_ns = get_kvmclock_ns(kvm);
|
|
|
user_ns.clock = now_ns;
|
|
|
user_ns.flags = kvm->arch.use_master_clock ? KVM_CLOCK_TSC_STABLE : 0;
|
|
|
- local_irq_enable();
|
|
|
memset(&user_ns.pad, 0, sizeof(user_ns.pad));
|
|
|
|
|
|
r = -EFAULT;
|