vbox5: enable unrestricted guest support

Issue #2338
This commit is contained in:
Alexander Boettcher 2017-06-01 10:14:23 +02:00 committed by Christian Helmuth
parent b8e2253e5f
commit 158dbcc7ae
8 changed files with 23 additions and 21 deletions

View File

@ -22,7 +22,7 @@
<HardwareVirtEx enabled="true"/>
<HardwareVirtExNestedPaging enabled="true"/>
<HardwareVirtExVPID enabled="true"/>
<HardwareVirtExUX enabled="false"/>
<HardwareVirtExUX enabled="true"/>
<PAE enabled="true"/>
<LongMode enabled="false"/>
<HardwareVirtExLargePages enabled="false"/>

View File

@ -22,7 +22,7 @@
<HardwareVirtEx enabled="true"/>
<HardwareVirtExNestedPaging enabled="true"/>
<HardwareVirtExVPID enabled="true"/>
<HardwareVirtExUX enabled="false"/>
<HardwareVirtExUX enabled="true"/>
<PAE enabled="true"/>
<LongMode enabled="true"/>
<HardwareVirtExLargePages enabled="false"/>

View File

@ -22,7 +22,7 @@
<HardwareVirtEx enabled="true"/>
<HardwareVirtExNestedPaging enabled="true"/>
<HardwareVirtExVPID enabled="true"/>
<HardwareVirtExUX enabled="false"/>
<HardwareVirtExUX enabled="true"/>
<PAE enabled="true"/>
<LongMode enabled="false"/>
<HardwareVirtExLargePages enabled="false"/>

View File

@ -22,7 +22,7 @@
<HardwareVirtEx enabled="true"/>
<HardwareVirtExNestedPaging enabled="true"/>
<HardwareVirtExVPID enabled="true"/>
<HardwareVirtExUX enabled="false"/>
<HardwareVirtExUX enabled="true"/>
<PAE enabled="true"/>
<LongMode enabled="true"/>
<HardwareVirtExLargePages enabled="false"/>

View File

@ -37,12 +37,6 @@ VMMR3DECL(int) HMR3Init(PVM pVM)
&pVM->hm.s.vmx.fAllowUnrestricted, true);
AssertRCReturn(rc, rc);
/* XXX fix Ubuntu and unrestricted guest support, disable by default atm */
if (pVM->hm.s.vmx.fAllowUnrestricted) {
pVM->hm.s.vmx.fAllowUnrestricted = false;
Genode::warning("unrestricted guest support disabled");
}
/* check whether to enable pae and nx bit - in 64bit host mode */
rc = CFGMR3QueryBoolDef(CFGMR3GetRoot(pVM), "EnablePAE", &enable_pae_nx,
false);
@ -72,6 +66,8 @@ VMMR3DECL(int) HMR3Init(PVM pVM)
pVM->hm.s.vmx.fUnrestrictedGuest = true;
pVM->fHMEnabledFixed = true;
pVM->hm.s.fNestedPaging = true;
return VINF_SUCCESS;
}
@ -106,8 +102,6 @@ VMMR3_INT_DECL(int) HMR3InitCompleted(PVM pVM, VMINITCOMPLETED enmWhat)
}
}
pVM->hm.s.fNestedPaging = true;
return rc;
}
@ -170,8 +164,13 @@ VMMR3_INT_DECL(void) HMR3PagingModeChanged(PVM pVM, PVMCPU pVCpu, PGMMODE enmSha
/**
* Restarting I/O instruction refused in ring-0 - no mean for us
*/
VBOXSTRICTRC HMR3RestartPendingIOInstr(PVM, PVMCPU, PCPUMCTX) {
return VERR_NOT_FOUND; }
VBOXSTRICTRC HMR3RestartPendingIOInstr(PVM, PVMCPU pVCpu, PCPUMCTX)
{
HMPENDINGIO enmType = pVCpu->hm.s.PendingIO.enmType;
if (enmType != HMPENDINGIO_INVALID)
Genode::error("unimplemented: restart pending I/O");
return VERR_NOT_FOUND;
}
VMMR3DECL(bool) HMR3IsPostedIntrsEnabled(PUVM pUVM)

View File

@ -24,9 +24,6 @@ static bool verbose = false;
int PGMMap(PVM pVM, RTGCUINTPTR GCPtr, RTHCPHYS HCPhys, uint32_t cbPages,
unsigned fFlags)
{
/* GCPtr steams from the #unimplemented# MMR3HyperReserve call, which
* returns a value - seems to be used solely in RC mode */
if (verbose)
Genode::log(__func__, ": GCPtr=", Genode::Hex(GCPtr), " "
"HCPHys=", Genode::Hex(HCPhys), " "

View File

@ -230,8 +230,11 @@ Genode::uint64_t * Vcpu_handler::pdpte_map(VM *pVM, RTGCPHYS cr3)
PPGMPAGE pPage = &pRam->aPages[iPage];
/*
Vmm::printf("%u gcphys=0x%lx host=0x%lx type=%lx state=0x%lx\n", __LINE__,
cr3, PGM_PAGE_GET_HCPHYS(pPage), PGM_PAGE_GET_TYPE(pPage), PGM_PAGE_GET_STATE(pPage));
if (VERBOSE_PGM)
Vmm::log(__LINE__, " gcphys=", Vmm::Hex(cr3),
" host=", Vmm::Hex(PGM_PAGE_GET_HCPHYS(pPage)),
" type=", Vmm::Hex(PGM_PAGE_GET_TYPE(pPage)),
" state=",Vmm::Hex(PGM_PAGE_GET_STATE(pPage)));
*/
Genode::uint64_t *pdpte = reinterpret_cast<Genode::uint64_t*>(PGM_PAGE_GET_HCPHYS(pPage) + (cr3 & PAGE_OFFSET_MASK));

View File

@ -301,8 +301,12 @@ int SUPR3CallVMMR0Ex(PVMR0 pVMR0, VMCPUID idCpu, unsigned uOperation,
switch (uOperation) {
case VMMR0_DO_GVMM_CREATE_VM:
{
genode_VMMR0_DO_GVMM_CREATE_VM(pReqHdr);
GVMMCREATEVMREQ &req = reinterpret_cast<GVMMCREATEVMREQ &>(*pReqHdr);
SUPR3QueryHWACCLonGenodeSupport(reinterpret_cast<VM *>(req.pVMR3));
/* reserve lower chunk ids */
try {
for (unsigned i = 0; i < CHUNKID_START; i++) {
@ -315,7 +319,7 @@ int SUPR3CallVMMR0Ex(PVMR0 pVMR0, VMCPUID idCpu, unsigned uOperation,
}
return VINF_SUCCESS;
}
case VMMR0_DO_GVMM_REGISTER_VMCPU:
genode_VMMR0_DO_GVMM_REGISTER_VMCPU(pVMR0, idCpu);
return VINF_SUCCESS;
@ -361,7 +365,6 @@ int SUPR3CallVMMR0Ex(PVMR0 pVMR0, VMCPUID idCpu, unsigned uOperation,
return VINF_SUCCESS;
case VMMR0_DO_VMMR0_INIT:
SUPR3QueryHWACCLonGenodeSupport(reinterpret_cast<VM *>(pVMR0));
return VINF_SUCCESS;
case VMMR0_DO_GVMM_DESTROY_VM: