VirtualBox

Changeset 23794 in vbox for trunk/src


Ignore:
Timestamp:
Oct 15, 2009 11:50:03 AM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
53534
Message:

More synthetic cpu work

Location:
trunk/src/VBox/VMM
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/CPUM.cpp

    r23787 r23794  
    228228        &&  uECX == X86_CPUID_VENDOR_AMD_ECX
    229229        &&  uEDX == X86_CPUID_VENDOR_AMD_EDX)
    230         pVM->cpum.s.enmCPUVendor = CPUMCPUVENDOR_AMD;
     230    {
     231        pVM->cpum.s.enmGuestCpuVendor = pVM->cpum.s.enmHostCpuVendor = CPUMCPUVENDOR_AMD;
     232    }
    231233    else if (    uEAX >= 1
    232234             &&  uEBX == X86_CPUID_VENDOR_INTEL_EBX
    233235             &&  uECX == X86_CPUID_VENDOR_INTEL_ECX
    234236             &&  uEDX == X86_CPUID_VENDOR_INTEL_EDX)
    235         pVM->cpum.s.enmCPUVendor = CPUMCPUVENDOR_INTEL;
     237    {
     238        pVM->cpum.s.enmGuestCpuVendor = pVM->cpum.s.enmHostCpuVendor = CPUMCPUVENDOR_INTEL;
     239    }
    236240    else /** @todo Via */
    237         pVM->cpum.s.enmCPUVendor = CPUMCPUVENDOR_UNKNOWN;
     241    {
     242        pVM->cpum.s.enmGuestCpuVendor = pVM->cpum.s.enmHostCpuVendor = CPUMCPUVENDOR_UNKNOWN;
     243    }
    238244
    239245    /*
     
    400406    if (pCPUM->fSyntheticCpu)
    401407    {
     408        const char szVendor[13]    = "VirtualBox  ";
     409        const char szProcessor[48] = "VirtualBox SPARCx86 Processor v1000            "; /* includes null terminator */
     410
     411        pCPUM->enmGuestCpuVendor = CPUMCPUVENDOR_SYNTHETIC;
     412
     413        /* Vendor */
     414        pCPUM->aGuestCpuIdStd[0].ebx = pCPUM->aGuestCpuIdExt[0].ebx = ((uint32_t *)szVendor)[0];
     415        pCPUM->aGuestCpuIdStd[0].ecx = pCPUM->aGuestCpuIdExt[0].ecx = ((uint32_t *)szVendor)[2];
     416        pCPUM->aGuestCpuIdStd[0].edx = pCPUM->aGuestCpuIdExt[0].edx = ((uint32_t *)szVendor)[1];
     417
     418        /* Processor Name String Identifier. */
     419        pCPUM->aGuestCpuIdExt[2].eax = ((uint32_t *)szProcessor)[0];
     420        pCPUM->aGuestCpuIdExt[2].ebx = ((uint32_t *)szProcessor)[1];
     421        pCPUM->aGuestCpuIdExt[2].ecx = ((uint32_t *)szProcessor)[2];
     422        pCPUM->aGuestCpuIdExt[2].edx = ((uint32_t *)szProcessor)[3];
     423        pCPUM->aGuestCpuIdExt[3].eax = ((uint32_t *)szProcessor)[4];
     424        pCPUM->aGuestCpuIdExt[3].ebx = ((uint32_t *)szProcessor)[5];
     425        pCPUM->aGuestCpuIdExt[3].ecx = ((uint32_t *)szProcessor)[6];
     426        pCPUM->aGuestCpuIdExt[3].edx = ((uint32_t *)szProcessor)[7];
     427        pCPUM->aGuestCpuIdExt[4].eax = ((uint32_t *)szProcessor)[8];
     428        pCPUM->aGuestCpuIdExt[4].ebx = ((uint32_t *)szProcessor)[9];
     429        pCPUM->aGuestCpuIdExt[4].ecx = ((uint32_t *)szProcessor)[10];
     430        pCPUM->aGuestCpuIdExt[4].edx = ((uint32_t *)szProcessor)[11];
     431
    402432        /* AMD only; shared feature bits are set dynamically. */
    403433        pCPUM->aGuestCpuIdExt[1].edx = 0;
     
    449479#ifdef VBOX_WITH_MULTI_CORE
    450480    if (    pVM->cCpus > 1
    451         &&  pVM->cpum.s.enmCPUVendor == CPUMCPUVENDOR_INTEL)
     481        &&  pVM->cpum.s.enmGuestCpuVendor == CPUMCPUVENDOR_INTEL)
    452482    {
    453483        AssertReturn(pVM->cCpus <= 64, VERR_TOO_MANY_CPUS);
     
    498528    if (pCPUM->aGuestCpuIdExt[0].eax >= UINT32_C(0x80000007))
    499529    {
    500         Assert(pVM->cpum.s.enmCPUVendor != CPUMCPUVENDOR_INVALID);
     530        Assert(pVM->cpum.s.enmGuestCpuVendor != CPUMCPUVENDOR_INVALID);
    501531
    502532        pCPUM->aGuestCpuIdExt[7].eax = pCPUM->aGuestCpuIdExt[7].ebx = pCPUM->aGuestCpuIdExt[7].ecx = 0;
    503533
    504         if (pVM->cpum.s.enmCPUVendor == CPUMCPUVENDOR_AMD)
     534        if (pVM->cpum.s.enmGuestCpuVendor == CPUMCPUVENDOR_AMD)
    505535        {
    506536            /* Only expose the TSC invariant capability bit to the guest. */
     
    543573#ifdef VBOX_WITH_MULTI_CORE
    544574        if (    pVM->cCpus > 1
    545             &&  pVM->cpum.s.enmCPUVendor == CPUMCPUVENDOR_AMD)
     575            &&  pVM->cpum.s.enmGuestCpuVendor == CPUMCPUVENDOR_AMD)
    546576        {
    547577            /* Legacy method to determine the number of cores. */
  • trunk/src/VBox/VMM/CPUMInternal.h

    r23758 r23794  
    286286    } CPUFeaturesExt;
    287287
    288     /* CPU manufacturer. */
    289     CPUMCPUVENDOR           enmCPUVendor;
     288    /* Host CPU manufacturer. */
     289    CPUMCPUVENDOR           enmHostCpuVendor;
     290    /* Guest CPU manufacturer. */
     291    CPUMCPUVENDOR           enmGuestCpuVendor;
    290292
    291293    /** CR4 mask */
     
    311313    CPUMCPUID               GuestCpuIdDef;
    312314
     315#if HC_ARCH_BITS == 32
    313316    /** Align the next member, and thereby the structure, on a 64-byte boundrary. */
    314     uint8_t                 abPadding2[HC_ARCH_BITS == 32 ? 8 : 4];
     317    uint8_t                 abPadding2[4];
     318#endif
    315319
    316320    /**
  • trunk/src/VBox/VMM/CPUMInternal.mac

    r23758 r23794  
    6464    .CPUFeaturesExt.ecx   resd    1
    6565
    66     .enmCPUVendor         resd    1
     66    .enmHostCpuVendor     resd    1
     67    .enmGuestCpuVendor    resd    1
    6768
    6869    ; CR4 masks
  • trunk/src/VBox/VMM/HWACCM.cpp

    r23733 r23794  
    15591559     * Needs to be extended to Intel CPUs without the APIC TPR hardware optimization.
    15601560     */
    1561     if (CPUMGetCPUVendor(pVM) != CPUMCPUVENDOR_AMD)
     1561    if (CPUMGetHostCpuVendor(pVM) != CPUMCPUVENDOR_AMD)
    15621562        return VERR_NOT_SUPPORTED;
    15631563
  • trunk/src/VBox/VMM/TM.cpp

    r23012 r23794  
    690690        uint32_t uEAX, uEBX, uECX, uEDX;
    691691
    692         if (CPUMGetCPUVendor(pVM) == CPUMCPUVENDOR_AMD)
     692        if (CPUMGetHostCpuVendor(pVM) == CPUMCPUVENDOR_AMD)
    693693        {
    694694            /*
     
    710710            }
    711711        }
    712         else if (CPUMGetCPUVendor(pVM) == CPUMCPUVENDOR_INTEL)
     712        else if (CPUMGetHostCpuVendor(pVM) == CPUMCPUVENDOR_INTEL)
    713713        {
    714714            /*
  • trunk/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp

    r22890 r23794  
    10821082    if (    iLeaf == 4
    10831083        &&  fHasMoreCaches
    1084         &&  pVM->cpum.s.enmCPUVendor == CPUMCPUVENDOR_INTEL)
     1084        &&  pVM->cpum.s.enmGuestCpuVendor == CPUMCPUVENDOR_INTEL)
    10851085    {
    10861086        /* Report unified L0 cache, Linux'es num_cpu_cores() requires
     
    11481148                pVM->cpum.s.aGuestCpuIdStd[1].edx |= X86_CPUID_FEATURE_EDX_APIC;
    11491149            if (    pVM->cpum.s.aGuestCpuIdExt[0].eax >= 0x80000001
    1150                 &&  pVM->cpum.s.enmCPUVendor == CPUMCPUVENDOR_AMD)
     1150                &&  pVM->cpum.s.enmGuestCpuVendor == CPUMCPUVENDOR_AMD)
    11511151                pVM->cpum.s.aGuestCpuIdExt[1].edx |= X86_CPUID_AMD_FEATURE_EDX_APIC;
    11521152            LogRel(("CPUMSetGuestCpuIdFeature: Enabled APIC\n"));
     
    12231223                pVM->cpum.s.aGuestCpuIdStd[1].edx |= X86_CPUID_FEATURE_EDX_PAE;
    12241224            if (    pVM->cpum.s.aGuestCpuIdExt[0].eax >= 0x80000001
    1225                 &&  pVM->cpum.s.enmCPUVendor == CPUMCPUVENDOR_AMD)
     1225                &&  pVM->cpum.s.enmGuestCpuVendor == CPUMCPUVENDOR_AMD)
    12261226                pVM->cpum.s.aGuestCpuIdExt[1].edx |= X86_CPUID_AMD_FEATURE_EDX_PAE;
    12271227            LogRel(("CPUMSetGuestCpuIdFeature: Enabled PAE\n"));
     
    12861286                pVM->cpum.s.aGuestCpuIdStd[1].edx |= X86_CPUID_FEATURE_EDX_PAT;
    12871287            if (    pVM->cpum.s.aGuestCpuIdExt[0].eax >= 0x80000001
    1288                 &&  pVM->cpum.s.enmCPUVendor == CPUMCPUVENDOR_AMD)
     1288                &&  pVM->cpum.s.enmGuestCpuVendor == CPUMCPUVENDOR_AMD)
    12891289                pVM->cpum.s.aGuestCpuIdExt[1].edx |= X86_CPUID_AMD_FEATURE_EDX_PAT;
    12901290            LogRel(("CPUMClearGuestCpuIdFeature: Enabled PAT\n"));
     
    13761376                pVM->cpum.s.aGuestCpuIdStd[1].edx &= ~X86_CPUID_FEATURE_EDX_APIC;
    13771377            if (    pVM->cpum.s.aGuestCpuIdExt[0].eax >= 0x80000001
    1378                 &&  pVM->cpum.s.enmCPUVendor == CPUMCPUVENDOR_AMD)
     1378                &&  pVM->cpum.s.enmGuestCpuVendor == CPUMCPUVENDOR_AMD)
    13791379                pVM->cpum.s.aGuestCpuIdExt[1].edx &= ~X86_CPUID_AMD_FEATURE_EDX_APIC;
    13801380            Log(("CPUMSetGuestCpuIdFeature: Disabled APIC\n"));
     
    13951395                pVM->cpum.s.aGuestCpuIdStd[1].edx &= ~X86_CPUID_FEATURE_EDX_PAE;
    13961396            if (    pVM->cpum.s.aGuestCpuIdExt[0].eax >= 0x80000001
    1397                 &&  pVM->cpum.s.enmCPUVendor == CPUMCPUVENDOR_AMD)
     1397                &&  pVM->cpum.s.enmGuestCpuVendor == CPUMCPUVENDOR_AMD)
    13981398                pVM->cpum.s.aGuestCpuIdExt[1].edx &= ~X86_CPUID_AMD_FEATURE_EDX_PAE;
    13991399            LogRel(("CPUMClearGuestCpuIdFeature: Disabled PAE!\n"));
     
    14061406                pVM->cpum.s.aGuestCpuIdStd[1].edx &= ~X86_CPUID_FEATURE_EDX_PAT;
    14071407            if (    pVM->cpum.s.aGuestCpuIdExt[0].eax >= 0x80000001
    1408                 &&  pVM->cpum.s.enmCPUVendor == CPUMCPUVENDOR_AMD)
     1408                &&  pVM->cpum.s.enmGuestCpuVendor == CPUMCPUVENDOR_AMD)
    14091409                pVM->cpum.s.aGuestCpuIdExt[1].edx &= ~X86_CPUID_AMD_FEATURE_EDX_PAT;
    14101410            LogRel(("CPUMClearGuestCpuIdFeature: Disabled PAT!\n"));
     
    14391439
    14401440/**
    1441  * Gets the CPU vendor
     1441 * Gets the host CPU vendor
    14421442 *
    14431443 * @returns CPU vendor
    14441444 * @param   pVM     The VM handle.
    14451445 */
    1446 VMMDECL(CPUMCPUVENDOR) CPUMGetCPUVendor(PVM pVM)
    1447 {
    1448     return pVM->cpum.s.enmCPUVendor;
     1446VMMDECL(CPUMCPUVENDOR) CPUMGetHostCpuVendor(PVM pVM)
     1447{
     1448    return pVM->cpum.s.enmHostCpuVendor;
     1449}
     1450
     1451/**
     1452 * Gets the CPU vendor
     1453 *
     1454 * @returns CPU vendor
     1455 * @param   pVM     The VM handle.
     1456 */
     1457VMMDECL(CPUMCPUVENDOR) CPUMGetGuestCpuVendor(PVM pVM)
     1458{
     1459    return pVM->cpum.s.enmGuestCpuVendor;
    14491460}
    14501461
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette