VirtualBox

Changeset 49548 in vbox for trunk


Ignore:
Timestamp:
Nov 19, 2013 1:07:10 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
90738
Message:

DevAPIC: reverted r90537, r90540, r90551 -- actually we need to clear the CPUID bit if the APIC enable bit is unset

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/vmm/pdmdev.h

    r49441 r49548  
    13131313
    13141314    /**
     1315     * Modifies APIC-related bits in the CPUID feature mask.
     1316     *
     1317     * @param   pDevIns         Device instance of the APIC.
     1318     * @param   enmVersion      Supported APIC version.
     1319     */
     1320    DECLRCCALLBACKMEMBER(void, pfnChangeFeature,(PPDMDEVINS pDevIns, PDMAPICVERSION enmVersion));
     1321
     1322    /**
    13151323     * Acquires the PDM lock.
    13161324     *
     
    13451353
    13461354/** Current PDMAPICHLPRC version number. */
    1347 #define PDM_APICHLPRC_VERSION                   PDM_VERSION_MAKE(0xfff5, 3, 0)
     1355#define PDM_APICHLPRC_VERSION                   PDM_VERSION_MAKE(0xfff5, 2, 0)
    13481356
    13491357
     
    13821390     */
    13831391    DECLR0CALLBACKMEMBER(uint32_t, pfnCalcIrqTag,(PPDMDEVINS pDevIns, uint8_t u8Level));
     1392
     1393    /**
     1394     * Modifies APIC-related bits in the CPUID feature mask.
     1395     *
     1396     * @param   pDevIns         Device instance of the APIC.
     1397     * @param   enmVersion      Supported APIC version.
     1398     */
     1399    DECLR0CALLBACKMEMBER(void, pfnChangeFeature,(PPDMDEVINS pDevIns, PDMAPICVERSION enmVersion));
    13841400
    13851401    /**
     
    14161432
    14171433/** Current PDMAPICHLPR0 version number. */
    1418 #define PDM_APICHLPR0_VERSION                   PDM_VERSION_MAKE(0xfff4, 3, 0)
     1434#define PDM_APICHLPR0_VERSION                   PDM_VERSION_MAKE(0xfff4, 2, 0)
    14191435
    14201436/**
  • trunk/src/VBox/Devices/PC/DevAPIC.cpp

    r49442 r49548  
    607607                /* Clear any pending APIC interrupt action flag. */
    608608                apicCpuClearInterrupt(pDev, pApic);
     609                /* See @bugref{7097}. Intel IA-32/64 Spec 10.4.3:
     610                 * "When IA32_APIC_BASE[11] is 0, the processor is functionally equivalent to
     611                 * an IA-32 processor without an on-chip APIC. The CPUID feature flag for the
     612                 * APIC (see Section 10.4.2, 'Presence of the Local APIC') is also set to 0."
     613                 */
     614                pDev->CTX_SUFF(pApicHlp)->pfnChangeFeature(pDevIns, PDMAPICVERSION_NONE);
    609615                break;
    610616            }
  • trunk/src/VBox/VMM/VMMR0/PDMR0Device.cpp

    r49441 r49548  
    599599
    600600
     601/** @interface_method_impl{PDMAPICHLPR0,pfnChangeFeature} */
     602static DECLCALLBACK(void) pdmR0ApicHlp_ChangeFeature(PPDMDEVINS pDevIns, PDMAPICVERSION enmVersion)
     603{
     604    PDMDEV_ASSERT_DEVINS(pDevIns);
     605    LogFlow(("pdmR0ApicHlp_ChangeFeature: caller=%p/%d: version=%d\n", pDevIns, pDevIns->iInstance, (int)enmVersion));
     606    switch (enmVersion)
     607    {
     608        case PDMAPICVERSION_NONE:
     609            CPUMClearGuestCpuIdFeature(pDevIns->Internal.s.pVMR0, CPUMCPUIDFEATURE_APIC);
     610            CPUMClearGuestCpuIdFeature(pDevIns->Internal.s.pVMR0, CPUMCPUIDFEATURE_X2APIC);
     611            break;
     612        case PDMAPICVERSION_APIC:
     613            CPUMSetGuestCpuIdFeature(pDevIns->Internal.s.pVMR0, CPUMCPUIDFEATURE_APIC);
     614            CPUMClearGuestCpuIdFeature(pDevIns->Internal.s.pVMR0, CPUMCPUIDFEATURE_X2APIC);
     615            break;
     616        case PDMAPICVERSION_X2APIC:
     617            CPUMSetGuestCpuIdFeature(pDevIns->Internal.s.pVMR0, CPUMCPUIDFEATURE_X2APIC);
     618            CPUMSetGuestCpuIdFeature(pDevIns->Internal.s.pVMR0, CPUMCPUIDFEATURE_APIC);
     619            break;
     620        default:
     621            AssertMsgFailed(("Unknown APIC version: %d\n", (int)enmVersion));
     622    }
     623}
     624
     625
    601626/** @interface_method_impl{PDMAPICHLPR0,pfnLock} */
    602627static DECLCALLBACK(int) pdmR0ApicHlp_Lock(PPDMDEVINS pDevIns, int rc)
     
    632657    pdmR0ApicHlp_ClearInterruptFF,
    633658    pdmR0ApicHlp_CalcIrqTag,
     659    pdmR0ApicHlp_ChangeFeature,
    634660    pdmR0ApicHlp_Lock,
    635661    pdmR0ApicHlp_Unlock,
  • trunk/src/VBox/VMM/VMMRC/PDMRCDevice.cpp

    r49441 r49548  
    562562
    563563
     564/** @interface_method_impl{PDMAPICHLPRC,pfnChangeFeature} */
     565static DECLCALLBACK(void) pdmRCApicHlp_ChangeFeature(PPDMDEVINS pDevIns, PDMAPICVERSION enmVersion)
     566{
     567    PDMDEV_ASSERT_DEVINS(pDevIns);
     568    LogFlow(("pdmRCApicHlp_ChangeFeature: caller=%p/%d: version=%d\n", pDevIns, pDevIns->iInstance, (int)enmVersion));
     569    switch (enmVersion)
     570    {
     571        case PDMAPICVERSION_NONE:
     572            CPUMClearGuestCpuIdFeature(pDevIns->Internal.s.pVMRC, CPUMCPUIDFEATURE_APIC);
     573            CPUMClearGuestCpuIdFeature(pDevIns->Internal.s.pVMRC, CPUMCPUIDFEATURE_X2APIC);
     574            break;
     575        case PDMAPICVERSION_APIC:
     576            CPUMSetGuestCpuIdFeature(pDevIns->Internal.s.pVMRC, CPUMCPUIDFEATURE_APIC);
     577            CPUMClearGuestCpuIdFeature(pDevIns->Internal.s.pVMRC, CPUMCPUIDFEATURE_X2APIC);
     578            break;
     579        case PDMAPICVERSION_X2APIC:
     580            CPUMSetGuestCpuIdFeature(pDevIns->Internal.s.pVMRC, CPUMCPUIDFEATURE_X2APIC);
     581            CPUMSetGuestCpuIdFeature(pDevIns->Internal.s.pVMRC, CPUMCPUIDFEATURE_APIC);
     582            break;
     583        default:
     584            AssertMsgFailed(("Unknown APIC version: %d\n", (int)enmVersion));
     585    }
     586}
     587
     588
    564589/** @interface_method_impl{PDMAPICHLPRC,pfnLock} */
    565590static DECLCALLBACK(int) pdmRCApicHlp_Lock(PPDMDEVINS pDevIns, int rc)
     
    595620    pdmRCApicHlp_ClearInterruptFF,
    596621    pdmRCApicHlp_CalcIrqTag,
     622    pdmRCApicHlp_ChangeFeature,
    597623    pdmRCApicHlp_Lock,
    598624    pdmRCApicHlp_Unlock,
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