VirtualBox

Changeset 64663 in vbox for trunk/src/VBox/VMM/VMMAll


Ignore:
Timestamp:
Nov 14, 2016 3:46:35 PM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
111915
Message:

VMM/APIC: Get rid of msrApicBase cache from CPUMCTX, make APIC work with configured as mode disabled as well.

Location:
trunk/src/VBox/VMM/VMMAll
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/APICAll.cpp

    r64662 r64663  
    412412 *
    413413 * @returns true if enabled, false otherwise.
    414  */
    415 DECLINLINE(bool) apicIsEnabled(PVMCPU pVCpu)
     414 * @param   pVCpu           The cross context virtual CPU structure.
     415 */
     416VMM_INT_DECL(bool) APICIsEnabled(PVMCPU pVCpu)
    416417{
    417418    PCAPICCPU pApicCpu = VMCPU_TO_APICCPU(pVCpu);
     
    616617            {
    617618                if (   VMCPUSET_IS_PRESENT(pDestCpuSet, idCpu)
    618                     && apicIsEnabled(&pVM->aCpus[idCpu]))
     619                    && APICIsEnabled(&pVM->aCpus[idCpu]))
    619620                    fAccepted = apicPostInterrupt(&pVM->aCpus[idCpu], uVector, enmTriggerMode);
    620621            }
     
    626627            VMCPUID const idCpu = VMCPUSET_FIND_FIRST_PRESENT(pDestCpuSet);
    627628            if (   idCpu < pVM->cCpus
    628                 && apicIsEnabled(&pVM->aCpus[idCpu]))
     629                && APICIsEnabled(&pVM->aCpus[idCpu]))
    629630                fAccepted = apicPostInterrupt(&pVM->aCpus[idCpu], uVector, enmTriggerMode);
    630631            else
     
    652653            {
    653654                if (   VMCPUSET_IS_PRESENT(pDestCpuSet, idCpu)
    654                     && apicIsEnabled(&pVM->aCpus[idCpu]))
     655                    && APICIsEnabled(&pVM->aCpus[idCpu]))
    655656                {
    656657                    Log2(("APIC: apicSendIntr: Raising NMI on VCPU%u\n", idCpu));
     
    18791880     */
    18801881    PCAPIC pApic = VM_TO_APIC(pVCpu->CTX_SUFF(pVM));
    1881     if (apicIsEnabled(pVCpu))
     1882    if (APICIsEnabled(pVCpu))
    18821883    { /* likely */ }
    18831884    else
     
    19971998     */
    19981999    PCAPIC pApic = VM_TO_APIC(pVCpu->CTX_SUFF(pVM));
    1999     if (apicIsEnabled(pVCpu))
     2000    if (APICIsEnabled(pVCpu))
    20002001    { /* likely */ }
    20012002    else
     
    23472348VMMDECL(int) APICSetTpr(PVMCPU pVCpu, uint8_t u8Tpr)
    23482349{
    2349     if (apicIsEnabled(pVCpu))
     2350    if (APICIsEnabled(pVCpu))
    23502351        return VBOXSTRICTRC_VAL(apicSetTprEx(pVCpu, u8Tpr, false /* fForceX2ApicBehaviour */));
    23512352    return VERR_PDM_NO_APIC_INSTANCE;
     
    23902391{
    23912392    VMCPU_ASSERT_EMT(pVCpu);
    2392     if (apicIsEnabled(pVCpu))
     2393    if (APICIsEnabled(pVCpu))
    23932394    {
    23942395        PCXAPICPAGE pXApicPage = VMCPU_TO_CXAPICPAGE(pVCpu);
     
    24272428
    24282429    PVMCPU pVCpu = &pVM->aCpus[0];
    2429     if (apicIsEnabled(pVCpu))
     2430    if (APICIsEnabled(pVCpu))
    24302431    {
    24312432        PCAPICCPU pApicCpu = VMCPU_TO_APICCPU(pVCpu);
     
    24592460     * If the APIC isn't enabled, do nothing and pretend success.
    24602461     */
    2461     if (apicIsEnabled(&pVM->aCpus[0]))
     2462    if (APICIsEnabled(&pVM->aCpus[0]))
    24622463    { /* likely */ }
    24632464    else
     
    25082509
    25092510    /* If the APIC is enabled, the interrupt is subject to LVT programming. */
    2510     if (apicIsEnabled(pVCpu))
     2511    if (APICIsEnabled(pVCpu))
    25112512    {
    25122513        PCXAPICPAGE pXApicPage = VMCPU_TO_CXAPICPAGE(pVCpu);
     
    26752676
    26762677    PXAPICPAGE pXApicPage = VMCPU_TO_XAPICPAGE(pVCpu);
    2677     bool const fApicHwEnabled = apicIsEnabled(pVCpu);
     2678    bool const fApicHwEnabled = APICIsEnabled(pVCpu);
    26782679    if (   fApicHwEnabled
    26792680        && pXApicPage->svr.u.fApicSoftwareEnable)
  • trunk/src/VBox/VMM/VMMAll/PDMAll.cpp

    r64655 r64663  
    248248 * Returns the presence of an IO-APIC.
    249249 *
    250  * @returns VBox true if an IO-APIC is present.
     250 * @returns true if an IO-APIC is present.
    251251 * @param   pVM         The cross context VM structure.
    252252 */
     
    254254{
    255255    return pVM->pdm.s.IoApic.CTX_SUFF(pDevIns) != NULL;
     256}
     257
     258
     259/**
     260 * Returns the presence of an APIC.
     261 *
     262 * @returns true if an APIC is present.
     263 * @param   pVM         The cross context VM structure.
     264 */
     265VMM_INT_DECL(bool) PDMHasApic(PVM pVM)
     266{
     267    return pVM->pdm.s.Apic.CTX_SUFF(pDevIns) != NULL;
    256268}
    257269
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