|
@@ -2610,7 +2610,6 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
|
|
case KVM_CAP_PIT_STATE2:
|
|
case KVM_CAP_PIT_STATE2:
|
|
case KVM_CAP_SET_IDENTITY_MAP_ADDR:
|
|
case KVM_CAP_SET_IDENTITY_MAP_ADDR:
|
|
case KVM_CAP_XEN_HVM:
|
|
case KVM_CAP_XEN_HVM:
|
|
- case KVM_CAP_ADJUST_CLOCK:
|
|
|
|
case KVM_CAP_VCPU_EVENTS:
|
|
case KVM_CAP_VCPU_EVENTS:
|
|
case KVM_CAP_HYPERV:
|
|
case KVM_CAP_HYPERV:
|
|
case KVM_CAP_HYPERV_VAPIC:
|
|
case KVM_CAP_HYPERV_VAPIC:
|
|
@@ -2637,6 +2636,9 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
|
|
#endif
|
|
#endif
|
|
r = 1;
|
|
r = 1;
|
|
break;
|
|
break;
|
|
|
|
+ case KVM_CAP_ADJUST_CLOCK:
|
|
|
|
+ r = KVM_CLOCK_TSC_STABLE;
|
|
|
|
+ break;
|
|
case KVM_CAP_X86_SMM:
|
|
case KVM_CAP_X86_SMM:
|
|
/* SMBASE is usually relocated above 1M on modern chipsets,
|
|
/* SMBASE is usually relocated above 1M on modern chipsets,
|
|
* and SMM handlers might indeed rely on 4G segment limits,
|
|
* and SMM handlers might indeed rely on 4G segment limits,
|
|
@@ -4117,9 +4119,11 @@ long kvm_arch_vm_ioctl(struct file *filp,
|
|
struct kvm_clock_data user_ns;
|
|
struct kvm_clock_data user_ns;
|
|
u64 now_ns;
|
|
u64 now_ns;
|
|
|
|
|
|
- now_ns = get_kvmclock_ns(kvm);
|
|
|
|
|
|
+ local_irq_disable();
|
|
|
|
+ now_ns = __get_kvmclock_ns(kvm);
|
|
user_ns.clock = now_ns;
|
|
user_ns.clock = now_ns;
|
|
- user_ns.flags = 0;
|
|
|
|
|
|
+ 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));
|
|
memset(&user_ns.pad, 0, sizeof(user_ns.pad));
|
|
|
|
|
|
r = -EFAULT;
|
|
r = -EFAULT;
|