socsvn commit: r238295 - soc2012/syuu/bhyve-bios/sys/amd64/vmm/intel

syuu at FreeBSD.org syuu at FreeBSD.org
Mon Jun 25 22:46:53 UTC 2012


Author: syuu
Date: Mon Jun 25 22:46:50 2012
New Revision: 238295
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=238295

Log:
  if in unrestricted guest mode, unset EFER/LMA flag on entry_ctls

Modified:
  soc2012/syuu/bhyve-bios/sys/amd64/vmm/intel/vmx.c

Modified: soc2012/syuu/bhyve-bios/sys/amd64/vmm/intel/vmx.c
==============================================================================
--- soc2012/syuu/bhyve-bios/sys/amd64/vmm/intel/vmx.c	Mon Jun 25 22:22:12 2012	(r238294)
+++ soc2012/syuu/bhyve-bios/sys/amd64/vmm/intel/vmx.c	Mon Jun 25 22:46:50 2012	(r238295)
@@ -1189,6 +1189,9 @@
 		vmexit->exitcode = VM_EXITCODE_PAGING;
 		vmexit->u.paging.cr3 = vmcs_guest_cr3();
 		break;
+	case EXIT_REASON_VMCALL:
+		vmexit->exitcode = VM_EXITCODE_VMCALL;
+		break;
 	default:
 		break;
 	}
@@ -1652,10 +1655,22 @@
 		break;
 	case VM_CAP_UNRESTRICTED_GUEST:
 		if (cap_unrestricted_guest) {
+			uint64_t ctls;
+
 			retval = 0;
 			baseval = procbased_ctls2;
 			flag = PROCBASED2_UNRESTRICTED_GUEST;
 			reg = VMCS_SEC_PROC_BASED_CTLS;
+			error = vmcs_getreg(vmcs,
+				    VMCS_IDENT(VMCS_ENTRY_CTLS), &ctls);
+			if (error == 0) {
+				ctls &= ~(VM_ENTRY_LOAD_EFER | VM_ENTRY_GUEST_LMA);
+				vmcs_setreg(vmcs,
+				    	VMCS_IDENT(VMCS_ENTRY_CTLS), ctls);
+			}else{
+				printf("%s vmcs_getreg returns %d\n",
+					__func__, error);
+			}
 		}
 		break;
 	default:


More information about the svn-soc-all mailing list