|
@@ -760,6 +760,21 @@ int kvm_get_dr(struct kvm_vcpu *vcpu, int dr, unsigned long *val)
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(kvm_get_dr);
|
|
|
|
|
|
+bool kvm_rdpmc(struct kvm_vcpu *vcpu)
|
|
|
+{
|
|
|
+ u32 ecx = kvm_register_read(vcpu, VCPU_REGS_RCX);
|
|
|
+ u64 data;
|
|
|
+ int err;
|
|
|
+
|
|
|
+ err = kvm_pmu_read_pmc(vcpu, ecx, &data);
|
|
|
+ if (err)
|
|
|
+ return err;
|
|
|
+ kvm_register_write(vcpu, VCPU_REGS_RAX, (u32)data);
|
|
|
+ kvm_register_write(vcpu, VCPU_REGS_RDX, data >> 32);
|
|
|
+ return err;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(kvm_rdpmc);
|
|
|
+
|
|
|
/*
|
|
|
* List of msr numbers which we expose to userspace through KVM_GET_MSRS
|
|
|
* and KVM_SET_MSRS, and KVM_GET_MSR_INDEX_LIST.
|