VirtualBox

Changeset 60646 in vbox for trunk/src/VBox/VMM/VMMR3


Ignore:
Timestamp:
Apr 22, 2016 12:59:40 PM (9 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
106813
Message:

VMM/APIC: Go back to ring-3 for all base MSR writes for now. Logging and a couple of Windows build fixes with size_t and '==' instead of '=' (thanks Michal).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/APIC.cpp

    r60632 r60646  
    253253 * reset.
    254254 *
    255  * @param   pVCpu           The cross context virtual CPU structure.
    256  */
    257 VMMR3_INT_DECL(void) APICR3Reset(PVMCPU pVCpu)
     255 * @param   pVCpu               The cross context virtual CPU structure.
     256 * @param   fResetApicBaseMsr   Whether to reset the APIC base MSR.
     257 */
     258VMMR3_INT_DECL(void) APICR3Reset(PVMCPU pVCpu, bool fResetApicBaseMsr)
    258259{
    259260    VMCPU_ASSERT_EMT_OR_NOT_RUNNING(pVCpu);
     
    291292    /** @todo It isn't clear in the spec. where exactly the default base address
    292293     *        is (re)initialized, atm we do it here in Reset. */
    293     apicR3ResetBaseMsr(pVCpu);
     294    if (fResetApicBaseMsr)
     295        apicR3ResetBaseMsr(pVCpu);
    294296
    295297    /*
     
    373375    PCXAPICPAGE  pXApicPage  = VMCPU_TO_CXAPICPAGE(pVCpu);
    374376    PCX2APICPAGE pX2ApicPage = VMCPU_TO_CX2APICPAGE(pVCpu);
     377
     378    uint64_t const uBaseMsr  = pApicCpu->uApicBaseMsr;
     379    APICMODE const enmMode   = apicGetMode(uBaseMsr);
    375380    bool const   fX2ApicMode = XAPIC_IN_X2APIC_MODE(pVCpu);
    376381
    377     pHlp->pfnPrintf(pHlp, "VCPU[%u] APIC at %#RGp\n", pVCpu->idCpu, MSR_APICBASE_GET_PHYSADDR(pApicCpu->uApicBaseMsr));
    378     pHlp->pfnPrintf(pHlp, "  Mode                          = %s\n", fX2ApicMode ? "x2Apic" : "xApic");
     382    pHlp->pfnPrintf(pHlp, "VCPU[%u] APIC:\n", pVCpu->idCpu);
     383    pHlp->pfnPrintf(pHlp, "  APIC Base MSR                 = %#RX64 (Addr=%#RX64)\n", uBaseMsr,
     384                    MSR_APICBASE_GET_PHYSADDR(uBaseMsr));
     385    pHlp->pfnPrintf(pHlp, "  Mode                          = %#x (%s)\n", enmMode, apicGetModeName(enmMode));
    379386    if (fX2ApicMode)
    380387    {
     
    386393    pHlp->pfnPrintf(pHlp, "  Version                       = %#x\n",      pXApicPage->version.all.u32Version);
    387394    pHlp->pfnPrintf(pHlp, "    APIC Version                = %#x\n",      pXApicPage->version.u.u8Version);
    388     pHlp->pfnPrintf(pHlp, "    Max LVT entries             = %u\n",       pXApicPage->version.u.u8MaxLvtEntry);
     395    pHlp->pfnPrintf(pHlp, "    Max LVT entry index (0..N)  = %u\n",       pXApicPage->version.u.u8MaxLvtEntry);
    389396    pHlp->pfnPrintf(pHlp, "    EOI Broadcast supression    = %RTbool\n",  pXApicPage->version.u.fEoiBroadcastSupression);
    390397    if (!fX2ApicMode)
     
    929936            TMTimerStop(pApicCpu->pTimerR3);
    930937
    931         APICR3Reset(pVCpuDest);
     938        APICR3Reset(pVCpuDest, true /* fResetApicBaseMsr */);
    932939
    933940        /* Clear the interrupt pending force flag. */
     
    10701077        if (fNeedsGCMapping)
    10711078        {
    1072             pApic->pvApicPibRC == NIL_RTRCPTR;
     1079            pApic->pvApicPibRC = NIL_RTRCPTR;
    10731080            int rc = MMR3HyperMapHCPhys(pVM, (void *)pApic->pvApicPibR3, NIL_RTR0PTR, pApic->HCPhysApicPib, pApic->cbApicPib,
    10741081                                        "APIC PIB", (PRTGCPTR)&pApic->pvApicPibRC);
     
    11271134
    11281135                /* Associate the per-VCPU PIB pointers to the per-VM PIB mapping. */
    1129                 size_t const offApicPib    = idCpu * sizeof(APICPIB);
     1136                uint32_t const offApicPib  = idCpu * sizeof(APICPIB);
    11301137                pApicCpu->pvApicPibR0      = (RTR0PTR)((RTR0UINTPTR)pApic->pvApicPibR0 + offApicPib);
    11311138                pApicCpu->pvApicPibR3      = (RTR3PTR)((RTR3UINTPTR)pApic->pvApicPibR3 + offApicPib);
     
    11351142                /* Initialize the virtual-APIC state. */
    11361143                memset((void *)pApicCpu->pvApicPageR3, 0, pApicCpu->cbApicPage);
    1137                 APICR3Reset(pVCpu);
     1144                APICR3Reset(pVCpu, true /* fResetApicBaseMsr */);
    11381145
    11391146#ifdef DEBUG_ramshankar
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