Changeset 78632 in vbox for trunk/src/VBox/VMM/VMMR3
- Timestamp:
- May 21, 2019 1:56:11 PM (6 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo
-
old new 9 9 /branches/VBox-5.1:112367,115992,116543,116550,116568,116573 10 10 /branches/VBox-5.2:119536,120083,120099,120213,120221,120239,123597-123598,123600-123601,123755,124260,124263,124271,124273,124277-124279,124284-124286,124288-124290,125768,125779-125780,125812 11 /branches/VBox-6.0:130474-130475,130477,130479 11 12 /branches/aeichner/vbox-chromium-cleanup:129816,129818-129851,129853-129861,129871-129872,129876,129880,129882,130013-130015,130036,130094-130095 12 13 /branches/andy/draganddrop:90781-91268
-
- Property svn:mergeinfo
-
trunk/src/VBox
- Property svn:mergeinfo
-
old new 9 9 /branches/VBox-5.1/src/VBox:112367,116543,116550,116568,116573 10 10 /branches/VBox-5.2/src/VBox:119536,120083,120099,120213,120221,120239,123597-123598,123600-123601,123755,124263,124273,124277-124279,124284-124286,124288-124290,125768,125779-125780,125812,127158-127159,127162-127167,127180 11 /branches/VBox-6.0/src/VBox:130474-130475,130477,130479 11 12 /branches/aeichner/vbox-chromium-cleanup/src/VBox:129818-129851,129853-129861,129871-129872,129876,129880,129882,130013-130015,130094-130095 12 13 /branches/andy/draganddrop/src/VBox:90781-91268
-
- Property svn:mergeinfo
-
trunk/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp
r77032 r78632 83 83 /* [24(0x18)] = */ kCpumMicroarch_Intel_Unknown, 84 84 /* [25(0x19)] = */ kCpumMicroarch_Intel_Unknown, 85 /* [26(0x1a)] = */ kCpumMicroarch_Intel_Core7_Nehalem, 85 /* [26(0x1a)] = */ kCpumMicroarch_Intel_Core7_Nehalem, /* Nehalem-EP */ 86 86 /* [27(0x1b)] = */ kCpumMicroarch_Intel_Unknown, 87 87 /* [28(0x1c)] = */ kCpumMicroarch_Intel_Atom_Bonnell, /* Diamonville, Pineview, */ … … 135 135 /* [76(0x4c)] = */ kCpumMicroarch_Intel_Atom_Airmount, 136 136 /* [77(0x4d)] = */ kCpumMicroarch_Intel_Atom_Silvermont, 137 /* [78(0x4e)] = */ kCpumMicroarch_Intel_Core7_Skylake, /* unconfirmed */138 /* [79(0x4f)] = */ kCpumMicroarch_Intel_Core7_Broadwell, /* unconfirmed,Broadwell-E */137 /* [78(0x4e)] = */ kCpumMicroarch_Intel_Core7_Skylake, 138 /* [79(0x4f)] = */ kCpumMicroarch_Intel_Core7_Broadwell, /* Broadwell-E */ 139 139 /* [80(0x50)] = */ kCpumMicroarch_Intel_Unknown, 140 140 /* [81(0x51)] = */ kCpumMicroarch_Intel_Unknown, … … 142 142 /* [83(0x53)] = */ kCpumMicroarch_Intel_Unknown, 143 143 /* [84(0x54)] = */ kCpumMicroarch_Intel_Unknown, 144 /* [85(0x55)] = */ kCpumMicroarch_Intel_Core7_Skylake, /* server cpu */144 /* [85(0x55)] = */ kCpumMicroarch_Intel_Core7_Skylake, /* server cpu; skylake <= 4, cascade lake > 5 */ 145 145 /* [86(0x56)] = */ kCpumMicroarch_Intel_Core7_Broadwell, /* Xeon D-1540, Broadwell-DE */ 146 146 /* [87(0x57)] = */ kCpumMicroarch_Intel_Phi_KnightsLanding, … … 167 167 /*[108(0x6c)] = */ kCpumMicroarch_Intel_Unknown, 168 168 /*[109(0x6d)] = */ kCpumMicroarch_Intel_Unknown, 169 /*[110(0x6e)] = */ kCpumMicroarch_Intel_ Unknown,169 /*[110(0x6e)] = */ kCpumMicroarch_Intel_Atom_Airmount, /* or silvermount? */ 170 170 /*[111(0x6f)] = */ kCpumMicroarch_Intel_Unknown, 171 171 /*[112(0x70)] = */ kCpumMicroarch_Intel_Unknown, … … 174 174 /*[115(0x73)] = */ kCpumMicroarch_Intel_Unknown, 175 175 /*[116(0x74)] = */ kCpumMicroarch_Intel_Unknown, 176 /*[117(0x75)] = */ kCpumMicroarch_Intel_ Unknown,176 /*[117(0x75)] = */ kCpumMicroarch_Intel_Atom_Airmount, /* or silvermount? */ 177 177 /*[118(0x76)] = */ kCpumMicroarch_Intel_Unknown, 178 178 /*[119(0x77)] = */ kCpumMicroarch_Intel_Unknown, … … 199 199 /*[140(0x8c)] = */ kCpumMicroarch_Intel_Unknown, 200 200 /*[141(0x8d)] = */ kCpumMicroarch_Intel_Unknown, 201 /*[142(0x8e)] = */ kCpumMicroarch_Intel_Core7_KabyLake, /* Stepping 0xA is CoffeeLake, 9 is KabyLake. */201 /*[142(0x8e)] = */ kCpumMicroarch_Intel_Core7_KabyLake, /* Stepping >= 0xB is Whiskey Lake, 0xA is CoffeeLake. */ 202 202 /*[143(0x8f)] = */ kCpumMicroarch_Intel_Unknown, 203 203 /*[144(0x90)] = */ kCpumMicroarch_Intel_Unknown, … … 215 215 /*[156(0x9c)] = */ kCpumMicroarch_Intel_Unknown, 216 216 /*[157(0x9d)] = */ kCpumMicroarch_Intel_Unknown, 217 /*[158(0x9e)] = */ kCpumMicroarch_Intel_Core7_KabyLake, /* Stepping 0xA is CoffeeLake, 9 is KabyLake. */217 /*[158(0x9e)] = */ kCpumMicroarch_Intel_Core7_KabyLake, /* Stepping >= 0xB is Whiskey Lake, 0xA is CoffeeLake. */ 218 218 /*[159(0x9f)] = */ kCpumMicroarch_Intel_Unknown, 219 219 }; … … 370 370 { 371 371 CPUMMICROARCH enmMicroArch = g_aenmIntelFamily06[bModel]; 372 if ( enmMicroArch == kCpumMicroarch_Intel_Core7_KabyLake 373 && bStepping >= 0xa) 374 enmMicroArch = kCpumMicroarch_Intel_Core7_CoffeeLake; 372 if (enmMicroArch == kCpumMicroarch_Intel_Core7_KabyLake) 373 { 374 if (bStepping >= 0xa && bStepping <= 0xc) 375 enmMicroArch = kCpumMicroarch_Intel_Core7_CoffeeLake; 376 else if (bStepping >= 0xc) 377 enmMicroArch = kCpumMicroarch_Intel_Core7_WhiskeyLake; 378 } 379 else if ( enmMicroArch == kCpumMicroarch_Intel_Core7_Skylake 380 && bModel == 0x55 381 && bStepping >= 5) 382 enmMicroArch = kCpumMicroarch_Intel_Core7_CascadeLake; 375 383 return enmMicroArch; 376 384 } … … 520 528 CASE_RET_STR(kCpumMicroarch_Intel_Core7_KabyLake); 521 529 CASE_RET_STR(kCpumMicroarch_Intel_Core7_CoffeeLake); 530 CASE_RET_STR(kCpumMicroarch_Intel_Core7_WhiskeyLake); 531 CASE_RET_STR(kCpumMicroarch_Intel_Core7_CascadeLake); 522 532 CASE_RET_STR(kCpumMicroarch_Intel_Core7_CannonLake); 523 533 CASE_RET_STR(kCpumMicroarch_Intel_Core7_IceLake); … … 1893 1903 pFeatures->fFlushCmd = RT_BOOL(pSxfLeaf0->uEdx & X86_CPUID_STEXT_FEATURE_EDX_FLUSH_CMD); 1894 1904 pFeatures->fArchCap = RT_BOOL(pSxfLeaf0->uEdx & X86_CPUID_STEXT_FEATURE_EDX_ARCHCAP); 1905 pFeatures->fMdsClear = RT_BOOL(pSxfLeaf0->uEdx & X86_CPUID_STEXT_FEATURE_EDX_MD_CLEAR); 1895 1906 } 1896 1907 … … 2492 2503 CPUMISAEXTCFG enmInvpcid; 2493 2504 CPUMISAEXTCFG enmFlushCmdMsr; 2505 CPUMISAEXTCFG enmMdsClear; 2506 CPUMISAEXTCFG enmArchCapMsr; 2494 2507 2495 2508 CPUMISAEXTCFG enmAbm; … … 3291 3304 ; 3292 3305 pCurLeaf->uEdx &= 0 3306 | (pConfig->enmMdsClear ? X86_CPUID_STEXT_FEATURE_EDX_MD_CLEAR : 0) 3293 3307 //| X86_CPUID_STEXT_FEATURE_EDX_IBRS_IBPB RT_BIT(26) 3294 3308 //| X86_CPUID_STEXT_FEATURE_EDX_STIBP RT_BIT(27) 3295 3309 | (pConfig->enmFlushCmdMsr ? X86_CPUID_STEXT_FEATURE_EDX_FLUSH_CMD : 0) 3296 //| X86_CPUID_STEXT_FEATURE_EDX_ARCHCAP RT_BIT(29)3310 | (pConfig->enmArchCapMsr ? X86_CPUID_STEXT_FEATURE_EDX_ARCHCAP : 0) 3297 3311 ; 3298 3312 … … 3323 3337 PORTABLE_DISABLE_FEATURE_BIT( 1, pCurLeaf->uEcx, PREFETCHWT1, X86_CPUID_STEXT_FEATURE_ECX_PREFETCHWT1); 3324 3338 PORTABLE_DISABLE_FEATURE_BIT_CFG(3, pCurLeaf->uEdx, FLUSH_CMD, X86_CPUID_STEXT_FEATURE_EDX_FLUSH_CMD, pConfig->enmFlushCmdMsr); 3339 PORTABLE_DISABLE_FEATURE_BIT_CFG(3, pCurLeaf->uEdx, MD_CLEAR, X86_CPUID_STEXT_FEATURE_EDX_MD_CLEAR, pConfig->enmMdsClear); 3340 PORTABLE_DISABLE_FEATURE_BIT_CFG(3, pCurLeaf->uEdx, ARCHCAP, X86_CPUID_STEXT_FEATURE_EDX_ARCHCAP, pConfig->enmArchCapMsr); 3325 3341 } 3342 3343 /* Dependencies. */ 3344 if (!(pCurLeaf->uEdx & X86_CPUID_STEXT_FEATURE_EDX_FLUSH_CMD)) 3345 pCurLeaf->uEdx &= ~X86_CPUID_STEXT_FEATURE_EDX_MD_CLEAR; 3326 3346 3327 3347 /* Force standard feature bits. */ … … 3338 3358 if (pConfig->enmFlushCmdMsr == CPUMISAEXTCFG_ENABLED_ALWAYS) 3339 3359 pCurLeaf->uEdx |= X86_CPUID_STEXT_FEATURE_EDX_FLUSH_CMD; 3360 if (pConfig->enmMdsClear == CPUMISAEXTCFG_ENABLED_ALWAYS) 3361 pCurLeaf->uEdx |= X86_CPUID_STEXT_FEATURE_EDX_MD_CLEAR; 3362 if (pConfig->enmArchCapMsr == CPUMISAEXTCFG_ENABLED_ALWAYS) 3363 pCurLeaf->uEdx |= X86_CPUID_STEXT_FEATURE_EDX_ARCHCAP; 3340 3364 break; 3341 3365 } … … 4315 4339 AssertLogRelRCReturn(rc, rc); 4316 4340 4341 /** @cfgm{/CPUM/IsaExts/MdsClear, isaextcfg, true} 4342 * Whether to advertise the VERW and MDS related IA32_FLUSH_CMD MSR bits to 4343 * the guest. Requires FlushCmdMsr to be present too. 4344 */ 4345 rc = cpumR3CpuIdReadIsaExtCfg(pVM, pIsaExts, "MdsClear", &pConfig->enmMdsClear, CPUMISAEXTCFG_ENABLED_SUPPORTED); 4346 AssertLogRelRCReturn(rc, rc); 4347 4348 /** @cfgm{/CPUM/IsaExts/ArchCapMSr, isaextcfg, true} 4349 * Whether to expose the MSR_IA32_ARCH_CAPABILITIES MSR to the guest. 4350 */ 4351 rc = cpumR3CpuIdReadIsaExtCfg(pVM, pIsaExts, "ArchCapMsr", &pConfig->enmArchCapMsr, CPUMISAEXTCFG_ENABLED_SUPPORTED); 4352 AssertLogRelRCReturn(rc, rc); 4353 4317 4354 4318 4355 /* AMD: */ … … 4891 4928 if (pVM->cpum.s.HostFeatures.fArchCap) 4892 4929 { 4893 pLeaf->uEdx |= X86_CPUID_STEXT_FEATURE_EDX_ARCHCAP;4894 4895 4930 /* Install the architectural capabilities MSR. */ 4896 4931 pMsrRange = cpumLookupMsrRange(pVM, MSR_IA32_ARCH_CAPABILITIES); … … 5071 5106 pLeaf = cpumR3CpuIdGetExactLeaf(&pVM->cpum.s, UINT32_C(0x00000007), 0); 5072 5107 if (pLeaf) 5073 pLeaf->uEdx &= ~( X86_CPUID_STEXT_FEATURE_EDX_IBRS_IBPB | X86_CPUID_STEXT_FEATURE_EDX_STIBP 5074 | X86_CPUID_STEXT_FEATURE_EDX_ARCHCAP); 5108 pLeaf->uEdx &= ~(X86_CPUID_STEXT_FEATURE_EDX_IBRS_IBPB | X86_CPUID_STEXT_FEATURE_EDX_STIBP); 5075 5109 pVM->cpum.s.GuestFeatures.fSpeculationControl = 0; 5076 5110 Log(("CPUM: ClearGuestCpuIdFeature: Disabled speculation control!\n")); … … 6387 6421 static DBGFREGSUBFIELD const g_aLeaf7Sub0EdxSubFields[] = 6388 6422 { 6423 DBGFREGSUBFIELD_RO("MD_CLEAR\0" "Supports MDS related buffer clearing", 10, 1, 0), 6389 6424 DBGFREGSUBFIELD_RO("IBRS_IBPB\0" "IA32_SPEC_CTRL.IBRS and IA32_PRED_CMD.IBPB", 26, 1, 0), 6390 6425 DBGFREGSUBFIELD_RO("STIBP\0" "Supports IA32_SPEC_CTRL.STIBP", 27, 1, 0), -
trunk/src/VBox/VMM/VMMR3/CPUMR3Db.cpp
r76886 r78632 609 609 { 610 610 PCCPUMMSRRANGE papToAdd[10]; 611 uint32_t cToAdd = 0;611 uint32_t cToAdd = 0; 612 612 613 613 /* … … 630 630 }; 631 631 papToAdd[cToAdd++] = &s_FlushCmd; 632 } 633 634 /* 635 * The MSR_IA32_ARCH_CAPABILITIES was introduced in various spectre MCUs, or at least 636 * documented in relation to such. 637 */ 638 if (pVM->cpum.s.GuestFeatures.fArchCap && !cpumLookupMsrRange(pVM, MSR_IA32_ARCH_CAPABILITIES)) 639 { 640 static CPUMMSRRANGE const s_ArchCaps = 641 { 642 /*.uFirst =*/ MSR_IA32_ARCH_CAPABILITIES, 643 /*.uLast =*/ MSR_IA32_ARCH_CAPABILITIES, 644 /*.enmRdFn =*/ kCpumMsrRdFn_Ia32ArchCapabilities, 645 /*.enmWrFn =*/ kCpumMsrWrFn_ReadOnly, 646 /*.offCpumCpu =*/ UINT16_MAX, 647 /*.fReserved =*/ 0, 648 /*.uValue =*/ 0, 649 /*.fWrIgnMask =*/ 0, 650 /*.fWrGpMask =*/ UINT64_MAX, 651 /*.szName = */ "IA32_ARCH_CAPABILITIES" 652 }; 653 papToAdd[cToAdd++] = &s_ArchCaps; 632 654 } 633 655 -
trunk/src/VBox/VMM/VMMR3/HM.cpp
r78254 r78632 233 233 "|L1DFlushOnSched" 234 234 "|L1DFlushOnVMEntry" 235 "|MDSClearOnSched" 236 "|MDSClearOnVMEntry" 235 237 "|TPRPatchingEnabled" 236 238 "|64bitEnabled" … … 425 427 426 428 /** @cfgm{/HM/L1DFlushOnSched, bool, true} 427 * CV S-2018-3646 workaround, ignored on CPUs that aren't affected. */429 * CVE-2018-3646 workaround, ignored on CPUs that aren't affected. */ 428 430 rc = CFGMR3QueryBoolDef(pCfgHm, "L1DFlushOnSched", &pVM->hm.s.fL1dFlushOnSched, true); 429 431 AssertLogRelRCReturn(rc, rc); 430 432 431 433 /** @cfgm{/HM/L1DFlushOnVMEntry, bool} 432 * CV S-2018-3646 workaround, ignored on CPUs that aren't affected. */434 * CVE-2018-3646 workaround, ignored on CPUs that aren't affected. */ 433 435 rc = CFGMR3QueryBoolDef(pCfgHm, "L1DFlushOnVMEntry", &pVM->hm.s.fL1dFlushOnVmEntry, false); 434 436 AssertLogRelRCReturn(rc, rc); … … 442 444 rc = CFGMR3QueryBoolDef(pCfgHm, "SpecCtrlByHost", &pVM->hm.s.fSpecCtrlByHost, false); 443 445 AssertLogRelRCReturn(rc, rc); 446 447 /** @cfgm{/HM/MDSClearOnSched, bool, true} 448 * CVE-2018-12126, CVE-2018-12130, CVE-2018-12127, CVE-2019-11091 workaround, 449 * ignored on CPUs that aren't affected. */ 450 rc = CFGMR3QueryBoolDef(pCfgHm, "MDSClearOnSched", &pVM->hm.s.fMdsClearOnSched, true); 451 AssertLogRelRCReturn(rc, rc); 452 453 /** @cfgm{/HM/MDSClearOnVmEntry, bool, false} 454 * CVE-2018-12126, CVE-2018-12130, CVE-2018-12127, CVE-2019-11091 workaround, 455 * ignored on CPUs that aren't affected. */ 456 rc = CFGMR3QueryBoolDef(pCfgHm, "MDSClearOnVmEntry", &pVM->hm.s.fMdsClearOnVmEntry, false); 457 AssertLogRelRCReturn(rc, rc); 458 459 /* Disable MDSClearOnSched if MDSClearOnVmEntry is enabled. */ 460 if (pVM->hm.s.fMdsClearOnVmEntry) 461 pVM->hm.s.fMdsClearOnSched = false; 444 462 445 463 /** @cfgm{/HM/LovelyMesaDrvWorkaround,bool} … … 1094 1112 1095 1113 /* 1114 * Check if MDS flush is needed/possible. 1115 * On atoms and knight family CPUs, we will only allow clearing on scheduling. 1116 */ 1117 if ( !pVM->cpum.ro.HostFeatures.fMdsClear 1118 || pVM->cpum.ro.HostFeatures.fArchMdsNo) 1119 pVM->hm.s.fMdsClearOnSched = pVM->hm.s.fMdsClearOnVmEntry = false; 1120 else if ( ( pVM->cpum.ro.HostFeatures.enmMicroarch >= kCpumMicroarch_Intel_Atom_Airmount 1121 && pVM->cpum.ro.HostFeatures.enmMicroarch < kCpumMicroarch_Intel_Atom_End) 1122 || ( pVM->cpum.ro.HostFeatures.enmMicroarch >= kCpumMicroarch_Intel_Phi_KnightsLanding 1123 && pVM->cpum.ro.HostFeatures.enmMicroarch < kCpumMicroarch_Intel_Phi_End)) 1124 { 1125 if (!pVM->hm.s.fMdsClearOnSched) 1126 pVM->hm.s.fMdsClearOnSched = pVM->hm.s.fMdsClearOnVmEntry; 1127 pVM->hm.s.fMdsClearOnVmEntry = false; 1128 } 1129 else if ( pVM->cpum.ro.HostFeatures.enmMicroarch < kCpumMicroarch_Intel_Core7_Nehalem 1130 || pVM->cpum.ro.HostFeatures.enmMicroarch >= kCpumMicroarch_Intel_Core7_End) 1131 pVM->hm.s.fMdsClearOnSched = pVM->hm.s.fMdsClearOnVmEntry = false; 1132 1133 /* 1096 1134 * Sync options. 1097 1135 */ … … 1112 1150 if (pVM->cpum.ro.HostFeatures.fFlushCmd && pVM->hm.s.fL1dFlushOnVmEntry) 1113 1151 pCpuCtx->fWorldSwitcher |= CPUMCTX_WSF_L1D_ENTRY; 1152 if (pVM->cpum.ro.HostFeatures.fMdsClear && pVM->hm.s.fMdsClearOnVmEntry) 1153 pCpuCtx->fWorldSwitcher |= CPUMCTX_WSF_MDS_ENTRY; 1114 1154 if (iCpu == 0) 1115 LogRel(("HM: fWorldSwitcher=%#x (fIbpbOnVmExit=%RTbool fIbpbOnVmEntry=%RTbool fL1dFlushOnVmEntry=%RTbool); fL1dFlushOnSched=%RTbool \n",1155 LogRel(("HM: fWorldSwitcher=%#x (fIbpbOnVmExit=%RTbool fIbpbOnVmEntry=%RTbool fL1dFlushOnVmEntry=%RTbool); fL1dFlushOnSched=%RTbool fMdsClearOnVmEntry=%RTbool\n", 1116 1156 pCpuCtx->fWorldSwitcher, pVM->hm.s.fIbpbOnVmExit, pVM->hm.s.fIbpbOnVmEntry, pVM->hm.s.fL1dFlushOnVmEntry, 1117 pVM->hm.s.fL1dFlushOnSched ));1157 pVM->hm.s.fL1dFlushOnSched, pVM->hm.s.fMdsClearOnVmEntry)); 1118 1158 } 1119 1159
Note:
See TracChangeset
for help on using the changeset viewer.