|
@@ -1495,6 +1495,8 @@ static void record_steal_time(struct kvm_vcpu *vcpu)
|
|
|
|
|
|
int kvm_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data)
|
|
|
{
|
|
|
+ bool pr = false;
|
|
|
+
|
|
|
switch (msr) {
|
|
|
case MSR_EFER:
|
|
|
return set_efer(vcpu, data);
|
|
@@ -1635,6 +1637,18 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data)
|
|
|
pr_unimpl(vcpu, "unimplemented perfctr wrmsr: "
|
|
|
"0x%x data 0x%llx\n", msr, data);
|
|
|
break;
|
|
|
+ case MSR_P6_PERFCTR0:
|
|
|
+ case MSR_P6_PERFCTR1:
|
|
|
+ pr = true;
|
|
|
+ case MSR_P6_EVNTSEL0:
|
|
|
+ case MSR_P6_EVNTSEL1:
|
|
|
+ if (kvm_pmu_msr(vcpu, msr))
|
|
|
+ return kvm_pmu_set_msr(vcpu, msr, data);
|
|
|
+
|
|
|
+ if (pr || data != 0)
|
|
|
+ pr_unimpl(vcpu, "disabled perfctr wrmsr: "
|
|
|
+ "0x%x data 0x%llx\n", msr, data);
|
|
|
+ break;
|
|
|
case MSR_K7_CLK_CTL:
|
|
|
/*
|
|
|
* Ignore all writes to this no longer documented MSR.
|
|
@@ -1835,6 +1849,14 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata)
|
|
|
case MSR_FAM10H_MMIO_CONF_BASE:
|
|
|
data = 0;
|
|
|
break;
|
|
|
+ case MSR_P6_PERFCTR0:
|
|
|
+ case MSR_P6_PERFCTR1:
|
|
|
+ case MSR_P6_EVNTSEL0:
|
|
|
+ case MSR_P6_EVNTSEL1:
|
|
|
+ if (kvm_pmu_msr(vcpu, msr))
|
|
|
+ return kvm_pmu_get_msr(vcpu, msr, pdata);
|
|
|
+ data = 0;
|
|
|
+ break;
|
|
|
case MSR_IA32_UCODE_REV:
|
|
|
data = 0x100000000ULL;
|
|
|
break;
|