VirtualBox

Changeset 60456 in vbox


Ignore:
Timestamp:
Apr 12, 2016 1:26:53 PM (9 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
106544
Message:

VMM/APIC: Fixes.

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

Legend:

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

    r60432 r60456  
    22232223        if (enmTriggerMode == XAPICTRIGGERMODE_EDGE)
    22242224        {
     2225            Assert(CTX_SUFF(pApicCpu->pvApicPib));
    22252226            apicSetVectorInPib(CTX_SUFF(pApicCpu->pvApicPib), uVector);
    22262227            bool const fAlreadySet = apicSetNotificationBitInPib(CTX_SUFF(pApicCpu->pvApicPib));
  • trunk/src/VBox/VMM/VMMR3/APIC.cpp

    r60435 r60456  
    299299     * and AMD spec 16.3.2 "APIC Registers".
    300300     */
    301     ASMMemZero32(&pXApicPage->irr,      sizeof(pXApicPage->irr));
    302     ASMMemZero32(&pXApicPage->isr,      sizeof(pXApicPage->isr));
    303     ASMMemZero32(&pXApicPage->tmr,      sizeof(pXApicPage->tmr));
    304     ASMMemZero32(&pXApicPage->icr_hi,    sizeof(pXApicPage->icr_hi));
    305     ASMMemZero32(&pXApicPage->icr_lo,    sizeof(pXApicPage->icr_lo));
    306     ASMMemZero32(&pXApicPage->ldr,      sizeof(pXApicPage->ldr));
    307     ASMMemZero32(&pXApicPage->tpr,      sizeof(pXApicPage->tpr));
    308     ASMMemZero32(&pXApicPage->timer_icr, sizeof(pXApicPage->timer_icr));
    309     ASMMemZero32(&pXApicPage->timer_ccr, sizeof(pXApicPage->timer_ccr));
    310     ASMMemZero32(&pXApicPage->timer_dcr, sizeof(pXApicPage->timer_dcr));
     301    memset((void *)&pXApicPage->irr,       0, sizeof(pXApicPage->irr));
     302    memset((void *)&pXApicPage->isr,       0, sizeof(pXApicPage->isr));
     303    memset((void *)&pXApicPage->tmr,       0, sizeof(pXApicPage->tmr));
     304    memset((void *)&pXApicPage->icr_hi,    0, sizeof(pXApicPage->icr_hi));
     305    memset((void *)&pXApicPage->icr_lo,    0, sizeof(pXApicPage->icr_lo));
     306    memset((void *)&pXApicPage->ldr,       0, sizeof(pXApicPage->ldr));
     307    memset((void *)&pXApicPage->tpr,       0, sizeof(pXApicPage->tpr));
     308    memset((void *)&pXApicPage->timer_icr, 0, sizeof(pXApicPage->timer_icr));
     309    memset((void *)&pXApicPage->timer_ccr, 0, sizeof(pXApicPage->timer_ccr));
     310    memset((void *)&pXApicPage->timer_dcr, 0, sizeof(pXApicPage->timer_dcr));
    311311
    312312    pXApicPage->dfr.u.u4Model        = XAPICDESTFORMAT_FLAT;
     
    315315    /** @todo CMCI. */
    316316
    317     ASMMemZero32(&pXApicPage->lvt_timer, sizeof(pXApicPage->lvt_timer));
     317    memset((void *)&pXApicPage->lvt_timer, 0, sizeof(pXApicPage->lvt_timer));
    318318    pXApicPage->lvt_timer.u.u1Mask = 1;
    319319
    320320#if XAPIC_HARDWARE_VERSION == XAPIC_HARDWARE_VERSION_P4
    321     ASMMemZero32(&pXApicPage->lvt_thermal, sizeof(pXApicPage->lvt_thermal));
     321    memset((void *)&pXApicPage->lvt_thermal, 0, sizeof(pXApicPage->lvt_thermal));
    322322    pXApicPage->lvt_thermal.u.u1Mask = 1;
    323323#endif
    324324
    325     ASMMemZero32(&pXApicPage->lvt_perf, sizeof(pXApicPage->lvt_perf));
     325    memset((void *)&pXApicPage->lvt_perf, 0, sizeof(pXApicPage->lvt_perf));
    326326    pXApicPage->lvt_perf.u.u1Mask = 1;
    327327
    328     ASMMemZero32(&pXApicPage->lvt_lint0, sizeof(pXApicPage->lvt_lint0));
     328    memset((void *)&pXApicPage->lvt_lint0, 0, sizeof(pXApicPage->lvt_lint0));
    329329    pXApicPage->lvt_lint0.u.u1Mask = 1;
    330330
    331     ASMMemZero32(&pXApicPage->lvt_lint1, sizeof(pXApicPage->lvt_lint1));
     331    memset((void *)&pXApicPage->lvt_lint1, 0, sizeof(pXApicPage->lvt_lint1));
    332332    pXApicPage->lvt_lint1.u.u1Mask = 1;
    333333
    334     ASMMemZero32(&pXApicPage->lvt_error, sizeof(pXApicPage->lvt_error));
     334    memset((void *)&pXApicPage->lvt_error, 0, sizeof(pXApicPage->lvt_error));
    335335    pXApicPage->lvt_error.u.u1Mask = 1;
    336336
    337     ASMMemZero32(&pXApicPage->svr, sizeof(pXApicPage->svr));
     337    memset((void *)&pXApicPage->svr, 0, sizeof(pXApicPage->svr));
    338338    pXApicPage->svr.u.u8SpuriousVector = 0xff;
    339339
    340     /* The self-IPI register is 0. See Intel spec. 10.12.5.1 "x2APIC States" */
     340    /* The self-IPI register is reset to 0. See Intel spec. 10.12.5.1 "x2APIC States" */
    341341    PX2APICPAGE pX2ApicPage = VMCPU_TO_X2APICPAGE(pVCpu);
    342     ASMMemZero32(&pX2ApicPage->self_ipi, sizeof(pX2ApicPage->self_ipi));
     342    memset((void *)&pX2ApicPage->self_ipi, 0, sizeof(pX2ApicPage->self_ipi));
    343343
    344344    /* Clear the posted interrupt bitmaps. */
    345345    PAPICCPU pApicCpu = VMCPU_TO_APICCPU(pVCpu);
    346     ASMMemZero32(&pApicCpu->ApicPibLevel, sizeof(APICPIB));
    347     ASMMemZero32(&pApicCpu->pvApicPibR3, sizeof(APICPIB));
     346    memset((void *)&pApicCpu->ApicPibLevel, 0, sizeof(APICPIB));
     347    memset((void *)pApicCpu->pvApicPibR3,   0, sizeof(APICPIB));
    348348}
    349349
     
    963963    PAPIC    pApic    = VM_TO_APIC(pVM);
    964964    PAPICDEV pApicDev = PDMINS_2_DATA(pDevIns, PAPICDEV);
    965 
    966     LogFlow(("APIC: apicR3Relocate: pDevIns=%p offDelta=%RGi\n", pDevIns, offDelta));
     965    LogFlow(("APIC: apicR3Relocate: pVM=%p pDevIns=%p offDelta=%RGi\n", pVM, pDevIns, offDelta));
    967966
    968967    pApicDev->pDevInsRC   = PDMDEVINS_2_RCPTR(pDevIns);
     
    972971    pApic->pApicDevRC     = PDMINS_2_DATA_RCPTR(pDevIns);
    973972    if (pApic->pvApicPibRC)
    974         pApic->pvApicPibRC = MMHyperR3ToRC(pVM, (void *)pApic->pvApicPibR3);
     973        pApic->pvApicPibRC = MMHyperR3ToRC(pVM, (RTR3PTR)pApic->pvApicPibR3);
    975974
    976975    for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++)
     
    981980
    982981        if (pApicCpu->pvApicPageRC)
    983             pApicCpu->pvApicPageRC = MMHyperR3ToRC(pVM, (void *)pApicCpu->pvApicPageR3);
     982            pApicCpu->pvApicPageRC = MMHyperR3ToRC(pVM, (RTR3PTR)pApicCpu->pvApicPageR3);
    984983        if (pApicCpu->pvApicPibRC)
    985             pApicCpu->pvApicPibRC  = MMHyperR3ToRC(pVM, (void *)pApicCpu->pvApicPibR3);
     984            pApicCpu->pvApicPibRC  = MMHyperR3ToRC(pVM, (RTR3PTR)pApicCpu->pvApicPibR3);
    986985    }
    987986}
     
    996995{
    997996    PAPIC pApic = VM_TO_APIC(pVM);
     997    LogFlow(("APIC: apicR3TermState: pVM=%p\n", pVM));
     998
    998999    if (pApic->pvApicPibR3)
    9991000    {
     
    10141015            SUPR3PageFreeEx((void *)pApicCpu->pvApicPageR3, 1 /* cPages */);
    10151016            pApicCpu->pvApicPageR3 = NULL;
     1017            pApicCpu->pvApicPibR3  = NULL;
    10161018        }
    10171019    }
     
    10291031    PAPIC pApic = VM_TO_APIC(pVM);
    10301032    bool const fNeedGCMapping = !HMIsEnabled(pVM);
     1033    LogFlow(("APIC: apicR3InitState: pVM=%p\n", pVM));
    10311034
    10321035    /*
     
    11161119                /* Associate the per-VCPU PIB pointers to the per-VM PIB mapping. */
    11171120                size_t const offApicPib    = idCpu * sizeof(APICPIB);
    1118                 pApicCpu->pvApicPibR0      = (RTR0PTR)((const uint8_t *)pApic->pvApicPibR0 + offApicPib);
    1119                 pApicCpu->pvApicPibR3      = (RTR3PTR)((const uint8_t *)pApic->pvApicPibR3 + offApicPib);
     1121                pApicCpu->pvApicPibR0      = (RTR0PTR)((RTR0UINTPTR)pApic->pvApicPibR0 + offApicPib);
     1122                pApicCpu->pvApicPibR3      = (RTR3PTR)((RTR3UINTPTR)pApic->pvApicPibR3 + offApicPib);
    11201123                if (fNeedGCMapping)
    11211124                    pApicCpu->pvApicPibRC += offApicPib;
     
    11241127                memset((void *)pApicCpu->pvApicPageR3, 0, pApicCpu->cbApicPage);
    11251128                APICR3Reset(pVCpu);
     1129
     1130#ifdef VBOX_STRICT
     1131                Assert(pApicCpu->pvApicPageR3);
     1132                Assert(pApicCpu->pvApicPageR0);
     1133                Assert(!fNeedGCMapping || pApicCpu->pvApicPageRC);
     1134                Assert(pApicCpu->pvApicPibR3);
     1135                Assert(pApicCpu->pvApicPibR0);
     1136                Assert(!fNeedGCMapping || pApicCpu->pvApicPibRC);
     1137#endif
    11261138            }
    11271139            else
     
    11331145        }
    11341146
     1147#ifdef VBOX_STRICT
     1148        Assert(pApic->pvApicPibR0);
     1149        Assert(pApic->pvApicPibR3);
     1150        Assert(!fNeedGCMapping || pApic->pvApicPibRC);
     1151#endif
    11351152        return VINF_SUCCESS;
    11361153    }
Note: See TracChangeset for help on using the changeset viewer.

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