Changeset 54674 in vbox
- Timestamp:
- Mar 6, 2015 6:02:31 PM (10 years ago)
- svn:sync-xref-src-repo-rev:
- 98827
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp
r53467 r54674 5 5 6 6 /* 7 * Copyright (C) 2013-201 4Oracle Corporation7 * Copyright (C) 2013-201 Oracle Corporation 8 8 * 9 9 * This file is part of VirtualBox Open Source Edition (OSE), as … … 1328 1328 PVM pVM = pVCpu->CTX_SUFF(pVM); 1329 1329 uint64_t const uOldEfer = pVCpu->cpum.s.Guest.msrEFER; 1330 uint32_t const fExtFeatures = pVM->cpum.s.aGuestCpuId Ext[0].eax >= 0x800000011331 ? pVM->cpum.s.aGuestCpuId Ext[1].edx1330 uint32_t const fExtFeatures = pVM->cpum.s.aGuestCpuIdPatmExt[0].eax >= 0x80000001 1331 ? pVM->cpum.s.aGuestCpuIdPatmExt[1].edx 1332 1332 : 0; 1333 1333 uint64_t fMask = 0; -
trunk/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp
r53467 r54674 5 5 6 6 /* 7 * Copyright (C) 2006-201 4Oracle Corporation7 * Copyright (C) 2006-2015 Oracle Corporation 8 8 * 9 9 * This file is part of VirtualBox Open Source Edition (OSE), as … … 1212 1212 1213 1213 PCCPUMCPUID pCpuId; 1214 if (iLeaf < RT_ELEMENTS(pVM->cpum.s.aGuestCpuId Std))1215 pCpuId = &pVM->cpum.s.aGuestCpuId Std[iLeaf];1216 else if (iLeaf - UINT32_C(0x80000000) < RT_ELEMENTS(pVM->cpum.s.aGuestCpuId Ext))1217 pCpuId = &pVM->cpum.s.aGuestCpuId Ext[iLeaf - UINT32_C(0x80000000)];1214 if (iLeaf < RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmStd)) 1215 pCpuId = &pVM->cpum.s.aGuestCpuIdPatmStd[iLeaf]; 1216 else if (iLeaf - UINT32_C(0x80000000) < RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmExt)) 1217 pCpuId = &pVM->cpum.s.aGuestCpuIdPatmExt[iLeaf - UINT32_C(0x80000000)]; 1218 1218 else if ( iLeaf - UINT32_C(0x40000000) < 0x100 /** @todo Fix this later: Hyper-V says 0x400000FF is the last valid leaf. */ 1219 && (pVCpu->CTX_SUFF(pVM)->cpum.s.aGuestCpuId Std[1].ecx & X86_CPUID_FEATURE_ECX_HVP)) /* Only report if HVP bit set. */1219 && (pVCpu->CTX_SUFF(pVM)->cpum.s.aGuestCpuIdPatmStd[1].ecx & X86_CPUID_FEATURE_ECX_HVP)) /* Only report if HVP bit set. */ 1220 1220 { 1221 1221 PCPUMCPUIDLEAF pHyperLeaf = cpumCpuIdGetLeaf(pVM, iLeaf, 0 /* uSubLeaf */); … … 1233 1233 return; 1234 1234 } 1235 else if (iLeaf - UINT32_C(0xc0000000) < RT_ELEMENTS(pVM->cpum.s.aGuestCpuId Centaur))1236 pCpuId = &pVM->cpum.s.aGuestCpuId Centaur[iLeaf - UINT32_C(0xc0000000)];1235 else if (iLeaf - UINT32_C(0xc0000000) < RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmCentaur)) 1236 pCpuId = &pVM->cpum.s.aGuestCpuIdPatmCentaur[iLeaf - UINT32_C(0xc0000000)]; 1237 1237 else 1238 pCpuId = &pVM->cpum.s.GuestCpuId Def;1238 pCpuId = &pVM->cpum.s.GuestCpuIdPatmDef; 1239 1239 1240 1240 uint32_t cCurrentCacheIndex = *pEcx; … … 1309 1309 } 1310 1310 1311 /**1312 * Gets a number of standard CPUID leafs.1313 *1314 * @returns Number of leafs.1315 * @param pVM Pointer to the VM.1316 * @remark Intended for PATM.1317 */1318 VMMDECL(uint32_t) CPUMGetGuestCpuIdStdMax(PVM pVM)1319 {1320 return RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdStd);1321 }1322 1323 1324 /**1325 * Gets a number of extended CPUID leafs.1326 *1327 * @returns Number of leafs.1328 * @param pVM Pointer to the VM.1329 * @remark Intended for PATM.1330 */1331 VMMDECL(uint32_t) CPUMGetGuestCpuIdExtMax(PVM pVM)1332 {1333 return RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdExt);1334 }1335 1336 1337 /**1338 * Gets a number of centaur CPUID leafs.1339 *1340 * @returns Number of leafs.1341 * @param pVM Pointer to the VM.1342 * @remark Intended for PATM.1343 */1344 VMMDECL(uint32_t) CPUMGetGuestCpuIdCentaurMax(PVM pVM)1345 {1346 return RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdCentaur);1347 }1348 1349 1311 1350 1312 /** … … 1366 1328 pLeaf = cpumCpuIdGetLeaf(pVM, UINT32_C(0x00000001), 0); 1367 1329 if (pLeaf) 1368 pVM->cpum.s.aGuestCpuId Std[1].edx = pLeaf->uEdx |= X86_CPUID_FEATURE_EDX_APIC;1330 pVM->cpum.s.aGuestCpuIdPatmStd[1].edx = pLeaf->uEdx |= X86_CPUID_FEATURE_EDX_APIC; 1369 1331 1370 1332 pLeaf = cpumCpuIdGetLeaf(pVM, UINT32_C(0x80000001), 0); 1371 1333 if ( pLeaf 1372 1334 && pVM->cpum.s.GuestFeatures.enmCpuVendor == CPUMCPUVENDOR_AMD) 1373 pVM->cpum.s.aGuestCpuId Ext[1].edx = pLeaf->uEdx |= X86_CPUID_AMD_FEATURE_EDX_APIC;1335 pVM->cpum.s.aGuestCpuIdPatmExt[1].edx = pLeaf->uEdx |= X86_CPUID_AMD_FEATURE_EDX_APIC; 1374 1336 1375 1337 pVM->cpum.s.GuestFeatures.fApic = 1; … … 1383 1345 pLeaf = cpumCpuIdGetLeaf(pVM, UINT32_C(0x00000001), 0); 1384 1346 if (pLeaf) 1385 pVM->cpum.s.aGuestCpuId Std[1].ecx = pLeaf->uEcx |= X86_CPUID_FEATURE_ECX_X2APIC;1347 pVM->cpum.s.aGuestCpuIdPatmStd[1].ecx = pLeaf->uEcx |= X86_CPUID_FEATURE_ECX_X2APIC; 1386 1348 pVM->cpum.s.GuestFeatures.fX2Apic = 1; 1387 1349 LogRel(("CPUM: SetGuestCpuIdFeature: Enabled x2APIC\n")); … … 1401 1363 pLeaf = cpumCpuIdGetLeaf(pVM, UINT32_C(0x00000001), 0); 1402 1364 if (pLeaf) 1403 pVM->cpum.s.aGuestCpuId Std[1].edx = pLeaf->uEdx |= X86_CPUID_FEATURE_EDX_SEP;1365 pVM->cpum.s.aGuestCpuIdPatmStd[1].edx = pLeaf->uEdx |= X86_CPUID_FEATURE_EDX_SEP; 1404 1366 pVM->cpum.s.GuestFeatures.fSysEnter = 1; 1405 1367 LogRel(("CPUM: SetGuestCpuIdFeature: Enabled SYSENTER/EXIT\n")); … … 1428 1390 1429 1391 /* Valid for both Intel and AMD CPUs, although only in 64 bits mode for Intel. */ 1430 pVM->cpum.s.aGuestCpuId Ext[1].edx = pLeaf->uEdx |= X86_CPUID_EXT_FEATURE_EDX_SYSCALL;1392 pVM->cpum.s.aGuestCpuIdPatmExt[1].edx = pLeaf->uEdx |= X86_CPUID_EXT_FEATURE_EDX_SYSCALL; 1431 1393 pVM->cpum.s.GuestFeatures.fSysCall = 1; 1432 1394 LogRel(("CPUM: SetGuestCpuIdFeature: Enabled SYSCALL/RET\n")); … … 1446 1408 pLeaf = cpumCpuIdGetLeaf(pVM, UINT32_C(0x00000001), 0); 1447 1409 if (pLeaf) 1448 pVM->cpum.s.aGuestCpuId Std[1].edx = pLeaf->uEdx |= X86_CPUID_FEATURE_EDX_PAE;1410 pVM->cpum.s.aGuestCpuIdPatmStd[1].edx = pLeaf->uEdx |= X86_CPUID_FEATURE_EDX_PAE; 1449 1411 1450 1412 pLeaf = cpumCpuIdGetLeaf(pVM, UINT32_C(0x80000001), 0); 1451 1413 if ( pLeaf 1452 1414 && pVM->cpum.s.GuestFeatures.enmCpuVendor == CPUMCPUVENDOR_AMD) 1453 pVM->cpum.s.aGuestCpuId Ext[1].edx = pLeaf->uEdx |= X86_CPUID_AMD_FEATURE_EDX_PAE;1415 pVM->cpum.s.aGuestCpuIdPatmExt[1].edx = pLeaf->uEdx |= X86_CPUID_AMD_FEATURE_EDX_PAE; 1454 1416 1455 1417 pVM->cpum.s.GuestFeatures.fPae = 1; … … 1471 1433 1472 1434 /* Valid for both Intel and AMD. */ 1473 pVM->cpum.s.aGuestCpuId Ext[1].edx = pLeaf->uEdx |= X86_CPUID_EXT_FEATURE_EDX_LONG_MODE;1435 pVM->cpum.s.aGuestCpuIdPatmExt[1].edx = pLeaf->uEdx |= X86_CPUID_EXT_FEATURE_EDX_LONG_MODE; 1474 1436 pVM->cpum.s.GuestFeatures.fLongMode = 1; 1475 1437 LogRel(("CPUM: SetGuestCpuIdFeature: Enabled LONG MODE\n")); … … 1490 1452 1491 1453 /* Valid for both Intel and AMD. */ 1492 pVM->cpum.s.aGuestCpuId Ext[1].edx = pLeaf->uEdx |= X86_CPUID_EXT_FEATURE_EDX_NX;1454 pVM->cpum.s.aGuestCpuIdPatmExt[1].edx = pLeaf->uEdx |= X86_CPUID_EXT_FEATURE_EDX_NX; 1493 1455 pVM->cpum.s.GuestFeatures.fNoExecute = 1; 1494 1456 LogRel(("CPUM: SetGuestCpuIdFeature: Enabled NX\n")); … … 1510 1472 1511 1473 /* Valid for both Intel and AMD. */ 1512 pVM->cpum.s.aGuestCpuId Ext[1].ecx = pLeaf->uEcx |= X86_CPUID_EXT_FEATURE_ECX_LAHF_SAHF;1474 pVM->cpum.s.aGuestCpuIdPatmExt[1].ecx = pLeaf->uEcx |= X86_CPUID_EXT_FEATURE_ECX_LAHF_SAHF; 1513 1475 pVM->cpum.s.GuestFeatures.fLahfSahf = 1; 1514 1476 LogRel(("CPUM: SetGuestCpuIdFeature: Enabled LAHF/SAHF\n")); … … 1523 1485 pLeaf = cpumCpuIdGetLeaf(pVM, UINT32_C(0x00000001), 0); 1524 1486 if (pLeaf) 1525 pVM->cpum.s.aGuestCpuId Std[1].edx = pLeaf->uEdx |= X86_CPUID_FEATURE_EDX_PAT;1487 pVM->cpum.s.aGuestCpuIdPatmStd[1].edx = pLeaf->uEdx |= X86_CPUID_FEATURE_EDX_PAT; 1526 1488 1527 1489 pLeaf = cpumCpuIdGetLeaf(pVM, UINT32_C(0x80000001), 0); 1528 1490 if ( pLeaf 1529 1491 && pVM->cpum.s.GuestFeatures.enmCpuVendor == CPUMCPUVENDOR_AMD) 1530 pVM->cpum.s.aGuestCpuId Ext[1].edx = pLeaf->uEdx |= X86_CPUID_AMD_FEATURE_EDX_PAT;1492 pVM->cpum.s.aGuestCpuIdPatmExt[1].edx = pLeaf->uEdx |= X86_CPUID_AMD_FEATURE_EDX_PAT; 1531 1493 1532 1494 pVM->cpum.s.GuestFeatures.fPat = 1; … … 1550 1512 1551 1513 /* Valid for both Intel and AMD. */ 1552 pVM->cpum.s.aGuestCpuId Ext[1].edx = pLeaf->uEdx |= X86_CPUID_EXT_FEATURE_EDX_RDTSCP;1514 pVM->cpum.s.aGuestCpuIdPatmExt[1].edx = pLeaf->uEdx |= X86_CPUID_EXT_FEATURE_EDX_RDTSCP; 1553 1515 pVM->cpum.s.HostFeatures.fRdTscP = 1; 1554 1516 LogRel(("CPUM: SetGuestCpuIdFeature: Enabled RDTSCP.\n")); … … 1561 1523 pLeaf = cpumCpuIdGetLeaf(pVM, UINT32_C(0x00000001), 0); 1562 1524 if (pLeaf) 1563 pVM->cpum.s.aGuestCpuId Std[1].ecx = pLeaf->uEcx |= X86_CPUID_FEATURE_ECX_HVP;1525 pVM->cpum.s.aGuestCpuIdPatmStd[1].ecx = pLeaf->uEcx |= X86_CPUID_FEATURE_ECX_HVP; 1564 1526 pVM->cpum.s.GuestFeatures.fHypervisorPresent = 1; 1565 1527 LogRel(("CPUM: SetGuestCpuIdFeature: Enabled Hypervisor Present bit\n")); … … 1580 1542 1581 1543 /* Valid for both Intel and AMD. */ 1582 pVM->cpum.s.aGuestCpuId Std[5].ecx = pLeaf->uEcx |= X86_CPUID_MWAIT_ECX_EXT | X86_CPUID_MWAIT_ECX_BREAKIRQIF0;1544 pVM->cpum.s.aGuestCpuIdPatmStd[5].ecx = pLeaf->uEcx |= X86_CPUID_MWAIT_ECX_EXT | X86_CPUID_MWAIT_ECX_BREAKIRQIF0; 1583 1545 pVM->cpum.s.GuestFeatures.fMWaitExtensions = 1; 1584 1546 LogRel(("CPUM: SetGuestCpuIdFeature: Enabled MWAIT Extensions.\n")); … … 1645 1607 pLeaf = cpumCpuIdGetLeaf(pVM, UINT32_C(0x00000001), 0); 1646 1608 if (pLeaf) 1647 pVM->cpum.s.aGuestCpuId Std[1].edx = pLeaf->uEdx &= ~X86_CPUID_FEATURE_EDX_APIC;1609 pVM->cpum.s.aGuestCpuIdPatmStd[1].edx = pLeaf->uEdx &= ~X86_CPUID_FEATURE_EDX_APIC; 1648 1610 1649 1611 pLeaf = cpumCpuIdGetLeaf(pVM, UINT32_C(0x80000001), 0); 1650 1612 if ( pLeaf 1651 1613 && pVM->cpum.s.GuestFeatures.enmCpuVendor == CPUMCPUVENDOR_AMD) 1652 pVM->cpum.s.aGuestCpuId Ext[1].edx = pLeaf->uEdx &= ~X86_CPUID_AMD_FEATURE_EDX_APIC;1614 pVM->cpum.s.aGuestCpuIdPatmExt[1].edx = pLeaf->uEdx &= ~X86_CPUID_AMD_FEATURE_EDX_APIC; 1653 1615 1654 1616 pVM->cpum.s.GuestFeatures.fApic = 0; … … 1659 1621 pLeaf = cpumCpuIdGetLeaf(pVM, UINT32_C(0x00000001), 0); 1660 1622 if (pLeaf) 1661 pVM->cpum.s.aGuestCpuId Std[1].ecx = pLeaf->uEcx &= ~X86_CPUID_FEATURE_ECX_X2APIC;1623 pVM->cpum.s.aGuestCpuIdPatmStd[1].ecx = pLeaf->uEcx &= ~X86_CPUID_FEATURE_ECX_X2APIC; 1662 1624 pVM->cpum.s.GuestFeatures.fX2Apic = 0; 1663 1625 Log(("CPUM: ClearGuestCpuIdFeature: Disabled x2APIC\n")); … … 1667 1629 pLeaf = cpumCpuIdGetLeaf(pVM, UINT32_C(0x00000001), 0); 1668 1630 if (pLeaf) 1669 pVM->cpum.s.aGuestCpuId Std[1].edx = pLeaf->uEdx &= ~X86_CPUID_FEATURE_EDX_PAE;1631 pVM->cpum.s.aGuestCpuIdPatmStd[1].edx = pLeaf->uEdx &= ~X86_CPUID_FEATURE_EDX_PAE; 1670 1632 1671 1633 pLeaf = cpumCpuIdGetLeaf(pVM, UINT32_C(0x80000001), 0); 1672 1634 if ( pLeaf 1673 1635 && pVM->cpum.s.GuestFeatures.enmCpuVendor == CPUMCPUVENDOR_AMD) 1674 pVM->cpum.s.aGuestCpuId Ext[1].edx = pLeaf->uEdx &= ~X86_CPUID_AMD_FEATURE_EDX_PAE;1636 pVM->cpum.s.aGuestCpuIdPatmExt[1].edx = pLeaf->uEdx &= ~X86_CPUID_AMD_FEATURE_EDX_PAE; 1675 1637 1676 1638 pVM->cpum.s.GuestFeatures.fPae = 0; … … 1681 1643 pLeaf = cpumCpuIdGetLeaf(pVM, UINT32_C(0x00000001), 0); 1682 1644 if (pLeaf) 1683 pVM->cpum.s.aGuestCpuId Std[1].edx = pLeaf->uEdx &= ~X86_CPUID_FEATURE_EDX_PAT;1645 pVM->cpum.s.aGuestCpuIdPatmStd[1].edx = pLeaf->uEdx &= ~X86_CPUID_FEATURE_EDX_PAT; 1684 1646 1685 1647 pLeaf = cpumCpuIdGetLeaf(pVM, UINT32_C(0x80000001), 0); 1686 1648 if ( pLeaf 1687 1649 && pVM->cpum.s.GuestFeatures.enmCpuVendor == CPUMCPUVENDOR_AMD) 1688 pVM->cpum.s.aGuestCpuId Ext[1].edx = pLeaf->uEdx &= ~X86_CPUID_AMD_FEATURE_EDX_PAT;1650 pVM->cpum.s.aGuestCpuIdPatmExt[1].edx = pLeaf->uEdx &= ~X86_CPUID_AMD_FEATURE_EDX_PAT; 1689 1651 1690 1652 pVM->cpum.s.GuestFeatures.fPat = 0; … … 1695 1657 pLeaf = cpumCpuIdGetLeaf(pVM, UINT32_C(0x80000001), 0); 1696 1658 if (pLeaf) 1697 pVM->cpum.s.aGuestCpuId Ext[1].edx = pLeaf->uEdx &= ~X86_CPUID_EXT_FEATURE_EDX_LONG_MODE;1659 pVM->cpum.s.aGuestCpuIdPatmExt[1].edx = pLeaf->uEdx &= ~X86_CPUID_EXT_FEATURE_EDX_LONG_MODE; 1698 1660 pVM->cpum.s.GuestFeatures.fLongMode = 0; 1699 1661 break; … … 1702 1664 pLeaf = cpumCpuIdGetLeaf(pVM, UINT32_C(0x80000001), 0); 1703 1665 if (pLeaf) 1704 pVM->cpum.s.aGuestCpuId Ext[1].ecx = pLeaf->uEcx &= ~X86_CPUID_EXT_FEATURE_ECX_LAHF_SAHF;1666 pVM->cpum.s.aGuestCpuIdPatmExt[1].ecx = pLeaf->uEcx &= ~X86_CPUID_EXT_FEATURE_ECX_LAHF_SAHF; 1705 1667 pVM->cpum.s.GuestFeatures.fLahfSahf = 0; 1706 1668 break; … … 1709 1671 pLeaf = cpumCpuIdGetLeaf(pVM, UINT32_C(0x80000001), 0); 1710 1672 if (pLeaf) 1711 pVM->cpum.s.aGuestCpuId Ext[1].edx = pLeaf->uEdx &= ~X86_CPUID_EXT_FEATURE_EDX_RDTSCP;1673 pVM->cpum.s.aGuestCpuIdPatmExt[1].edx = pLeaf->uEdx &= ~X86_CPUID_EXT_FEATURE_EDX_RDTSCP; 1712 1674 pVM->cpum.s.GuestFeatures.fRdTscP = 0; 1713 1675 Log(("CPUM: ClearGuestCpuIdFeature: Disabled RDTSCP!\n")); … … 1717 1679 pLeaf = cpumCpuIdGetLeaf(pVM, UINT32_C(0x00000001), 0); 1718 1680 if (pLeaf) 1719 pVM->cpum.s.aGuestCpuId Std[1].ecx = pLeaf->uEcx &= ~X86_CPUID_FEATURE_ECX_HVP;1681 pVM->cpum.s.aGuestCpuIdPatmStd[1].ecx = pLeaf->uEcx &= ~X86_CPUID_FEATURE_ECX_HVP; 1720 1682 pVM->cpum.s.GuestFeatures.fHypervisorPresent = 0; 1721 1683 break; … … 1724 1686 pLeaf = cpumCpuIdGetLeaf(pVM, UINT32_C(0x00000005), 0); 1725 1687 if (pLeaf) 1726 pVM->cpum.s.aGuestCpuId Std[5].ecx = pLeaf->uEcx &= ~(X86_CPUID_MWAIT_ECX_EXT | X86_CPUID_MWAIT_ECX_BREAKIRQIF0);1688 pVM->cpum.s.aGuestCpuIdPatmStd[5].ecx = pLeaf->uEcx &= ~(X86_CPUID_MWAIT_ECX_EXT | X86_CPUID_MWAIT_ECX_BREAKIRQIF0); 1727 1689 pVM->cpum.s.GuestFeatures.fMWaitExtensions = 0; 1728 1690 Log(("CPUM: ClearGuestCpuIdFeature: Disabled MWAIT Extensions!\n")); -
trunk/src/VBox/VMM/VMMAll/CPUMStack.cpp
r44528 r54674 5 5 6 6 /* 7 * Copyright (C) 2006-201 2Oracle Corporation7 * Copyright (C) 2006-2015 Oracle Corporation 8 8 * 9 9 * This file is part of VirtualBox Open Source Edition (OSE), as -
trunk/src/VBox/VMM/VMMR0/CPUMR0.cpp
r54537 r54674 5 5 6 6 /* 7 * Copyright (C) 2006-201 3Oracle Corporation7 * Copyright (C) 2006-2015 Oracle Corporation 8 8 * 9 9 * This file is part of VirtualBox Open Source Edition (OSE), as … … 158 158 uint32_t uLeaf = g_aCpuidUnifyBits[i].uLeaf; 159 159 PCPUMCPUID pLegacyLeaf; 160 if (uLeaf < RT_ELEMENTS(pVM->cpum.s.aGuestCpuId Std))161 pLegacyLeaf = &pVM->cpum.s.aGuestCpuId Std[uLeaf];162 else if (uLeaf - UINT32_C(0x80000000) < RT_ELEMENTS(pVM->cpum.s.aGuestCpuId Ext))163 pLegacyLeaf = &pVM->cpum.s.aGuestCpuId Ext[uLeaf - UINT32_C(0x80000000)];164 else if (uLeaf - UINT32_C(0xc0000000) < RT_ELEMENTS(pVM->cpum.s.aGuestCpuId Centaur))165 pLegacyLeaf = &pVM->cpum.s.aGuestCpuId Centaur[uLeaf - UINT32_C(0xc0000000)];160 if (uLeaf < RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmStd)) 161 pLegacyLeaf = &pVM->cpum.s.aGuestCpuIdPatmStd[uLeaf]; 162 else if (uLeaf - UINT32_C(0x80000000) < RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmExt)) 163 pLegacyLeaf = &pVM->cpum.s.aGuestCpuIdPatmExt[uLeaf - UINT32_C(0x80000000)]; 164 else if (uLeaf - UINT32_C(0xc0000000) < RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmCentaur)) 165 pLegacyLeaf = &pVM->cpum.s.aGuestCpuIdPatmCentaur[uLeaf - UINT32_C(0xc0000000)]; 166 166 else 167 167 continue; … … 291 291 { 292 292 PCPUMCPUID pLegacyLeaf; 293 if (uLeaf < RT_ELEMENTS(pVM->cpum.s.aGuestCpuId Std))294 pLegacyLeaf = &pVM->cpum.s.aGuestCpuId Std[uLeaf];295 else if (uLeaf - UINT32_C(0x80000000) < RT_ELEMENTS(pVM->cpum.s.aGuestCpuId Ext))296 pLegacyLeaf = &pVM->cpum.s.aGuestCpuId Ext[uLeaf - UINT32_C(0x80000000)];297 else if (uLeaf - UINT32_C(0xc0000000) < RT_ELEMENTS(pVM->cpum.s.aGuestCpuId Centaur))298 pLegacyLeaf = &pVM->cpum.s.aGuestCpuId Centaur[uLeaf - UINT32_C(0xc0000000)];293 if (uLeaf < RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmStd)) 294 pLegacyLeaf = &pVM->cpum.s.aGuestCpuIdPatmStd[uLeaf]; 295 else if (uLeaf - UINT32_C(0x80000000) < RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmExt)) 296 pLegacyLeaf = &pVM->cpum.s.aGuestCpuIdPatmExt[uLeaf - UINT32_C(0x80000000)]; 297 else if (uLeaf - UINT32_C(0xc0000000) < RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmCentaur)) 298 pLegacyLeaf = &pVM->cpum.s.aGuestCpuIdPatmCentaur[uLeaf - UINT32_C(0xc0000000)]; 299 299 else 300 300 continue; -
trunk/src/VBox/VMM/VMMR0/CPUMR0A.asm
r52465 r54674 5 5 6 6 ; 7 ; Copyright (C) 2006-201 3Oracle Corporation7 ; Copyright (C) 2006-2015 Oracle Corporation 8 8 ; 9 9 ; This file is part of VirtualBox Open Source Edition (OSE), as -
trunk/src/VBox/VMM/VMMR0/CPUMR0UnusedA.asm
r50661 r54674 5 5 6 6 ; 7 ; Copyright (C) 2006-201 1Oracle Corporation7 ; Copyright (C) 2006-2015 Oracle Corporation 8 8 ; 9 9 ; This file is part of VirtualBox Open Source Edition (OSE), as -
trunk/src/VBox/VMM/VMMR3/CPUM.cpp
r54561 r54674 718 718 { 719 719 /* 720 * Workaround for missing cpuid(0) patches when leaf 4 returns GuestCpuId Def:720 * Workaround for missing cpuid(0) patches when leaf 4 returns GuestCpuIdPatmDef: 721 721 * If we miss to patch a cpuid(0).eax then Linux tries to determine the number 722 722 * of processors from (cpuid(4).eax >> 26) + 1. … … 727 727 if (!fHWVirtExEnabled) 728 728 { 729 Assert( pVM->cpum.s.aGuestCpuId Std[4].eax == 0730 || pVM->cpum.s.aGuestCpuId Std[0].eax < 0x4);731 pVM->cpum.s.aGuestCpuId Std[4].eax = 0;729 Assert( pVM->cpum.s.aGuestCpuIdPatmStd[4].eax == 0 730 || pVM->cpum.s.aGuestCpuIdPatmStd[0].eax < 0x4); 731 pVM->cpum.s.aGuestCpuIdPatmStd[4].eax = 0; 732 732 } 733 733 } … … 1166 1166 uint32_t cElements; 1167 1167 int rc = SSMR3GetU32(pSSM, &cElements); AssertRCReturn(rc, rc); 1168 if (cElements > RT_ELEMENTS(pVM->cpum.s.aGuestCpuId Std))1168 if (cElements > RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmStd)) 1169 1169 return VERR_SSM_DATA_UNIT_FORMAT_CHANGED; 1170 SSMR3GetMem(pSSM, &pVM->cpum.s.aGuestCpuId Std[0], cElements*sizeof(pVM->cpum.s.aGuestCpuIdStd[0]));1170 SSMR3GetMem(pSSM, &pVM->cpum.s.aGuestCpuIdPatmStd[0], cElements*sizeof(pVM->cpum.s.aGuestCpuIdPatmStd[0])); 1171 1171 1172 1172 rc = SSMR3GetU32(pSSM, &cElements); AssertRCReturn(rc, rc); 1173 if (cElements != RT_ELEMENTS(pVM->cpum.s.aGuestCpuId Ext))1173 if (cElements != RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmExt)) 1174 1174 return VERR_SSM_DATA_UNIT_FORMAT_CHANGED; 1175 SSMR3GetMem(pSSM, &pVM->cpum.s.aGuestCpuId Ext[0], sizeof(pVM->cpum.s.aGuestCpuIdExt));1175 SSMR3GetMem(pSSM, &pVM->cpum.s.aGuestCpuIdPatmExt[0], sizeof(pVM->cpum.s.aGuestCpuIdPatmExt)); 1176 1176 1177 1177 rc = SSMR3GetU32(pSSM, &cElements); AssertRCReturn(rc, rc); 1178 if (cElements != RT_ELEMENTS(pVM->cpum.s.aGuestCpuId Centaur))1178 if (cElements != RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmCentaur)) 1179 1179 return VERR_SSM_DATA_UNIT_FORMAT_CHANGED; 1180 SSMR3GetMem(pSSM, &pVM->cpum.s.aGuestCpuId Centaur[0], sizeof(pVM->cpum.s.aGuestCpuIdCentaur));1181 1182 SSMR3GetMem(pSSM, &pVM->cpum.s.GuestCpuId Def, sizeof(pVM->cpum.s.GuestCpuIdDef));1180 SSMR3GetMem(pSSM, &pVM->cpum.s.aGuestCpuIdPatmCentaur[0], sizeof(pVM->cpum.s.aGuestCpuIdPatmCentaur)); 1181 1182 SSMR3GetMem(pSSM, &pVM->cpum.s.GuestCpuIdPatmDef, sizeof(pVM->cpum.s.GuestCpuIdPatmDef)); 1183 1183 1184 1184 /* … … 1232 1232 * features in the future. 1233 1233 */ 1234 AssertRelease(!(pVM->cpum.s.aGuestCpuId Std[1].ecx &1234 AssertRelease(!(pVM->cpum.s.aGuestCpuIdPatmStd[1].ecx & 1235 1235 ( X86_CPUID_FEATURE_ECX_DTES64 1236 1236 | X86_CPUID_FEATURE_ECX_VMX … … 1875 1875 CPUMCPUID Host; 1876 1876 CPUMCPUID Guest; 1877 unsigned cStdMax = pVM->cpum.s.aGuestCpuId Std[0].eax;1877 unsigned cStdMax = pVM->cpum.s.aGuestCpuIdPatmStd[0].eax; 1878 1878 1879 1879 uint32_t cStdHstMax; … … 1881 1881 ASMCpuIdExSlow(0, 0, 0, 0, &cStdHstMax, &dummy, &dummy, &dummy); 1882 1882 1883 unsigned cStdLstMax = RT_MAX(RT_ELEMENTS(pVM->cpum.s.aGuestCpuId Std), cStdHstMax);1883 unsigned cStdLstMax = RT_MAX(RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmStd), cStdHstMax); 1884 1884 1885 1885 pHlp->pfnPrintf(pHlp, … … 1888 1888 for (unsigned i = 0; i <= cStdLstMax ; i++) 1889 1889 { 1890 if (i < RT_ELEMENTS(pVM->cpum.s.aGuestCpuId Std))1890 if (i < RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmStd)) 1891 1891 { 1892 Guest = pVM->cpum.s.aGuestCpuId Std[i];1892 Guest = pVM->cpum.s.aGuestCpuIdPatmStd[i]; 1893 1893 ASMCpuIdExSlow(i, 0, 0, 0, &Host.eax, &Host.ebx, &Host.ecx, &Host.edx); 1894 1894 … … 1915 1915 if (iVerbosity) 1916 1916 { 1917 Guest = pVM->cpum.s.aGuestCpuId Std[0];1917 Guest = pVM->cpum.s.aGuestCpuIdPatmStd[0]; 1918 1918 pHlp->pfnPrintf(pHlp, 1919 1919 "Name: %.04s%.04s%.04s\n" … … 1925 1925 * Get Features. 1926 1926 */ 1927 bool const fIntel = ASMIsIntelCpuEx(pVM->cpum.s.aGuestCpuId Std[0].ebx,1928 pVM->cpum.s.aGuestCpuId Std[0].ecx,1929 pVM->cpum.s.aGuestCpuId Std[0].edx);1927 bool const fIntel = ASMIsIntelCpuEx(pVM->cpum.s.aGuestCpuIdPatmStd[0].ebx, 1928 pVM->cpum.s.aGuestCpuIdPatmStd[0].ecx, 1929 pVM->cpum.s.aGuestCpuIdPatmStd[0].edx); 1930 1930 if (cStdMax >= 1 && iVerbosity) 1931 1931 { 1932 1932 static const char * const s_apszTypes[4] = { "primary", "overdrive", "MP", "reserved" }; 1933 1933 1934 Guest = pVM->cpum.s.aGuestCpuId Std[1];1934 Guest = pVM->cpum.s.aGuestCpuIdPatmStd[1]; 1935 1935 uint32_t uEAX = Guest.eax; 1936 1936 … … 2112 2112 * Implemented after AMD specs. 2113 2113 */ 2114 unsigned cExtMax = pVM->cpum.s.aGuestCpuId Ext[0].eax & 0xffff;2114 unsigned cExtMax = pVM->cpum.s.aGuestCpuIdPatmExt[0].eax & 0xffff; 2115 2115 2116 2116 pHlp->pfnPrintf(pHlp, … … 2119 2119 " Function eax ebx ecx edx\n"); 2120 2120 bool fSupportsInvariantTsc = false; 2121 for (unsigned i = 0; i < RT_ELEMENTS(pVM->cpum.s.aGuestCpuId Ext); i++)2122 { 2123 Guest = pVM->cpum.s.aGuestCpuId Ext[i];2121 for (unsigned i = 0; i < RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmExt); i++) 2122 { 2123 Guest = pVM->cpum.s.aGuestCpuIdPatmExt[i]; 2124 2124 ASMCpuIdExSlow(0x80000000 | i, 0, 0, 0, &Host.eax, &Host.ebx, &Host.ecx, &Host.edx); 2125 2125 … … 2142 2142 if (iVerbosity) 2143 2143 { 2144 Guest = pVM->cpum.s.aGuestCpuId Ext[0];2144 Guest = pVM->cpum.s.aGuestCpuIdPatmExt[0]; 2145 2145 pHlp->pfnPrintf(pHlp, 2146 2146 "Ext Name: %.4s%.4s%.4s\n" … … 2151 2151 if (iVerbosity && cExtMax >= 1) 2152 2152 { 2153 Guest = pVM->cpum.s.aGuestCpuId Ext[1];2153 Guest = pVM->cpum.s.aGuestCpuIdPatmExt[1]; 2154 2154 uint32_t uEAX = Guest.eax; 2155 2155 pHlp->pfnPrintf(pHlp, … … 2286 2286 char szString[4*4*3+1] = {0}; 2287 2287 uint32_t *pu32 = (uint32_t *)szString; 2288 *pu32++ = pVM->cpum.s.aGuestCpuId Ext[2].eax;2289 *pu32++ = pVM->cpum.s.aGuestCpuId Ext[2].ebx;2290 *pu32++ = pVM->cpum.s.aGuestCpuId Ext[2].ecx;2291 *pu32++ = pVM->cpum.s.aGuestCpuId Ext[2].edx;2288 *pu32++ = pVM->cpum.s.aGuestCpuIdPatmExt[2].eax; 2289 *pu32++ = pVM->cpum.s.aGuestCpuIdPatmExt[2].ebx; 2290 *pu32++ = pVM->cpum.s.aGuestCpuIdPatmExt[2].ecx; 2291 *pu32++ = pVM->cpum.s.aGuestCpuIdPatmExt[2].edx; 2292 2292 if (cExtMax >= 3) 2293 2293 { 2294 *pu32++ = pVM->cpum.s.aGuestCpuId Ext[3].eax;2295 *pu32++ = pVM->cpum.s.aGuestCpuId Ext[3].ebx;2296 *pu32++ = pVM->cpum.s.aGuestCpuId Ext[3].ecx;2297 *pu32++ = pVM->cpum.s.aGuestCpuId Ext[3].edx;2294 *pu32++ = pVM->cpum.s.aGuestCpuIdPatmExt[3].eax; 2295 *pu32++ = pVM->cpum.s.aGuestCpuIdPatmExt[3].ebx; 2296 *pu32++ = pVM->cpum.s.aGuestCpuIdPatmExt[3].ecx; 2297 *pu32++ = pVM->cpum.s.aGuestCpuIdPatmExt[3].edx; 2298 2298 } 2299 2299 if (cExtMax >= 4) 2300 2300 { 2301 *pu32++ = pVM->cpum.s.aGuestCpuId Ext[4].eax;2302 *pu32++ = pVM->cpum.s.aGuestCpuId Ext[4].ebx;2303 *pu32++ = pVM->cpum.s.aGuestCpuId Ext[4].ecx;2304 *pu32++ = pVM->cpum.s.aGuestCpuId Ext[4].edx;2301 *pu32++ = pVM->cpum.s.aGuestCpuIdPatmExt[4].eax; 2302 *pu32++ = pVM->cpum.s.aGuestCpuIdPatmExt[4].ebx; 2303 *pu32++ = pVM->cpum.s.aGuestCpuIdPatmExt[4].ecx; 2304 *pu32++ = pVM->cpum.s.aGuestCpuIdPatmExt[4].edx; 2305 2305 } 2306 2306 pHlp->pfnPrintf(pHlp, "Full Name: %s\n", szString); … … 2309 2309 if (iVerbosity && cExtMax >= 5) 2310 2310 { 2311 uint32_t uEAX = pVM->cpum.s.aGuestCpuId Ext[5].eax;2312 uint32_t uEBX = pVM->cpum.s.aGuestCpuId Ext[5].ebx;2313 uint32_t uECX = pVM->cpum.s.aGuestCpuId Ext[5].ecx;2314 uint32_t uEDX = pVM->cpum.s.aGuestCpuId Ext[5].edx;2311 uint32_t uEAX = pVM->cpum.s.aGuestCpuIdPatmExt[5].eax; 2312 uint32_t uEBX = pVM->cpum.s.aGuestCpuIdPatmExt[5].ebx; 2313 uint32_t uECX = pVM->cpum.s.aGuestCpuIdPatmExt[5].ecx; 2314 uint32_t uEDX = pVM->cpum.s.aGuestCpuIdPatmExt[5].edx; 2315 2315 char sz1[32]; 2316 2316 char sz2[32]; … … 2347 2347 if (iVerbosity && cExtMax >= 6) 2348 2348 { 2349 uint32_t uEAX = pVM->cpum.s.aGuestCpuId Ext[6].eax;2350 uint32_t uEBX = pVM->cpum.s.aGuestCpuId Ext[6].ebx;2351 uint32_t uEDX = pVM->cpum.s.aGuestCpuId Ext[6].edx;2349 uint32_t uEAX = pVM->cpum.s.aGuestCpuIdPatmExt[6].eax; 2350 uint32_t uEBX = pVM->cpum.s.aGuestCpuIdPatmExt[6].ebx; 2351 uint32_t uEDX = pVM->cpum.s.aGuestCpuIdPatmExt[6].edx; 2352 2352 2353 2353 pHlp->pfnPrintf(pHlp, … … 2374 2374 if (iVerbosity && cExtMax >= 7) 2375 2375 { 2376 uint32_t uEDX = pVM->cpum.s.aGuestCpuId Ext[7].edx;2376 uint32_t uEDX = pVM->cpum.s.aGuestCpuIdPatmExt[7].edx; 2377 2377 2378 2378 pHlp->pfnPrintf(pHlp, "Host Invariant-TSC support: %RTbool\n", fSupportsInvariantTsc); … … 2396 2396 if (iVerbosity && cExtMax >= 8) 2397 2397 { 2398 uint32_t uEAX = pVM->cpum.s.aGuestCpuId Ext[8].eax;2399 uint32_t uECX = pVM->cpum.s.aGuestCpuId Ext[8].ecx;2398 uint32_t uEAX = pVM->cpum.s.aGuestCpuIdPatmExt[8].eax; 2399 uint32_t uECX = pVM->cpum.s.aGuestCpuIdPatmExt[8].ecx; 2400 2400 2401 2401 pHlp->pfnPrintf(pHlp, … … 2425 2425 if (cStdMax >= 1) 2426 2426 { 2427 Guest = pVM->cpum.s.aGuestCpuId Std[1];2427 Guest = pVM->cpum.s.aGuestCpuIdPatmStd[1]; 2428 2428 fGuestHvp = RT_BOOL(Guest.ecx & X86_CPUID_FEATURE_ECX_HVP); 2429 2429 } … … 2481 2481 * Centaur. 2482 2482 */ 2483 unsigned cCentaurMax = pVM->cpum.s.aGuestCpuId Centaur[0].eax & 0xffff;2483 unsigned cCentaurMax = pVM->cpum.s.aGuestCpuIdPatmCentaur[0].eax & 0xffff; 2484 2484 2485 2485 pHlp->pfnPrintf(pHlp, … … 2487 2487 " RAW Centaur CPUIDs\n" 2488 2488 " Function eax ebx ecx edx\n"); 2489 for (unsigned i = 0; i < RT_ELEMENTS(pVM->cpum.s.aGuestCpuId Centaur); i++)2490 { 2491 Guest = pVM->cpum.s.aGuestCpuId Centaur[i];2489 for (unsigned i = 0; i < RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmCentaur); i++) 2490 { 2491 Guest = pVM->cpum.s.aGuestCpuIdPatmCentaur[i]; 2492 2492 ASMCpuIdExSlow(0xc0000000 | i, 0, 0, 0, &Host.eax, &Host.ebx, &Host.ecx, &Host.edx); 2493 2493 … … 2505 2505 if (iVerbosity) 2506 2506 { 2507 Guest = pVM->cpum.s.aGuestCpuId Centaur[0];2507 Guest = pVM->cpum.s.aGuestCpuIdPatmCentaur[0]; 2508 2508 pHlp->pfnPrintf(pHlp, 2509 2509 "Centaur Supports: 0xc0000000-%#010x\n", … … 2514 2514 { 2515 2515 ASMCpuIdExSlow(0xc0000001, 0, 0, 0, &Host.eax, &Host.ebx, &Host.ecx, &Host.edx); 2516 uint32_t uEdxGst = pVM->cpum.s.aGuestCpuId Centaur[1].edx;2516 uint32_t uEdxGst = pVM->cpum.s.aGuestCpuIdPatmCentaur[1].edx; 2517 2517 uint32_t uEdxHst = Host.edx; 2518 2518 … … 2806 2806 2807 2807 /** 2808 * Gets a pointer to the array of standard CPUID leaves.2809 *2810 * CPUMR3GetGuestCpuIdStdMax() give the size of the array.2811 *2812 * @returns Pointer to the standard CPUID leaves (read-only).2813 * @param pVM Pointer to the VM.2814 * @remark Intended for PATM.2815 */2816 VMMR3DECL(RCPTRTYPE(PCCPUMCPUID)) CPUMR3GetGuestCpuIdStdRCPtr(PVM pVM)2817 {2818 return RCPTRTYPE(PCCPUMCPUID)VM_RC_ADDR(pVM, &pVM->cpum.s.aGuestCpuIdStd[0]);2819 }2820 2821 2822 /**2823 * Gets a pointer to the array of extended CPUID leaves.2824 *2825 * CPUMGetGuestCpuIdExtMax() give the size of the array.2826 *2827 * @returns Pointer to the extended CPUID leaves (read-only).2828 * @param pVM Pointer to the VM.2829 * @remark Intended for PATM.2830 */2831 VMMR3DECL(RCPTRTYPE(PCCPUMCPUID)) CPUMR3GetGuestCpuIdExtRCPtr(PVM pVM)2832 {2833 return (RCPTRTYPE(PCCPUMCPUID))VM_RC_ADDR(pVM, &pVM->cpum.s.aGuestCpuIdExt[0]);2834 }2835 2836 2837 /**2838 * Gets a pointer to the array of centaur CPUID leaves.2839 *2840 * CPUMGetGuestCpuIdCentaurMax() give the size of the array.2841 *2842 * @returns Pointer to the centaur CPUID leaves (read-only).2843 * @param pVM Pointer to the VM.2844 * @remark Intended for PATM.2845 */2846 VMMR3DECL(RCPTRTYPE(PCCPUMCPUID)) CPUMR3GetGuestCpuIdCentaurRCPtr(PVM pVM)2847 {2848 return (RCPTRTYPE(PCCPUMCPUID))VM_RC_ADDR(pVM, &pVM->cpum.s.aGuestCpuIdCentaur[0]);2849 }2850 2851 2852 /**2853 * Gets a pointer to the default CPUID leaf.2854 *2855 * @returns Pointer to the default CPUID leaf (read-only).2856 * @param pVM Pointer to the VM.2857 * @remark Intended for PATM.2858 */2859 VMMR3DECL(RCPTRTYPE(PCCPUMCPUID)) CPUMR3GetGuestCpuIdDefRCPtr(PVM pVM)2860 {2861 return (RCPTRTYPE(PCCPUMCPUID))VM_RC_ADDR(pVM, &pVM->cpum.s.GuestCpuIdDef);2862 }2863 2864 2865 /**2866 2808 * Enters REM, gets and resets the changed flags (CPUM_CHANGED_*). 2867 2809 * -
trunk/src/VBox/VMM/VMMR3/CPUMDbg.cpp
r54047 r54674 5 5 6 6 /* 7 * Copyright (C) 2010-201 2Oracle Corporation7 * Copyright (C) 2010-2015 Oracle Corporation 8 8 * 9 9 * This file is part of VirtualBox Open Source Edition (OSE), as -
trunk/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp
r54561 r54674 1798 1798 struct { PCPUMCPUID paCpuIds; uint32_t cCpuIds, uBase; } aOldRanges[] = 1799 1799 { 1800 { pCPUM->aGuestCpuId Std, RT_ELEMENTS(pCPUM->aGuestCpuIdStd), 0x00000000 },1801 { pCPUM->aGuestCpuId Ext, RT_ELEMENTS(pCPUM->aGuestCpuIdExt), 0x80000000 },1802 { pCPUM->aGuestCpuId Centaur, RT_ELEMENTS(pCPUM->aGuestCpuIdCentaur), 0xc0000000 },1800 { pCPUM->aGuestCpuIdPatmStd, RT_ELEMENTS(pCPUM->aGuestCpuIdPatmStd), 0x00000000 }, 1801 { pCPUM->aGuestCpuIdPatmExt, RT_ELEMENTS(pCPUM->aGuestCpuIdPatmExt), 0x80000000 }, 1802 { pCPUM->aGuestCpuIdPatmCentaur, RT_ELEMENTS(pCPUM->aGuestCpuIdPatmCentaur), 0xc0000000 }, 1803 1803 }; 1804 1804 for (uint32_t i = 0; i < RT_ELEMENTS(aOldRanges); i++) … … 1826 1826 } 1827 1827 1828 pCPUM->GuestCpuId Def = pCPUM->GuestInfo.DefCpuId;1828 pCPUM->GuestCpuIdPatmDef = pCPUM->GuestInfo.DefCpuId; 1829 1829 1830 1830 return VINF_SUCCESS; … … 2586 2586 * upon loading. 2587 2587 */ 2588 SSMR3PutU32(pSSM, RT_ELEMENTS(pVM->cpum.s.aGuestCpuId Std));2589 SSMR3PutMem(pSSM, &pVM->cpum.s.aGuestCpuId Std[0], sizeof(pVM->cpum.s.aGuestCpuIdStd));2590 2591 SSMR3PutU32(pSSM, RT_ELEMENTS(pVM->cpum.s.aGuestCpuId Ext));2592 SSMR3PutMem(pSSM, &pVM->cpum.s.aGuestCpuId Ext[0], sizeof(pVM->cpum.s.aGuestCpuIdExt));2593 2594 SSMR3PutU32(pSSM, RT_ELEMENTS(pVM->cpum.s.aGuestCpuId Centaur));2595 SSMR3PutMem(pSSM, &pVM->cpum.s.aGuestCpuId Centaur[0], sizeof(pVM->cpum.s.aGuestCpuIdCentaur));2596 2597 SSMR3PutMem(pSSM, &pVM->cpum.s.GuestCpuId Def, sizeof(pVM->cpum.s.GuestCpuIdDef));2588 SSMR3PutU32(pSSM, RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmStd)); 2589 SSMR3PutMem(pSSM, &pVM->cpum.s.aGuestCpuIdPatmStd[0], sizeof(pVM->cpum.s.aGuestCpuIdPatmStd)); 2590 2591 SSMR3PutU32(pSSM, RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmExt)); 2592 SSMR3PutMem(pSSM, &pVM->cpum.s.aGuestCpuIdPatmExt[0], sizeof(pVM->cpum.s.aGuestCpuIdPatmExt)); 2593 2594 SSMR3PutU32(pSSM, RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmCentaur)); 2595 SSMR3PutMem(pSSM, &pVM->cpum.s.aGuestCpuIdPatmCentaur[0], sizeof(pVM->cpum.s.aGuestCpuIdPatmCentaur)); 2596 2597 SSMR3PutMem(pSSM, &pVM->cpum.s.GuestCpuIdPatmDef, sizeof(pVM->cpum.s.GuestCpuIdPatmDef)); 2598 2598 2599 2599 /* … … 2831 2831 #define CPUID_GST_FEATURE2_WRN(reg, ExtBit, StdBit) \ 2832 2832 do { \ 2833 if ( (aGuestCpuId Ext [1].reg& (ExtBit)) \2833 if ( (aGuestCpuId[1].reg & (ExtBit)) \ 2834 2834 && !(fHostAmd \ 2835 2835 ? aHostRawExt[1].reg & (ExtBit) \ … … 2861 2861 /** @todo we'll be leaking paLeaves on error return... */ 2862 2862 2863 CPUMCPUID GuestCpuId Def;2864 rc = SSMR3GetMem(pSSM, &GuestCpuId Def, sizeof(GuestCpuIdDef));2863 CPUMCPUID GuestCpuIdPatmDef; 2864 rc = SSMR3GetMem(pSSM, &GuestCpuIdPatmDef, sizeof(GuestCpuIdPatmDef)); 2865 2865 AssertRCReturn(rc, rc); 2866 2866 … … 2965 2965 CPUID_RAW_FEATURE_IGN(Std, ecx, X86_CPUID_FEATURE_ECX_PDCM); 2966 2966 CPUID_RAW_FEATURE_RET(Std, ecx, RT_BIT_32(16) /*reserved*/); 2967 CPUID_RAW_FEATURE_ RET(Std, ecx, RT_BIT_32(17) /*reserved*/);2967 CPUID_RAW_FEATURE_IGN(Std, ecx, X86_CPUID_FEATURE_ECX_PCID); 2968 2968 CPUID_RAW_FEATURE_IGN(Std, ecx, X86_CPUID_FEATURE_ECX_DCA); 2969 2969 CPUID_RAW_FEATURE_RET(Std, ecx, X86_CPUID_FEATURE_ECX_SSE4_1); … … 2972 2972 CPUID_RAW_FEATURE_RET(Std, ecx, X86_CPUID_FEATURE_ECX_MOVBE); 2973 2973 CPUID_RAW_FEATURE_RET(Std, ecx, X86_CPUID_FEATURE_ECX_POPCNT); 2974 CPUID_RAW_FEATURE_ RET(Std, ecx, RT_BIT_32(24) /*reserved*/);2974 CPUID_RAW_FEATURE_IGN(Std, ecx, X86_CPUID_FEATURE_ECX_TSCDEADL); 2975 2975 CPUID_RAW_FEATURE_RET(Std, ecx, X86_CPUID_FEATURE_ECX_AES); 2976 2976 CPUID_RAW_FEATURE_RET(Std, ecx, X86_CPUID_FEATURE_ECX_XSAVE); 2977 2977 CPUID_RAW_FEATURE_RET(Std, ecx, X86_CPUID_FEATURE_ECX_OSXSAVE); 2978 2978 CPUID_RAW_FEATURE_RET(Std, ecx, X86_CPUID_FEATURE_ECX_AVX); 2979 CPUID_RAW_FEATURE_RET(Std, ecx, RT_BIT_32(29) /*reserved*/);2980 CPUID_RAW_FEATURE_RET(Std, ecx, RT_BIT_32(30) /*reserved*/);2979 CPUID_RAW_FEATURE_RET(Std, ecx, X86_CPUID_FEATURE_ECX_F16C); 2980 CPUID_RAW_FEATURE_RET(Std, ecx, X86_CPUID_FEATURE_ECX_RDRAND); 2981 2981 CPUID_RAW_FEATURE_RET(Std, ecx, X86_CPUID_FEATURE_ECX_HVP); 2982 2982 … … 3175 3175 CPUID_GST_FEATURE_RET(Std, ecx, X86_CPUID_FEATURE_ECX_PDCM); // -> EMU 3176 3176 CPUID_GST_FEATURE_RET(Std, ecx, RT_BIT_32(16) /*reserved*/); 3177 CPUID_GST_FEATURE_RET(Std, ecx, RT_BIT_32(17) /*reserved*/);3177 CPUID_GST_FEATURE_RET(Std, ecx, X86_CPUID_FEATURE_ECX_PCID); 3178 3178 CPUID_GST_FEATURE_RET(Std, ecx, X86_CPUID_FEATURE_ECX_DCA); // -> EMU? 3179 3179 CPUID_GST_FEATURE_RET(Std, ecx, X86_CPUID_FEATURE_ECX_SSE4_1); // -> EMU … … 3182 3182 CPUID_GST_FEATURE_RET(Std, ecx, X86_CPUID_FEATURE_ECX_MOVBE); // -> EMU 3183 3183 CPUID_GST_FEATURE_RET(Std, ecx, X86_CPUID_FEATURE_ECX_POPCNT); // -> EMU 3184 CPUID_GST_FEATURE_RET(Std, ecx, RT_BIT_32(24) /*reserved*/);3184 CPUID_GST_FEATURE_RET(Std, ecx, X86_CPUID_FEATURE_ECX_TSCDEADL); 3185 3185 CPUID_GST_FEATURE_RET(Std, ecx, X86_CPUID_FEATURE_ECX_AES); // -> EMU 3186 3186 CPUID_GST_FEATURE_RET(Std, ecx, X86_CPUID_FEATURE_ECX_XSAVE); // -> EMU 3187 3187 CPUID_GST_FEATURE_RET(Std, ecx, X86_CPUID_FEATURE_ECX_OSXSAVE); // -> EMU 3188 3188 CPUID_GST_FEATURE_RET(Std, ecx, X86_CPUID_FEATURE_ECX_AVX); // -> EMU? 3189 CPUID_GST_FEATURE_RET(Std, ecx, RT_BIT_32(29) /*reserved*/);3190 CPUID_GST_FEATURE_RET(Std, ecx, RT_BIT_32(30) /*reserved*/);3189 CPUID_GST_FEATURE_RET(Std, ecx, X86_CPUID_FEATURE_ECX_F16C); 3190 CPUID_GST_FEATURE_RET(Std, ecx, X86_CPUID_FEATURE_ECX_RDRAND); 3191 3191 CPUID_GST_FEATURE_IGN(Std, ecx, X86_CPUID_FEATURE_ECX_HVP); // Normally not set by host 3192 3192 … … 3309 3309 pVM->cpum.s.GuestInfo.paCpuIdLeavesR0 = NIL_RTR0PTR; 3310 3310 pVM->cpum.s.GuestInfo.paCpuIdLeavesRC = NIL_RTRCPTR; 3311 pVM->cpum.s.GuestInfo.DefCpuId = GuestCpuId Def;3311 pVM->cpum.s.GuestInfo.DefCpuId = GuestCpuIdPatmDef; 3312 3312 rc = cpumR3CpuIdInstallAndExplodeLeaves(pVM, &pVM->cpum.s, paLeaves, cLeaves); 3313 3313 RTMemFree(paLeaves); … … 3338 3338 } 3339 3339 3340 3341 3342 # if defined(VBOX_WITH_RAW_MODE) || defined(DOXYGEN_RUNNING) 3343 /** @name Patchmanager CPUID legacy table APIs 3344 * @{ 3345 */ 3346 3347 /** 3348 * Gets a number of standard CPUID leafs (PATM only). 3349 * 3350 * @returns Number of leafs. 3351 * @param pVM Pointer to the VM. 3352 * @remark Intended for PATM. 3353 */ 3354 VMMR3_INT_DECL(uint32_t) CPUMR3GetGuestCpuIdPatmStdMax(PVM pVM) 3355 { 3356 return RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmStd); 3357 } 3358 3359 3360 /** 3361 * Gets a number of extended CPUID leafs (PATM only). 3362 * 3363 * @returns Number of leafs. 3364 * @param pVM Pointer to the VM. 3365 * @remark Intended for PATM. 3366 */ 3367 VMMR3_INT_DECL(uint32_t) CPUMR3GetGuestCpuIdPatmExtMax(PVM pVM) 3368 { 3369 return RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmExt); 3370 } 3371 3372 3373 /** 3374 * Gets a number of centaur CPUID leafs. 3375 * 3376 * @returns Number of leafs. 3377 * @param pVM Pointer to the VM. 3378 * @remark Intended for PATM. 3379 */ 3380 VMMR3_INT_DECL(uint32_t) CPUMR3GetGuestCpuIdPatmCentaurMax(PVM pVM) 3381 { 3382 return RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmCentaur); 3383 } 3384 3385 3386 /** 3387 * Gets a pointer to the array of standard CPUID leaves. 3388 * 3389 * CPUMR3GetGuestCpuIdStdMax() give the size of the array. 3390 * 3391 * @returns Pointer to the standard CPUID leaves (read-only). 3392 * @param pVM Pointer to the VM. 3393 * @remark Intended for PATM. 3394 */ 3395 VMMR3_INT_DECL(RCPTRTYPE(PCCPUMCPUID)) CPUMR3GetGuestCpuIdPatmStdRCPtr(PVM pVM) 3396 { 3397 return RCPTRTYPE(PCCPUMCPUID)VM_RC_ADDR(pVM, &pVM->cpum.s.aGuestCpuIdPatmStd[0]); 3398 } 3399 3400 3401 /** 3402 * Gets a pointer to the array of extended CPUID leaves. 3403 * 3404 * CPUMGetGuestCpuIdExtMax() give the size of the array. 3405 * 3406 * @returns Pointer to the extended CPUID leaves (read-only). 3407 * @param pVM Pointer to the VM. 3408 * @remark Intended for PATM. 3409 */ 3410 VMMR3_INT_DECL(RCPTRTYPE(PCCPUMCPUID)) CPUMR3GetGuestCpuIdPatmExtRCPtr(PVM pVM) 3411 { 3412 return (RCPTRTYPE(PCCPUMCPUID))VM_RC_ADDR(pVM, &pVM->cpum.s.aGuestCpuIdPatmExt[0]); 3413 } 3414 3415 3416 /** 3417 * Gets a pointer to the array of centaur CPUID leaves. 3418 * 3419 * CPUMGetGuestCpuIdCentaurMax() give the size of the array. 3420 * 3421 * @returns Pointer to the centaur CPUID leaves (read-only). 3422 * @param pVM Pointer to the VM. 3423 * @remark Intended for PATM. 3424 */ 3425 VMMR3_INT_DECL(RCPTRTYPE(PCCPUMCPUID)) CPUMR3GetGuestCpuIdPatmCentaurRCPtr(PVM pVM) 3426 { 3427 return (RCPTRTYPE(PCCPUMCPUID))VM_RC_ADDR(pVM, &pVM->cpum.s.aGuestCpuIdPatmCentaur[0]); 3428 } 3429 3430 3431 /** 3432 * Gets a pointer to the default CPUID leaf. 3433 * 3434 * @returns Pointer to the default CPUID leaf (read-only). 3435 * @param pVM Pointer to the VM. 3436 * @remark Intended for PATM. 3437 */ 3438 VMMR3_INT_DECL(RCPTRTYPE(PCCPUMCPUID)) CPUMR3GetGuestCpuIdPatmDefRCPtr(PVM pVM) 3439 { 3440 return (RCPTRTYPE(PCCPUMCPUID))VM_RC_ADDR(pVM, &pVM->cpum.s.GuestCpuIdPatmDef); 3441 } 3442 3443 /** @} */ 3444 # endif /* VBOX_WITH_RAW_MODE || DOXYGEN_RUNNING */ 3445 3340 3446 #endif /* VBOX_IN_VMM */ 3447 -
trunk/src/VBox/VMM/VMMR3/CPUMR3Db.cpp
r51641 r54674 5 5 6 6 /* 7 * Copyright (C) 2013 Oracle Corporation7 * Copyright (C) 2013-2015 Oracle Corporation 8 8 * 9 9 * This file is part of VirtualBox Open Source Edition (OSE), as -
trunk/src/VBox/VMM/VMMR3/PATMPatch.cpp
r46150 r54674 225 225 case PATM_CPUID_STD_PTR: 226 226 /* @todo dirty hack when correcting this fixup (state restore) */ 227 dest = CPUMR3GetGuestCpuId StdRCPtr(pVM);227 dest = CPUMR3GetGuestCpuIdPatmStdRCPtr(pVM); 228 228 break; 229 229 230 230 case PATM_CPUID_EXT_PTR: 231 231 /* @todo dirty hack when correcting this fixup (state restore) */ 232 dest = CPUMR3GetGuestCpuId ExtRCPtr(pVM);232 dest = CPUMR3GetGuestCpuIdPatmExtRCPtr(pVM); 233 233 break; 234 234 235 235 case PATM_CPUID_CENTAUR_PTR: 236 236 /* @todo dirty hack when correcting this fixup (state restore) */ 237 dest = CPUMR3GetGuestCpuId CentaurRCPtr(pVM);237 dest = CPUMR3GetGuestCpuIdPatmCentaurRCPtr(pVM); 238 238 break; 239 239 240 240 case PATM_CPUID_DEF_PTR: 241 241 /* @todo dirty hack when correcting this fixup (state restore) */ 242 dest = CPUMR3GetGuestCpuId DefRCPtr(pVM);242 dest = CPUMR3GetGuestCpuIdPatmDefRCPtr(pVM); 243 243 break; 244 244 245 245 case PATM_CPUID_STD_MAX: 246 dest = CPUM GetGuestCpuIdStdMax(pVM);246 dest = CPUMR3GetGuestCpuIdPatmStdMax(pVM); 247 247 break; 248 248 249 249 case PATM_CPUID_EXT_MAX: 250 dest = CPUM GetGuestCpuIdExtMax(pVM);250 dest = CPUMR3GetGuestCpuIdPatmExtMax(pVM); 251 251 break; 252 252 253 253 case PATM_CPUID_CENTAUR_MAX: 254 dest = CPUM GetGuestCpuIdCentaurMax(pVM);254 dest = CPUMR3GetGuestCpuIdPatmCentaurMax(pVM); 255 255 break; 256 256 -
trunk/src/VBox/VMM/VMMR3/PATMSSM.cpp
r52771 r54674 566 566 if (*pFixup == pVM->pVMRC + RT_OFFSETOF(VM, aCpus[0].fLocalForcedActions)) 567 567 rec.Core.Key = (AVLPVKEY)PATM_FIXUP_CPU_FF_ACTION; 568 else 569 if (*pFixup == CPUMR3GetGuestCpuIdDefRCPtr(pVM)) 568 else if (*pFixup == CPUMR3GetGuestCpuIdPatmDefRCPtr(pVM)) 570 569 rec.Core.Key = (AVLPVKEY)PATM_FIXUP_CPUID_DEFAULT; 571 else 572 if (*pFixup == CPUMR3GetGuestCpuIdStdRCPtr(pVM)) 570 else if (*pFixup == CPUMR3GetGuestCpuIdPatmStdRCPtr(pVM)) 573 571 rec.Core.Key = (AVLPVKEY)PATM_FIXUP_CPUID_STANDARD; 574 else 575 if (*pFixup == CPUMR3GetGuestCpuIdExtRCPtr(pVM)) 572 else if (*pFixup == CPUMR3GetGuestCpuIdPatmExtRCPtr(pVM)) 576 573 rec.Core.Key = (AVLPVKEY)PATM_FIXUP_CPUID_EXTENDED; 577 else 578 if (*pFixup == CPUMR3GetGuestCpuIdCentaurRCPtr(pVM)) 574 else if (*pFixup == CPUMR3GetGuestCpuIdPatmCentaurRCPtr(pVM)) 579 575 rec.Core.Key = (AVLPVKEY)PATM_FIXUP_CPUID_CENTAUR; 580 576 } … … 1286 1282 { 1287 1283 case 0: 1288 *pFixup = CPUMR3GetGuestCpuId DefRCPtr(pVM);1284 *pFixup = CPUMR3GetGuestCpuIdPatmDefRCPtr(pVM); 1289 1285 break; 1290 1286 case 1: 1291 *pFixup = CPUMR3GetGuestCpuId StdRCPtr(pVM);1287 *pFixup = CPUMR3GetGuestCpuIdPatmStdRCPtr(pVM); 1292 1288 break; 1293 1289 case 2: 1294 *pFixup = CPUMR3GetGuestCpuId ExtRCPtr(pVM);1290 *pFixup = CPUMR3GetGuestCpuIdPatmExtRCPtr(pVM); 1295 1291 break; 1296 1292 case 3: 1297 *pFixup = CPUMR3GetGuestCpuId CentaurRCPtr(pVM);1293 *pFixup = CPUMR3GetGuestCpuIdPatmCentaurRCPtr(pVM); 1298 1294 break; 1299 1295 } … … 1315 1311 break; 1316 1312 case PATM_FIXUP_CPUID_DEFAULT: 1317 *pFixup = CPUMR3GetGuestCpuId DefRCPtr(pVM);1313 *pFixup = CPUMR3GetGuestCpuIdPatmDefRCPtr(pVM); 1318 1314 LogFlow(("Changing cpuid def fixup from %x to %x\n", oldFixup, *pFixup)); 1319 1315 break; 1320 1316 case PATM_FIXUP_CPUID_STANDARD: 1321 *pFixup = CPUMR3GetGuestCpuId StdRCPtr(pVM);1317 *pFixup = CPUMR3GetGuestCpuIdPatmStdRCPtr(pVM); 1322 1318 LogFlow(("Changing cpuid std fixup from %x to %x\n", oldFixup, *pFixup)); 1323 1319 break; 1324 1320 case PATM_FIXUP_CPUID_EXTENDED: 1325 *pFixup = CPUMR3GetGuestCpuId ExtRCPtr(pVM);1321 *pFixup = CPUMR3GetGuestCpuIdPatmExtRCPtr(pVM); 1326 1322 LogFlow(("Changing cpuid ext fixup from %x to %x\n", oldFixup, *pFixup)); 1327 1323 break; 1328 1324 case PATM_FIXUP_CPUID_CENTAUR: 1329 *pFixup = CPUMR3GetGuestCpuId CentaurRCPtr(pVM);1325 *pFixup = CPUMR3GetGuestCpuIdPatmCentaurRCPtr(pVM); 1330 1326 LogFlow(("Changing cpuid centaur fixup from %x to %x\n", oldFixup, *pFixup)); 1331 1327 break; -
trunk/src/VBox/VMM/VMMRC/CPUMRC.cpp
r48936 r54674 5 5 6 6 /* 7 * Copyright (C) 2006-201 2Oracle Corporation7 * Copyright (C) 2006-2015 Oracle Corporation 8 8 * 9 9 * This file is part of VirtualBox Open Source Edition (OSE), as -
trunk/src/VBox/VMM/VMMRC/CPUMRCA.asm
r52296 r54674 4 4 ; 5 5 6 ; Copyright (C) 2006-2014 Oracle Corporation 6 ; 7 ; Copyright (C) 2006-2015 Oracle Corporation 7 8 ; 8 9 ; This file is part of VirtualBox Open Source Edition (OSE), as -
trunk/src/VBox/VMM/include/CPUMInternal.h
r54561 r54674 5 5 6 6 /* 7 * Copyright (C) 2006-201 4Oracle Corporation7 * Copyright (C) 2006-2015 Oracle Corporation 8 8 * 9 9 * This file is part of VirtualBox Open Source Edition (OSE), as … … 487 487 488 488 /** The standard set of CpuId leaves. */ 489 CPUMCPUID aGuestCpuId Std[6];489 CPUMCPUID aGuestCpuIdPatmStd[6]; 490 490 /** The extended set of CpuId leaves. */ 491 CPUMCPUID aGuestCpuId Ext[10];491 CPUMCPUID aGuestCpuIdPatmExt[10]; 492 492 /** The centaur set of CpuId leaves. */ 493 CPUMCPUID aGuestCpuId Centaur[4];493 CPUMCPUID aGuestCpuIdPatmCentaur[4]; 494 494 /** The default set of CpuId leaves. */ 495 CPUMCPUID GuestCpuId Def;495 CPUMCPUID GuestCpuIdPatmDef; 496 496 497 497 #if HC_ARCH_BITS == 32 -
trunk/src/VBox/VMM/include/CPUMInternal.mac
r52419 r54674 5 5 6 6 ; 7 ; Copyright (C) 2006-201 2Oracle Corporation7 ; Copyright (C) 2006-2015 Oracle Corporation 8 8 ; 9 9 ; This file is part of VirtualBox Open Source Edition (OSE), as … … 81 81 82 82 ; CPUID leafs 83 .aGuestCpuId Stdresb 16*684 .aGuestCpuId Extresb 16*1085 .aGuestCpuId Centaurresb 16*486 .GuestCpuId Defresb 1683 .aGuestCpuIdPatmStd resb 16*6 84 .aGuestCpuIdPatmExt resb 16*10 85 .aGuestCpuIdPatmCentaur resb 16*4 86 .GuestCpuIdPatmDef resb 16 87 87 88 88 %if HC_ARCH_BITS == 32 -
trunk/src/VBox/VMM/testcase/tstVMStruct.h
r53441 r54674 8 8 9 9 /* 10 * Copyright (C) 2006-201 4Oracle Corporation10 * Copyright (C) 2006-2015 Oracle Corporation 11 11 * 12 12 * This file is part of VirtualBox Open Source Edition (OSE), as … … 37 37 GEN_CHECK_OFF(CPUM, fPendingRestore); 38 38 #endif 39 GEN_CHECK_OFF(CPUM, aGuestCpuId Std);40 GEN_CHECK_OFF(CPUM, aGuestCpuId Ext);41 GEN_CHECK_OFF(CPUM, aGuestCpuId Centaur);42 GEN_CHECK_OFF(CPUM, GuestCpuId Def);39 GEN_CHECK_OFF(CPUM, aGuestCpuIdPatmStd); 40 GEN_CHECK_OFF(CPUM, aGuestCpuIdPatmExt); 41 GEN_CHECK_OFF(CPUM, aGuestCpuIdPatmCentaur); 42 GEN_CHECK_OFF(CPUM, GuestCpuIdPatmDef); 43 43 44 44 GEN_CHECK_SIZE(CPUMCPU); // has .mac
Note:
See TracChangeset
for help on using the changeset viewer.