]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
ptp_kvm: try to detect hypercall availability
authorRadim Krčmář <rkrcmar@redhat.com>
Wed, 15 Feb 2017 19:27:20 +0000 (20:27 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 16 Feb 2017 17:42:17 +0000 (18:42 +0100)
No point in registering the device if it cannot work.
The hypercall does not advertise itself, so we have to call it.

Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
drivers/ptp/ptp_kvm.c

index 0a54e8326a901698645a4e668f1b7cbc973d9e60..09b4df74291e2618e95e842dc4f5d7bdb178ec93 100644 (file)
@@ -176,12 +176,19 @@ static void __exit ptp_kvm_exit(void)
 
 static int __init ptp_kvm_init(void)
 {
+       long ret;
+
        clock_pair_gpa = slow_virt_to_phys(&clock_pair);
        hv_clock = pvclock_pvti_cpu0_va();
 
        if (!hv_clock)
                return -ENODEV;
 
+       ret = kvm_hypercall2(KVM_HC_CLOCK_PAIRING, clock_pair_gpa,
+                       KVM_CLOCK_PAIRING_WALLCLOCK);
+       if (ret == -KVM_ENOSYS || ret == -KVM_EOPNOTSUPP)
+               return -ENODEV;
+
        kvm_ptp_clock.caps = ptp_kvm_caps;
 
        kvm_ptp_clock.ptp_clock = ptp_clock_register(&kvm_ptp_clock.caps, NULL);