svn commit: r273203 - in projects/bhyve_svm: sys/amd64/vmm usr.sbin/bhyve
Neel Natu
neel at FreeBSD.org
Fri Oct 17 03:04:40 UTC 2014
Author: neel
Date: Fri Oct 17 03:04:38 2014
New Revision: 273203
URL: https://svnweb.freebsd.org/changeset/base/273203
Log:
Hide extended PerfCtr MSRs on AMD processors by clearing bits 23, 24 and 28 in
CPUID.80000001H:ECX.
Handle accesses to PerfCtrX and PerfEvtSelX MSRs by ignoring writes and
returning 0 on reads.
This further reduces the number of unimplemented MSRs hit by a Linux guest
during boot.
Modified:
projects/bhyve_svm/sys/amd64/vmm/x86.c
projects/bhyve_svm/usr.sbin/bhyve/xmsr.c
Modified: projects/bhyve_svm/sys/amd64/vmm/x86.c
==============================================================================
--- projects/bhyve_svm/sys/amd64/vmm/x86.c Fri Oct 17 02:11:09 2014 (r273202)
+++ projects/bhyve_svm/sys/amd64/vmm/x86.c Fri Oct 17 03:04:38 2014 (r273203)
@@ -159,6 +159,14 @@ x86_emulate_cpuid(struct vm *vm, int vcp
regs[2] &= ~(AMDID2_SVM | AMDID2_TOPOLOGY);
/*
+ * Don't advertise extended performance counter MSRs
+ * to the guest.
+ */
+ regs[2] &= ~AMDID2_PCXC;
+ regs[2] &= ~AMDID2_PNXC;
+ regs[2] &= ~AMDID2_PTSCEL2I;
+
+ /*
* Hide rdtscp/ia32_tsc_aux until we know how
* to deal with them.
*/
Modified: projects/bhyve_svm/usr.sbin/bhyve/xmsr.c
==============================================================================
--- projects/bhyve_svm/usr.sbin/bhyve/xmsr.c Fri Oct 17 02:11:09 2014 (r273202)
+++ projects/bhyve_svm/usr.sbin/bhyve/xmsr.c Fri Oct 17 03:04:38 2014 (r273203)
@@ -68,6 +68,21 @@ emulate_wrmsr(struct vmctx *ctx, int vcp
* Ignore writes to hardware configuration MSR.
*/
return (0);
+
+ case MSR_PERFEVSEL0:
+ case MSR_PERFEVSEL1:
+ case MSR_PERFEVSEL2:
+ case MSR_PERFEVSEL3:
+ /* Ignore writes to the PerfEvtSel MSRs */
+ return (0);
+
+ case MSR_K7_PERFCTR0:
+ case MSR_K7_PERFCTR1:
+ case MSR_K7_PERFCTR2:
+ case MSR_K7_PERFCTR3:
+ /* Ignore writes to the PerfCtr MSRs */
+ return (0);
+
default:
break;
}
@@ -111,6 +126,28 @@ emulate_rdmsr(struct vmctx *ctx, int vcp
*val = 0x01000010; /* Reset value */
*val |= 1 << 9; /* MONITOR/MWAIT disable */
break;
+
+ case MSR_PERFEVSEL0:
+ case MSR_PERFEVSEL1:
+ case MSR_PERFEVSEL2:
+ case MSR_PERFEVSEL3:
+ /*
+ * PerfEvtSel MSRs are not properly virtualized so just
+ * return zero.
+ */
+ *val = 0;
+ break;
+
+ case MSR_K7_PERFCTR0:
+ case MSR_K7_PERFCTR1:
+ case MSR_K7_PERFCTR2:
+ case MSR_K7_PERFCTR3:
+ /*
+ * PerfCtr MSRs are not properly virtualized so just
+ * return zero.
+ */
+ *val = 0;
+ break;
default:
break;
}
More information about the svn-src-projects
mailing list