svn commit: r275965 - head/sys/amd64/vmm/intel

Neel Natu neel at FreeBSD.org
Sat Dec 20 19:47:52 UTC 2014


Author: neel
Date: Sat Dec 20 19:47:51 2014
New Revision: 275965
URL: https://svnweb.freebsd.org/changeset/base/275965

Log:
  Emulate writes to the IA32_MISC_ENABLE MSR.
  
  PR:		196093
  Reported by:	db
  Tested by:	db
  Discussed with:	grehan
  MFC after:	1 week

Modified:
  head/sys/amd64/vmm/intel/vmx_msr.c

Modified: head/sys/amd64/vmm/intel/vmx_msr.c
==============================================================================
--- head/sys/amd64/vmm/intel/vmx_msr.c	Sat Dec 20 19:41:31 2014	(r275964)
+++ head/sys/amd64/vmm/intel/vmx_msr.c	Sat Dec 20 19:47:51 2014	(r275965)
@@ -376,9 +376,31 @@ vmx_rdmsr(struct vmx *vmx, int vcpuid, u
 int
 vmx_wrmsr(struct vmx *vmx, int vcpuid, u_int num, uint64_t val, bool *retu)
 {
-	int error = 0;
-
+	uint64_t changed;
+	int error;
+	
+	error = 0;
 	switch (num) {
+	case MSR_IA32_MISC_ENABLE:
+		changed = val ^ misc_enable;
+		/*
+		 * If the host has disabled the NX feature then the guest
+		 * also cannot use it. However, a Linux guest will try to
+		 * enable the NX feature by writing to the MISC_ENABLE MSR.
+		 *
+		 * This can be safely ignored because the memory management
+		 * code looks at CPUID.80000001H:EDX.NX to check if the
+		 * functionality is actually enabled.
+		 */
+		changed &= ~(1UL << 34);
+
+		/*
+		 * Punt to userspace if any other bits are being modified.
+		 */
+		if (changed)
+			error = EINVAL;
+
+		break;
 	default:
 		error = EINVAL;
 		break;


More information about the svn-src-all mailing list