diff options
author | vboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f> | 2019-07-31 16:12:31 +0000 |
---|---|---|
committer | vboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f> | 2019-07-31 16:12:31 +0000 |
commit | 5cd3bc7104e70fb9db55650706a90e2724ca653e (patch) | |
tree | 04775c5a6ed576006e120fb20807b4d1f505e162 /src | |
parent | 6cd5383557a70b367f981bfe0b86ddfcc739f84b (diff) | |
download | VirtualBox-svn-5cd3bc7104e70fb9db55650706a90e2724ca653e.tar.gz |
VMM: Kicking out raw-mode and 32-bit hosts - HM, VMMSWITCHER, ++. bugref:9517 bugref:9511
git-svn-id: https://www.virtualbox.org/svn/vbox/trunk@80080 cfe28804-0f27-0410-a406-dd0f0b0b656f
Diffstat (limited to 'src')
-rw-r--r-- | src/VBox/VMM/VMMAll/PGMAll.cpp | 52 | ||||
-rw-r--r-- | src/VBox/VMM/VMMR0/HMSVMR0.cpp | 4 | ||||
-rw-r--r-- | src/VBox/VMM/VMMR0/HMVMXR0.cpp | 27 | ||||
-rw-r--r-- | src/VBox/VMM/VMMR3/HM.cpp | 90 | ||||
-rw-r--r-- | src/VBox/VMM/VMMR3/VM.cpp | 12 | ||||
-rw-r--r-- | src/VBox/VMM/include/HMInternal.h | 22 | ||||
-rw-r--r-- | src/VBox/VMM/testcase/tstVMStruct.h | 2 |
7 files changed, 27 insertions, 182 deletions
diff --git a/src/VBox/VMM/VMMAll/PGMAll.cpp b/src/VBox/VMM/VMMAll/PGMAll.cpp index bb827f5dc89..9d5d84efd43 100644 --- a/src/VBox/VMM/VMMAll/PGMAll.cpp +++ b/src/VBox/VMM/VMMAll/PGMAll.cpp @@ -3032,13 +3032,9 @@ DECLINLINE(unsigned) pgmModeToType(PGMMODE pgmMode) * @param enmGuestMode The guest mode. * @param enmHostMode The host mode. * @param enmShadowMode The current shadow mode. - * @param penmSwitcher Where to store the switcher to use. - * VMMSWITCHER_INVALID means no change. */ -static PGMMODE pgmCalcShadowMode(PVM pVM, PGMMODE enmGuestMode, SUPPAGINGMODE enmHostMode, PGMMODE enmShadowMode, - VMMSWITCHER *penmSwitcher) +static PGMMODE pgmCalcShadowMode(PVM pVM, PGMMODE enmGuestMode, SUPPAGINGMODE enmHostMode, PGMMODE enmShadowMode) { - VMMSWITCHER enmSwitcher = VMMSWITCHER_INVALID; switch (enmGuestMode) { /* @@ -3060,7 +3056,6 @@ static PGMMODE pgmCalcShadowMode(PVM pVM, PGMMODE enmGuestMode, SUPPAGINGMODE en case SUPPAGINGMODE_32_BIT: case SUPPAGINGMODE_32_BIT_GLOBAL: enmShadowMode = PGMMODE_32_BIT; - enmSwitcher = VMMSWITCHER_32_TO_32; break; case SUPPAGINGMODE_PAE: @@ -3068,7 +3063,6 @@ static PGMMODE pgmCalcShadowMode(PVM pVM, PGMMODE enmGuestMode, SUPPAGINGMODE en case SUPPAGINGMODE_PAE_GLOBAL: case SUPPAGINGMODE_PAE_GLOBAL_NX: enmShadowMode = PGMMODE_PAE; - enmSwitcher = VMMSWITCHER_PAE_TO_PAE; break; case SUPPAGINGMODE_AMD64: @@ -3076,12 +3070,10 @@ static PGMMODE pgmCalcShadowMode(PVM pVM, PGMMODE enmGuestMode, SUPPAGINGMODE en case SUPPAGINGMODE_AMD64_NX: case SUPPAGINGMODE_AMD64_GLOBAL_NX: enmShadowMode = PGMMODE_PAE; - enmSwitcher = VMMSWITCHER_AMD64_TO_PAE; break; default: - AssertLogRelMsgFailedReturnStmt(("enmHostMode=%d\n", enmHostMode), - *penmSwitcher = VMMSWITCHER_INVALID, PGMMODE_INVALID); + AssertLogRelMsgFailedReturn(("enmHostMode=%d\n", enmHostMode), PGMMODE_INVALID); } break; @@ -3091,7 +3083,6 @@ static PGMMODE pgmCalcShadowMode(PVM pVM, PGMMODE enmGuestMode, SUPPAGINGMODE en case SUPPAGINGMODE_32_BIT: case SUPPAGINGMODE_32_BIT_GLOBAL: enmShadowMode = PGMMODE_32_BIT; - enmSwitcher = VMMSWITCHER_32_TO_32; break; case SUPPAGINGMODE_PAE: @@ -3099,7 +3090,6 @@ static PGMMODE pgmCalcShadowMode(PVM pVM, PGMMODE enmGuestMode, SUPPAGINGMODE en case SUPPAGINGMODE_PAE_GLOBAL: case SUPPAGINGMODE_PAE_GLOBAL_NX: enmShadowMode = PGMMODE_PAE; - enmSwitcher = VMMSWITCHER_PAE_TO_PAE; break; case SUPPAGINGMODE_AMD64: @@ -3107,12 +3097,10 @@ static PGMMODE pgmCalcShadowMode(PVM pVM, PGMMODE enmGuestMode, SUPPAGINGMODE en case SUPPAGINGMODE_AMD64_NX: case SUPPAGINGMODE_AMD64_GLOBAL_NX: enmShadowMode = PGMMODE_PAE; - enmSwitcher = VMMSWITCHER_AMD64_TO_PAE; break; default: - AssertLogRelMsgFailedReturnStmt(("enmHostMode=%d\n", enmHostMode), - *penmSwitcher = VMMSWITCHER_INVALID, PGMMODE_INVALID); + AssertLogRelMsgFailedReturn(("enmHostMode=%d\n", enmHostMode), PGMMODE_INVALID); } break; @@ -3123,7 +3111,6 @@ static PGMMODE pgmCalcShadowMode(PVM pVM, PGMMODE enmGuestMode, SUPPAGINGMODE en case SUPPAGINGMODE_32_BIT: case SUPPAGINGMODE_32_BIT_GLOBAL: enmShadowMode = PGMMODE_PAE; - enmSwitcher = VMMSWITCHER_32_TO_PAE; break; case SUPPAGINGMODE_PAE: @@ -3131,7 +3118,6 @@ static PGMMODE pgmCalcShadowMode(PVM pVM, PGMMODE enmGuestMode, SUPPAGINGMODE en case SUPPAGINGMODE_PAE_GLOBAL: case SUPPAGINGMODE_PAE_GLOBAL_NX: enmShadowMode = PGMMODE_PAE; - enmSwitcher = VMMSWITCHER_PAE_TO_PAE; break; case SUPPAGINGMODE_AMD64: @@ -3139,12 +3125,10 @@ static PGMMODE pgmCalcShadowMode(PVM pVM, PGMMODE enmGuestMode, SUPPAGINGMODE en case SUPPAGINGMODE_AMD64_NX: case SUPPAGINGMODE_AMD64_GLOBAL_NX: enmShadowMode = PGMMODE_PAE; - enmSwitcher = VMMSWITCHER_AMD64_TO_PAE; break; default: - AssertLogRelMsgFailedReturnStmt(("enmHostMode=%d\n", enmHostMode), - *penmSwitcher = VMMSWITCHER_INVALID, PGMMODE_INVALID); + AssertLogRelMsgFailedReturn(("enmHostMode=%d\n", enmHostMode), PGMMODE_INVALID); } break; @@ -3155,7 +3139,6 @@ static PGMMODE pgmCalcShadowMode(PVM pVM, PGMMODE enmGuestMode, SUPPAGINGMODE en case SUPPAGINGMODE_32_BIT: case SUPPAGINGMODE_32_BIT_GLOBAL: enmShadowMode = PGMMODE_AMD64; - enmSwitcher = VMMSWITCHER_32_TO_AMD64; break; case SUPPAGINGMODE_PAE: @@ -3163,7 +3146,6 @@ static PGMMODE pgmCalcShadowMode(PVM pVM, PGMMODE enmGuestMode, SUPPAGINGMODE en case SUPPAGINGMODE_PAE_GLOBAL: case SUPPAGINGMODE_PAE_GLOBAL_NX: enmShadowMode = PGMMODE_AMD64; - enmSwitcher = VMMSWITCHER_PAE_TO_AMD64; break; case SUPPAGINGMODE_AMD64: @@ -3171,18 +3153,15 @@ static PGMMODE pgmCalcShadowMode(PVM pVM, PGMMODE enmGuestMode, SUPPAGINGMODE en case SUPPAGINGMODE_AMD64_NX: case SUPPAGINGMODE_AMD64_GLOBAL_NX: enmShadowMode = PGMMODE_AMD64; - enmSwitcher = VMMSWITCHER_AMD64_TO_AMD64; break; default: - AssertLogRelMsgFailedReturnStmt(("enmHostMode=%d\n", enmHostMode), - *penmSwitcher = VMMSWITCHER_INVALID, PGMMODE_INVALID); + AssertLogRelMsgFailedReturn(("enmHostMode=%d\n", enmHostMode), PGMMODE_INVALID); } break; default: - AssertLogRelMsgFailedReturnStmt(("enmGuestMode=%d\n", enmGuestMode), - *penmSwitcher = VMMSWITCHER_INVALID, PGMMODE_INVALID); + AssertLogRelMsgFailedReturn(("enmGuestMode=%d\n", enmGuestMode), PGMMODE_INVALID); } /* @@ -3232,14 +3211,12 @@ static PGMMODE pgmCalcShadowMode(PVM pVM, PGMMODE enmGuestMode, SUPPAGINGMODE en break; #endif default: - AssertLogRelMsgFailedReturnStmt(("enmHostMode=%d\n", pVM->pgm.s.enmHostMode), - *penmSwitcher = VMMSWITCHER_INVALID, PGMMODE_INVALID); + AssertLogRelMsgFailedReturn(("enmHostMode=%d\n", pVM->pgm.s.enmHostMode), PGMMODE_INVALID); } } } } - *penmSwitcher = enmSwitcher; return enmShadowMode; } @@ -3264,21 +3241,8 @@ VMM_INT_DECL(int) PGMHCChangeMode(PVM pVM, PVMCPU pVCpu, PGMMODE enmGuestMode) /* * Calc the shadow mode and switcher. */ - VMMSWITCHER enmSwitcher = VMMSWITCHER_INVALID; PGMMODE enmShadowMode = PGMMODE_INVALID; - enmShadowMode = pgmCalcShadowMode(pVM, enmGuestMode, pVM->pgm.s.enmHostMode, pVCpu->pgm.s.enmShadowMode, &enmSwitcher); - -#ifdef VBOX_WITH_RAW_MODE_NOT_R0 - if ( enmSwitcher != VMMSWITCHER_INVALID - && VM_IS_RAW_MODE_ENABLED(pVM)) - { - /* - * Select new switcher. - */ - int rc = VMMR3SelectSwitcher(pVM, enmSwitcher); - AssertLogRelMsgRCReturn(rc,("VMMR3SelectSwitcher(%d) -> %Rrc\n", enmSwitcher, rc), rc); - } -#endif + enmShadowMode = pgmCalcShadowMode(pVM, enmGuestMode, pVM->pgm.s.enmHostMode, pVCpu->pgm.s.enmShadowMode); /* * Exit old mode(s). diff --git a/src/VBox/VMM/VMMR0/HMSVMR0.cpp b/src/VBox/VMM/VMMR0/HMSVMR0.cpp index 358c6159d17..e7c26094e27 100644 --- a/src/VBox/VMM/VMMR0/HMSVMR0.cpp +++ b/src/VBox/VMM/VMMR0/HMSVMR0.cpp @@ -1590,7 +1590,7 @@ static int hmR0SvmExportGuestCR4(PVMCPU pVCpu, PSVMVMCB pVmcb) case PGMMODE_AMD64: /* 64-bit AMD paging (long mode). */ case PGMMODE_AMD64_NX: /* 64-bit AMD paging (long mode) with NX enabled. */ -#ifdef VBOX_ENABLE_64_BITS_GUESTS +#ifdef VBOX_WITH_64_BITS_GUESTS break; #else return VERR_PGM_UNSUPPORTED_SHADOW_PAGING_MODE; @@ -2216,7 +2216,7 @@ static int hmR0SvmSelectVMRunHandler(PVMCPU pVCpu) { if (CPUMIsGuestInLongMode(pVCpu)) { -#ifndef VBOX_ENABLE_64_BITS_GUESTS +#ifndef VBOX_WITH_64_BITS_GUESTS return VERR_PGM_UNSUPPORTED_SHADOW_PAGING_MODE; #else # if HC_ARCH_BITS != 64 || ARCH_BITS != 64 diff --git a/src/VBox/VMM/VMMR0/HMVMXR0.cpp b/src/VBox/VMM/VMMR0/HMVMXR0.cpp index ad5105dde3b..12a0ded5079 100644 --- a/src/VBox/VMM/VMMR0/HMVMXR0.cpp +++ b/src/VBox/VMM/VMMR0/HMVMXR0.cpp @@ -337,9 +337,6 @@ DECLINLINE(VBOXSTRICTRC) hmR0VmxHandleExitNested(PVMCPU pVCpu, PVMXTRA #endif static int hmR0VmxImportGuestState(PVMCPU pVCpu, PVMXVMCSINFO pVmcsInfo, uint64_t fWhat); -#if HC_ARCH_BITS == 32 && defined(VBOX_ENABLE_64_BITS_GUESTS) -static void hmR0VmxInitVmcsReadCache(PVMCPU pVCpu); -#endif /** @name VM-exit handler prototypes. * @{ @@ -2888,17 +2885,6 @@ VMMR0DECL(int) VMXR0InvalidatePage(PVMCPU pVCpu, RTGCPTR GCVirt) if (pVM->hm.s.vmx.fVpid) { bool fVpidFlush = RT_BOOL(pVM->hm.s.vmx.Msrs.u64EptVpidCaps & MSR_IA32_VMX_EPT_VPID_CAP_INVVPID_INDIV_ADDR); - -#if HC_ARCH_BITS == 32 && defined(VBOX_ENABLE_64_BITS_GUESTS) - /* - * Workaround Erratum BV75, AAJ159 and others that affect several Intel CPUs - * where executing INVVPID outside 64-bit mode does not flush translations of - * 64-bit linear addresses, see @bugref{6208#c72}. - */ - if (RT_HI_U32(GCVirt)) - fVpidFlush = false; -#endif - if (fVpidFlush) { hmR0VmxFlushVpid(pVCpu, VMXTLBFLUSHVPID_INDIV_ADDR, GCVirt); @@ -4704,12 +4690,6 @@ static bool hmR0VmxShouldSwapEferMsr(PCVMCPU pVCpu) return true; #else PCCPUMCTX pCtx = &pVCpu->cpum.GstCtx; -#if HC_ARCH_BITS == 32 && defined(VBOX_ENABLE_64_BITS_GUESTS) - /* For 32-bit hosts running 64-bit guests, we always swap EFER MSR in the world-switcher. Nothing to do here. */ - if (CPUMIsGuestInLongModeEx(pCtx)) - return false; -#endif - PVM pVM = pVCpu->CTX_SUFF(pVM); uint64_t const u64HostEfer = pVM->hm.s.vmx.u64HostMsrEfer; uint64_t const u64GuestEfer = pCtx->msrEFER; @@ -5820,7 +5800,7 @@ static VBOXSTRICTRC hmR0VmxExportGuestCR3AndCR4(PVMCPU pVCpu, PVMXTRANSIENT pVmx case PGMMODE_AMD64: /* 64-bit AMD paging (long mode). */ case PGMMODE_AMD64_NX: /* 64-bit AMD paging (long mode) with NX enabled. */ -#ifdef VBOX_ENABLE_64_BITS_GUESTS +#ifdef VBOX_WITH_64_BITS_GUESTS break; #endif default: @@ -6703,12 +6683,13 @@ static int hmR0VmxSelectVMRunHandler(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) if (CPUMIsGuestInLongModeEx(pCtx)) { -#ifndef VBOX_ENABLE_64_BITS_GUESTS +#ifndef VBOX_WITH_64_BITS_GUESTS return VERR_PGM_UNSUPPORTED_SHADOW_PAGING_MODE; -#endif +#else Assert(pVCpu->CTX_SUFF(pVM)->hm.s.fAllow64BitGuests); /* Guaranteed by hmR3InitFinalizeR0(). */ /* Guest is in long mode, use the 64-bit handler (host is 64-bit). */ pVmcsInfo->pfnStartVM = VMXR0StartVM64; +#endif } else { diff --git a/src/VBox/VMM/VMMR3/HM.cpp b/src/VBox/VMM/VMMR3/HM.cpp index 8931afc3a2f..4681f8c79ed 100644 --- a/src/VBox/VMM/VMMR3/HM.cpp +++ b/src/VBox/VMM/VMMR3/HM.cpp @@ -218,7 +218,7 @@ VMMR3_INT_DECL(int) HMR3Init(PVM pVM) * Validate the HM settings. */ rc = CFGMR3ValidateConfig(pCfgHm, "/HM/", - "HMForced" + "HMForced" /* implied 'true' these days */ "|UseNEMInstead" "|FallbackToNEM" "|EnableNestedPaging" @@ -252,23 +252,8 @@ VMMR3_INT_DECL(int) HMR3Init(PVM pVM) * Forces hardware virtualization, no falling back on raw-mode. HM must be * enabled, i.e. /HMEnabled must be true. */ bool fHMForced; -#ifdef VBOX_WITH_RAW_MODE - rc = CFGMR3QueryBoolDef(pCfgHm, "HMForced", &fHMForced, false); - AssertRCReturn(rc, rc); - AssertLogRelMsgReturn(!fHMForced || pVM->fHMEnabled, ("Configuration error: HM forced but not enabled!\n"), - VERR_INVALID_PARAMETER); -# if defined(RT_OS_DARWIN) - if (pVM->fHMEnabled) - fHMForced = true; -# endif - AssertLogRelMsgReturn(pVM->cCpus == 1 || pVM->fHMEnabled, ("Configuration error: SMP requires HM to be enabled!\n"), - VERR_INVALID_PARAMETER); - if (pVM->cCpus > 1) - fHMForced = true; -#else /* !VBOX_WITH_RAW_MODE */ AssertRelease(pVM->fHMEnabled); fHMForced = true; -#endif /* !VBOX_WITH_RAW_MODE */ /** @cfgm{/HM/UseNEMInstead, bool, true} * Don't use HM, use NEM instead. */ @@ -317,7 +302,7 @@ VMMR3_INT_DECL(int) HMR3Init(PVM pVM) * Enables AMD64 cpu features. * On 32-bit hosts this isn't default and require host CPU support. 64-bit hosts * already have the support. */ -#ifdef VBOX_ENABLE_64_BITS_GUESTS +#ifdef VBOX_WITH_64_BITS_GUESTS rc = CFGMR3QueryBoolDef(pCfgHm, "64bitEnabled", &pVM->hm.s.fAllow64BitGuests, HC_ARCH_BITS == 64); AssertLogRelRCReturn(rc, rc); #else @@ -515,14 +500,7 @@ VMMR3_INT_DECL(int) HMR3Init(PVM pVM) rc = VINF_SUCCESS; } if (RT_FAILURE(rc)) - { - if (fHMForced) - return VMSetError(pVM, rc, RT_SRC_POS, "The host kernel does not support VT-x: %s\n", pszWhy); - - /* Fall back to raw-mode. */ - LogRel(("HM: HMR3Init: Falling back to raw-mode: The host kernel does not support VT-x - %s\n", pszWhy)); - VM_SET_MAIN_EXECUTION_ENGINE(pVM, VM_EXEC_ENGINE_RAW_MODE); - } + return VMSetError(pVM, rc, RT_SRC_POS, "The host kernel does not support VT-x: %s\n", pszWhy); } } else @@ -530,13 +508,6 @@ VMMR3_INT_DECL(int) HMR3Init(PVM pVM) VERR_INTERNAL_ERROR_5); /* - * Do we require a little bit or raw-mode for 64-bit guest execution? - */ - pVM->fHMNeedRawModeCtx = HC_ARCH_BITS == 32 - && pVM->fHMEnabled - && pVM->hm.s.fAllow64BitGuests; - - /* * Disable nested paging and unrestricted guest execution now if they're * configured so that CPUM can make decisions based on our configuration. */ @@ -592,13 +563,7 @@ VMMR3_INT_DECL(int) HMR3Init(PVM pVM) rc = VINF_SUCCESS; } if (RT_FAILURE(rc)) - { - if (fHMForced) - return VM_SET_ERROR(pVM, rc, pszMsg); - - LogRel(("HM: HMR3Init: Falling back to raw-mode: %s\n", pszMsg)); - VM_SET_MAIN_EXECUTION_ENGINE(pVM, VM_EXEC_ENGINE_RAW_MODE); - } + return VM_SET_ERROR(pVM, rc, pszMsg); } } else @@ -606,17 +571,21 @@ VMMR3_INT_DECL(int) HMR3Init(PVM pVM) /* * Disabled HM mean raw-mode, unless NEM is supposed to be used. */ - if (!fUseNEMInstead) - VM_SET_MAIN_EXECUTION_ENGINE(pVM, VM_EXEC_ENGINE_RAW_MODE); - else + if (fUseNEMInstead) { rc = NEMR3Init(pVM, false /*fFallback*/, true); ASMCompilerBarrier(); /* NEMR3Init may have changed bMainExecutionEngine. */ if (RT_FAILURE(rc)) return rc; } + if ( pVM->bMainExecutionEngine == VM_EXEC_ENGINE_NOT_SET + || pVM->bMainExecutionEngine == VM_EXEC_ENGINE_RAW_MODE + || pVM->bMainExecutionEngine == VM_EXEC_ENGINE_HW_VIRT /* paranoia */) + return VM_SET_ERROR(pVM, rc, "Misconfigured VM: No guest execution engine available!"); } + Assert(pVM->bMainExecutionEngine != VM_EXEC_ENGINE_NOT_SET); + Assert(pVM->bMainExecutionEngine != VM_EXEC_ENGINE_RAW_MODE); return VINF_SUCCESS; } @@ -716,13 +685,6 @@ static int hmR3InitFinalizeR3(PVM pVM) "/PROF/CPU%d/HM/InGC", i); AssertRC(rc); -# if HC_ARCH_BITS == 32 && defined(VBOX_ENABLE_64_BITS_GUESTS) - rc = STAMR3RegisterF(pVM, &pVCpu->hm.s.StatWorldSwitch3264, STAMTYPE_PROFILE, STAMVISIBILITY_USED, - STAMUNIT_TICKS_PER_CALL, "Profiling of the 32/64 switcher.", - "/PROF/CPU%d/HM/Switcher3264", i); - AssertRC(rc); -# endif - # ifdef HM_PROFILE_EXIT_DISPATCH rc = STAMR3RegisterF(pVM, &pVCpu->hm.s.StatExitDispatch, STAMTYPE_PROFILE_ADV, STAMVISIBILITY_USED, STAMUNIT_TICKS_PER_CALL, "Profiling the dispatching of exit handlers.", @@ -856,11 +818,6 @@ static int hmR3InitFinalizeR3(PVM pVM) HM_REG_COUNTER(&pVCpu->hm.s.StatVmxCheckBadRpl, "/HM/CPU%d/VMXCheck/RPL", "Could not use VMX due to unsuitable RPL."); HM_REG_COUNTER(&pVCpu->hm.s.StatVmxCheckPmOk, "/HM/CPU%d/VMXCheck/VMX_PM", "VMX execution in protected mode OK."); -#if HC_ARCH_BITS == 32 && defined(VBOX_ENABLE_64_BITS_GUESTS) - HM_REG_COUNTER(&pVCpu->hm.s.StatFpu64SwitchBack, "/HM/CPU%d/Switch64/Fpu", "Saving guest FPU/XMM state."); - HM_REG_COUNTER(&pVCpu->hm.s.StatDebug64SwitchBack, "/HM/CPU%d/Switch64/Debug", "Saving guest debug state."); -#endif - #undef HM_REG_COUNTER bool const fCpuSupportsVmx = ASMIsIntelCpu() || ASMIsViaCentaurCpu() || ASMIsShanghaiCpu(); @@ -1749,14 +1706,12 @@ static int hmR3InitFinalizeR0Intel(PVM pVM) if (pVM->hm.s.vmx.fUnrestrictedGuest) LogRel(("HM: Enabled unrestricted guest execution\n")); -#if HC_ARCH_BITS == 64 if (pVM->hm.s.fLargePages) { /* Use large (2 MB) pages for our EPT PDEs where possible. */ PGMSetLargePageUsage(pVM, true); LogRel(("HM: Enabled large page support\n")); } -#endif } else Assert(!pVM->hm.s.vmx.fUnrestrictedGuest); @@ -1891,13 +1846,11 @@ static int hmR3InitFinalizeR0Amd(PVM pVM) /* * Enable large pages (2 MB) if applicable. */ -#if HC_ARCH_BITS == 64 if (pVM->hm.s.fLargePages) { PGMSetLargePageUsage(pVM, true); LogRel(("HM: Enabled large page support\n")); } -#endif } if (pVM->hm.s.fVirtApicRegs) @@ -1953,27 +1906,6 @@ VMMR3_INT_DECL(void) HMR3Relocate(PVM pVM) pVCpu->hm.s.enmShadowMode = PGMGetShadowMode(pVCpu); } } -#if HC_ARCH_BITS == 32 && defined(VBOX_ENABLE_64_BITS_GUESTS) - if (HMIsEnabled(pVM)) - { - switch (PGMGetHostMode(pVM)) - { - case PGMMODE_32_BIT: - pVM->hm.s.pfnHost32ToGuest64R0 = VMMR3GetHostToGuestSwitcher(pVM, VMMSWITCHER_32_TO_AMD64); - break; - - case PGMMODE_PAE: - case PGMMODE_PAE_NX: - pVM->hm.s.pfnHost32ToGuest64R0 = VMMR3GetHostToGuestSwitcher(pVM, VMMSWITCHER_PAE_TO_AMD64); - break; - - default: - AssertFailed(); - break; - } - } -#endif - return; } diff --git a/src/VBox/VMM/VMMR3/VM.cpp b/src/VBox/VMM/VMMR3/VM.cpp index 90977f7e8ab..b94d97351b7 100644 --- a/src/VBox/VMM/VMMR3/VM.cpp +++ b/src/VBox/VMM/VMMR3/VM.cpp @@ -736,18 +736,6 @@ static int vmR3ReadBaseConfig(PVM pVM, PUVM pUVM, uint32_t cCpus) PCFGMNODE pRoot = CFGMR3GetRoot(pVM); /* - * If executing in fake suplib mode disable RR3 and RR0 in the config. - */ - const char *psz = RTEnvGet("VBOX_SUPLIB_FAKE"); - if (psz && !strcmp(psz, "fake")) - { - CFGMR3RemoveValue(pRoot, "RawR3Enabled"); - CFGMR3InsertInteger(pRoot, "RawR3Enabled", 0); - CFGMR3RemoveValue(pRoot, "RawR0Enabled"); - CFGMR3InsertInteger(pRoot, "RawR0Enabled", 0); - } - - /* * Base EM and HM config properties. */ pVM->fHMEnabled = true; diff --git a/src/VBox/VMM/include/HMInternal.h b/src/VBox/VMM/include/HMInternal.h index 44d583682fe..a78ae699722 100644 --- a/src/VBox/VMM/include/HMInternal.h +++ b/src/VBox/VMM/include/HMInternal.h @@ -37,13 +37,8 @@ #include <iprt/avl.h> #include <iprt/string.h> -#if HC_ARCH_BITS == 32 && defined(RT_OS_DARWIN) -# error "32-bit darwin is no longer supported. Go back to 4.3 or earlier!" -#endif - -#if HC_ARCH_BITS == 64 || defined(VBOX_WITH_64_BITS_GUESTS) -/* Enable 64 bits guest support. */ -# define VBOX_ENABLE_64_BITS_GUESTS +#if HC_ARCH_BITS == 32 +# error "32-bit hosts are no longer supported. Go back to 6.0 or earlier!" #endif /** @def HM_PROFILE_EXIT_DISPATCH @@ -506,12 +501,6 @@ typedef struct HM /** Current free pointer inside the patch block. */ RTGCPTR pFreeGuestPatchMem; -#if HC_ARCH_BITS == 32 && defined(VBOX_ENABLE_64_BITS_GUESTS) - /** 32 to 64 bits switcher entrypoint. */ - R0PTRTYPE(PFNHMSWITCHERHC) pfnHost32ToGuest64R0; - RTR0PTR pvR0Alignment0; -#endif - struct { /** Set by the ring-0 side of HM to indicate VMX is supported by the @@ -1114,9 +1103,6 @@ typedef struct HMCPU STAMPROFILEADV StatExportGuestState; STAMPROFILEADV StatLoadGuestFpuState; STAMPROFILEADV StatInGC; -#if HC_ARCH_BITS == 32 && defined(VBOX_ENABLE_64_BITS_GUESTS) - STAMPROFILEADV StatWorldSwitch3264; -#endif STAMPROFILEADV StatPoke; STAMPROFILEADV StatSpinPoke; STAMPROFILEADV StatSpinPokeFailed; @@ -1238,10 +1224,6 @@ typedef struct HMCPU STAMCOUNTER StatVmxCheckBadRpl; STAMCOUNTER StatVmxCheckPmOk; -#if HC_ARCH_BITS == 32 && defined(VBOX_ENABLE_64_BITS_GUESTS) - STAMCOUNTER StatFpu64SwitchBack; - STAMCOUNTER StatDebug64SwitchBack; -#endif #ifdef VBOX_WITH_STATISTICS R3PTRTYPE(PSTAMCOUNTER) paStatExitReason; R0PTRTYPE(PSTAMCOUNTER) paStatExitReasonR0; diff --git a/src/VBox/VMM/testcase/tstVMStruct.h b/src/VBox/VMM/testcase/tstVMStruct.h index c3e6000ee3f..c12e22d9017 100644 --- a/src/VBox/VMM/testcase/tstVMStruct.h +++ b/src/VBox/VMM/testcase/tstVMStruct.h @@ -1428,7 +1428,6 @@ GEN_CHECK_OFF(VM, cbSelf); GEN_CHECK_OFF(VM, bMainExecutionEngine); GEN_CHECK_OFF(VM, fHMEnabled); - GEN_CHECK_OFF(VM, fFaultTolerantMaster); GEN_CHECK_OFF(VM, fUseLargePages); GEN_CHECK_OFF(VM, hTraceBufR3); GEN_CHECK_OFF(VM, hTraceBufR0); @@ -1449,7 +1448,6 @@ GEN_CHECK_OFF(VM, tm); GEN_CHECK_OFF(VM, dbgf); GEN_CHECK_OFF(VM, ssm); - GEN_CHECK_OFF(VM, ftm); #ifdef VBOX_WITH_REM GEN_CHECK_OFF(VM, rem); #endif |