Unfortunately there seems to be no standard interface to read the pmtimer... Index: kvm-userspace.tip/libkvm/libkvm.c =================================================================== --- kvm-userspace.tip.orig/libkvm/libkvm.c +++ kvm-userspace.tip/libkvm/libkvm.c @@ -794,6 +794,17 @@ int kvm_set_mpstate(kvm_context_t kvm, i return -ENOSYS; } #endif +#ifdef KVM_CAP_GET_PMTIMER +int kvm_get_pmtimer(kvm_context_t kvm, struct kvm_pmtimer *pmtmr) +{ + int r; + + r = ioctl(kvm->fd, KVM_CHECK_EXTENSION, KVM_CAP_GET_PMTIMER); + if (r > 0) + return ioctl(kvm->vm_fd, KVM_GET_PMTIMER, pmtmr); + return -ENOSYS; +} +#endif static int handle_mmio(kvm_context_t kvm, struct kvm_run *kvm_run) { Index: kvm-userspace.tip/libkvm/libkvm.h =================================================================== --- kvm-userspace.tip.orig/libkvm/libkvm.h +++ kvm-userspace.tip/libkvm/libkvm.h @@ -325,6 +325,13 @@ static inline int kvm_reset_mpstate(kvm_ } #endif +#ifdef KVM_CAP_GET_PMTIMER +/*! + * \brief Read host pmtimer value + */ +int kvm_get_pmtimer(kvm_context_t kvm, struct kvm_pmtimer *pmtmr); +#endif + /*! * \brief Simulate an external vectored interrupt * --