Changeset 76886 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Jan 18, 2019 10:57:02 AM (6 years ago)
- svn:sync-xref-src-repo-rev:
- 128254
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/GIMAll.cpp
r76553 r76886 436 436 case CPUMCPUVENDOR_INTEL: 437 437 case CPUMCPUVENDOR_VIA: 438 case CPUMCPUVENDOR_SHANGHAI: 438 439 { 439 440 if (puDisOpcode) -
trunk/src/VBox/VMM/VMMAll/GIMAllHv.cpp
r76553 r76886 1403 1403 if ( ( uDisOpcode == OP_VMCALL 1404 1404 && ( enmGuestCpuVendor == CPUMCPUVENDOR_INTEL 1405 || enmGuestCpuVendor == CPUMCPUVENDOR_VIA)) 1405 || enmGuestCpuVendor == CPUMCPUVENDOR_VIA 1406 || enmGuestCpuVendor == CPUMCPUVENDOR_SHANGHAI)) 1406 1407 || ( uDisOpcode == OP_VMMCALL 1407 1408 && enmGuestCpuVendor == CPUMCPUVENDOR_AMD)) -
trunk/src/VBox/VMM/VMMR0/CPUMR0.cpp
r76678 r76886 784 784 if ( ( ASMIsIntelCpuEx(u32EBX, u32ECX, u32EDX) 785 785 || ASMIsAmdCpuEx(u32EBX, u32ECX, u32EDX) 786 || ASMIsViaCentaurCpuEx(u32EBX, u32ECX, u32EDX)) 786 || ASMIsViaCentaurCpuEx(u32EBX, u32ECX, u32EDX) 787 || ASMIsShanghaiCpuEx(u32EBX, u32ECX, u32EDX)) 787 788 && ASMIsValidStdRange(uMaxLeaf)) 788 789 { -
trunk/src/VBox/VMM/VMMR3/CPUM.cpp
r76877 r76886 1149 1149 PCCPUMFEATURES pGuestFeatures = &pVM->cpum.s.GuestFeatures; 1150 1150 if ( pHostFeatures->enmCpuVendor == CPUMCPUVENDOR_INTEL 1151 || pHostFeatures->enmCpuVendor == CPUMCPUVENDOR_VIA) 1151 || pHostFeatures->enmCpuVendor == CPUMCPUVENDOR_VIA 1152 || pHostFeatures->enmCpuVendor == CPUMCPUVENDOR_SHANGHAI) 1152 1153 { 1153 1154 #define VMXFEATDUMP(a_szDesc, a_Var) \ -
trunk/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp
r76678 r76886 431 431 } 432 432 433 if (enmVendor == CPUMCPUVENDOR_SHANGHAI) 434 { 435 switch (bFamily) 436 { 437 case 6: 438 case 7: 439 return kCpumMicroarch_Shanghai_Wudaokou; 440 default: 441 break; 442 } 443 return kCpumMicroarch_Shanghai_Unknown; 444 } 445 433 446 if (enmVendor == CPUMCPUVENDOR_CYRIX) 434 447 { … … 588 601 CASE_RET_STR(kCpumMicroarch_VIA_Isaiah); 589 602 CASE_RET_STR(kCpumMicroarch_VIA_Unknown); 603 604 CASE_RET_STR(kCpumMicroarch_Shanghai_Wudaokou); 605 CASE_RET_STR(kCpumMicroarch_Shanghai_Unknown); 590 606 591 607 CASE_RET_STR(kCpumMicroarch_Cyrix_5x86); … … 619 635 case kCpumMicroarch_Cyrix_End: 620 636 case kCpumMicroarch_NEC_End: 637 case kCpumMicroarch_Shanghai_End: 621 638 case kCpumMicroarch_32BitHack: 622 639 break; … … 1603 1620 return CPUMCPUVENDOR_VIA; 1604 1621 1622 if (ASMIsShanghaiCpuEx(uEBX, uECX, uEDX)) 1623 return CPUMCPUVENDOR_SHANGHAI; 1624 1605 1625 if ( uEBX == UINT32_C(0x69727943) /* CyrixInstead */ 1606 1626 && uECX == UINT32_C(0x64616574) … … 1634 1654 case CPUMCPUVENDOR_VIA: return "VIA"; 1635 1655 case CPUMCPUVENDOR_CYRIX: return "CYRIX"; 1656 case CPUMCPUVENDOR_SHANGHAI: return "SHANGHAI"; 1636 1657 case CPUMCPUVENDOR_UNKNOWN: return "UNKNOWN"; 1637 1658 -
trunk/src/VBox/VMM/VMMR3/CPUMR3Db.cpp
r76678 r76886 215 215 #include "cpus/VIA_QuadCore_L4700_1_2_GHz.h" 216 216 217 #include "cpus/ZHAOXIN_KaiXian_KX_U5581_1_8GHz.h" 218 217 219 218 220 … … 304 306 #ifdef VBOX_CPUDB_AMD_Athlon_64_3200_h 305 307 &g_Entry_AMD_Athlon_64_3200, 308 #endif 309 310 #ifdef VBOX_CPUDB_ZHAOXIN_KaiXian_KX_U5581_1_8GHz_h 311 &g_Entry_ZHAOXIN_KaiXian_KX_U5581_1_8GHz, 306 312 #endif 307 313 -
trunk/src/VBox/VMM/VMMR3/HM.cpp
r76678 r76886 1090 1090 #undef HM_REG_COUNTER 1091 1091 1092 const char *const *papszDesc = ASMIsIntelCpu() || ASMIsViaCentaurCpu() ? &g_apszVmxExitReasons[0] 1093 : &g_apszSvmExitReasons[0]; 1092 const char *const *papszDesc = 1093 ASMIsIntelCpu() || ASMIsViaCentaurCpu() || ASMIsShanghaiCpu() 1094 ? &g_apszVmxExitReasons[0] 1095 : &g_apszSvmExitReasons[0]; 1094 1096 1095 1097 /* -
trunk/src/VBox/VMM/VMMR3/TM.cpp
r76553 r76886 957 957 return true; 958 958 } 959 else if (CPUMGetHostCpuVendor(pVM) == CPUMCPUVENDOR_SHANGHAI) 960 { 961 /* 962 * Shanghai - Check the model, family and stepping. 963 */ 964 /** @todo use ASMGetCpuFamily() and ASMGetCpuModel() here. */ 965 ASMCpuId(1, &uEAX, &uEBX, &uECX, &uEDX); 966 unsigned uFamily = (uEAX >> 8) & 0x0f; 967 if ( uFamily == 0x06 968 || uFamily == 0x07) 969 { 970 return true; 971 } 972 } 959 973 } 960 974 return false; -
trunk/src/VBox/VMM/tools/VBoxCpuReport.cpp
r76553 r76886 548 548 if (!fGp) 549 549 fFlags = 0; 550 /* VIA HACK - writing to 0x0000317e on a quad core make the core unresponsive. */551 else if (uMsr == 0x0000317e && g_enmVendor == CPUMCPUVENDOR_VIA)550 /* VIA/Shanghai HACK - writing to 0x0000317e on a quad core make the core unresponsive. */ 551 else if (uMsr == 0x0000317e && (g_enmVendor == CPUMCPUVENDOR_VIA || g_enmVendor == CPUMCPUVENDOR_SHANGHAI)) 552 552 { 553 553 uValue = 0; … … 601 601 if (RT_FAILURE(rc)) 602 602 return RTMsgErrorRc(rc, "Out of memory (uMsr=%#x).\n", uMsr); 603 if ( g_enmVendor != CPUMCPUVENDOR_VIA603 if ( (g_enmVendor != CPUMCPUVENDOR_VIA && g_enmVendor != CPUMCPUVENDOR_SHANGHAI) 604 604 || uValue 605 605 || fFlags) … … 2515 2515 case 0x00001438: 2516 2516 case 0x0000317f: 2517 if (g_enmVendor == CPUMCPUVENDOR_VIA )2517 if (g_enmVendor == CPUMCPUVENDOR_VIA || g_enmVendor == CPUMCPUVENDOR_SHANGHAI) 2518 2518 return VBCPUREPBADNESS_BOND_VILLAIN; 2519 2519 break; … … 2602 2602 2603 2603 /** 2604 * Checks if this might be a VIA dummy register.2604 * Checks if this might be a VIA/Shanghai dummy register. 2605 2605 * 2606 2606 * @returns true if it's a dummy, false if it isn't. … … 2609 2609 * @param fFlags The flags. 2610 2610 */ 2611 static bool isMsrVia Dummy(uint32_t uMsr, uint64_t uValue, uint32_t fFlags)2612 { 2613 if (g_enmVendor != CPUMCPUVENDOR_VIA )2611 static bool isMsrViaShanghaiDummy(uint32_t uMsr, uint64_t uValue, uint32_t fFlags) 2612 { 2613 if (g_enmVendor != CPUMCPUVENDOR_VIA && g_enmVendor != CPUMCPUVENDOR_SHANGHAI) 2614 2614 return false; 2615 2615 … … 3213 3213 || fGpMaskN != fGpMask0) 3214 3214 { 3215 if (!fEarlyEndOk && !isMsrVia Dummy(uMsr, paMsrs[i].uValue, paMsrs[i].fFlags))3215 if (!fEarlyEndOk && !isMsrViaShanghaiDummy(uMsr, paMsrs[i].uValue, paMsrs[i].fFlags)) 3216 3216 { 3217 3217 vbCpuRepDebug("MSR %s (%#x) range ended unexpectedly early on %#x: ro=%d ign=%#llx/%#llx gp=%#llx/%#llx [N/0]\n", … … 3303 3303 3304 3304 /** 3305 * Reports a VIA dummy range.3305 * Reports a VIA/Shanghai dummy range. 3306 3306 * 3307 3307 * @returns VBox status code. … … 3311 3311 * last MSR entry in the range. 3312 3312 */ 3313 static int reportMsr_Via DummyRange(VBCPUREPMSR const *paMsrs, uint32_t cMsrs, uint32_t *pidxLoop)3313 static int reportMsr_ViaShanghaiDummyRange(VBCPUREPMSR const *paMsrs, uint32_t cMsrs, uint32_t *pidxLoop) 3314 3314 { 3315 3315 /* Figure how many. */ … … 3318 3318 while ( cRegs < cMsrs 3319 3319 && paMsrs[cRegs].uMsr == uMsr + cRegs 3320 && isMsrVia Dummy(paMsrs[cRegs].uMsr, paMsrs[cRegs].uValue, paMsrs[cRegs].fFlags))3320 && isMsrViaShanghaiDummy(paMsrs[cRegs].uMsr, paMsrs[cRegs].uValue, paMsrs[cRegs].fFlags)) 3321 3321 { 3322 3322 cRegs++; … … 3458 3458 while ( cRegs < cMsrs 3459 3459 && paMsrs[cRegs].uMsr == uMsr + cRegs 3460 && !isMsrVia Dummy(paMsrs[cRegs].uMsr, paMsrs[cRegs].uValue, paMsrs[cRegs].fFlags) )3460 && !isMsrViaShanghaiDummy(paMsrs[cRegs].uMsr, paMsrs[cRegs].uValue, paMsrs[cRegs].fFlags) ) 3461 3461 cRegs++; 3462 3462 if (cRegs & 1) … … 4200 4200 * want to handle there to avoid making the code below unreadable. 4201 4201 */ 4202 else if (isMsrViaDummy(uMsr, uValue, fFlags)) 4203 rc = reportMsr_ViaDummyRange(&paMsrs[i], cMsrs - i, &i); 4202 /** @todo r=klaus check if Shanghai CPUs really are behaving the same */ 4203 else if (isMsrViaShanghaiDummy(uMsr, uValue, fFlags)) 4204 rc = reportMsr_ViaShanghaiDummyRange(&paMsrs[i], cMsrs - i, &i); 4204 4205 /* 4205 4206 * This shall be sorted by uMsr as much as possible. … … 4567 4568 case CPUMCPUVENDOR_VIA: return "VIA"; 4568 4569 case CPUMCPUVENDOR_CYRIX: return "Cyrix"; 4570 case CPUMCPUVENDOR_SHANGHAI: return "Shanghai"; 4569 4571 case CPUMCPUVENDOR_INVALID: 4570 4572 case CPUMCPUVENDOR_UNKNOWN: … … 4672 4674 char *pszHit; 4673 4675 while ((pszHit = strstr(pszName, pszWord)) != NULL) 4674 mem move(pszHit, pszHit + cchWord, strlen(pszHit + cchWord) + 1);4676 memset(pszHit, ' ', cchWord); 4675 4677 } 4676 4678 … … 4749 4751 " */\n" 4750 4752 "\n" 4751 "#ifndef VBOX_CPUDB_%s \n"4752 "#define VBOX_CPUDB_%s \n"4753 "#ifndef VBOX_CPUDB_%s_h\n" 4754 "#define VBOX_CPUDB_%s_h\n" 4753 4755 "\n", 4754 4756 pszName, … … 4807 4809 "};\n" 4808 4810 "\n" 4809 "#endif /* !VBOX_ DB_%s*/\n"4811 "#endif /* !VBOX_CPUDB_%s_h */\n" 4810 4812 "\n", 4811 4813 pszCpuDesc,
Note:
See TracChangeset
for help on using the changeset viewer.