Changeset 76886 in vbox for trunk/src/VBox/VMM/tools
- Timestamp:
- Jan 18, 2019 10:57:02 AM (6 years ago)
- svn:sync-xref-src-repo-rev:
- 128254
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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.