diff options
author | Radim Krčmář <rkrcmar@redhat.com> | 2017-02-15 22:27:20 +0300 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2017-02-16 20:42:17 +0300 |
commit | 4306f200c71b959c44c32c8a0048fd5857a357c5 (patch) | |
tree | d617e885fd9bee0a0a1658040ac85c6251d1a73d | |
parent | 681bcea802f2bf0a28cdf0fd0f813de7bb5cd3c7 (diff) | |
download | linux-4306f200c71b959c44c32c8a0048fd5857a357c5.tar.xz |
ptp_kvm: try to detect hypercall availability
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>
-rw-r--r-- | drivers/ptp/ptp_kvm.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/ptp/ptp_kvm.c b/drivers/ptp/ptp_kvm.c index 0a54e8326a90..09b4df74291e 100644 --- a/drivers/ptp/ptp_kvm.c +++ b/drivers/ptp/ptp_kvm.c @@ -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); |