VirtualBox

Changeset 60469 in vbox


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

VMM/APIC: Fixed issue with incorrectly skipping registeration of SSM, STAM and DBGF info.

File:
1 edited

Legend:

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

    r60468 r60469  
    950950        PAPICCPU pApicCpu  = VMCPU_TO_APICCPU(pVCpuDest);
    951951
    952         int rc = TMTimerLock(pApicCpu->pTimerR3, VERR_IGNORED);
    953         Assert(rc == VINF_SUCCESS); NOREF(rc);
    954         TMTimerStop(pApicCpu->pTimerR3);
    955         TMTimerUnlock(pApicCpu->pTimerR3);
     952        if (TMTimerIsActive(pApicCpu->pTimerR3))
     953            TMTimerStop(pApicCpu->pTimerR3);
    956954
    957955        APICR3Reset(pVCpuDest);
     
    971969    PAPIC    pApic    = VM_TO_APIC(pVM);
    972970    PAPICDEV pApicDev = PDMINS_2_DATA(pDevIns, PAPICDEV);
     971
    973972    LogFlow(("APIC: apicR3Relocate: pVM=%p pDevIns=%p offDelta=%RGi\n", pVM, pDevIns, offDelta));
    974973
     
    977976    pApicDev->pCritSectRC = pApicDev->pApicHlpR3->pfnGetRCCritSect(pDevIns);
    978977
    979     pApic->pApicDevRC     = PDMINS_2_DATA_RCPTR(pDevIns);
    980     if (pApic->pvApicPibRC)
     978    pApic->pApicDevRC = PDMINS_2_DATA_RCPTR(pDevIns);
     979    if (pApic->pvApicPibRC != NIL_RTRCPTR)
    981980        pApic->pvApicPibRC = MMHyperR3ToRC(pVM, (RTR3PTR)pApic->pvApicPibR3);
    982981
     
    987986        pApicCpu->pTimerRC     = TMTimerRCPtr(pApicCpu->pTimerR3);
    988987
    989         if (pApicCpu->pvApicPageRC)
     988        if (pApicCpu->pvApicPageRC != NIL_RTRCPTR)
    990989            pApicCpu->pvApicPageRC = MMHyperR3ToRC(pVM, (RTR3PTR)pApicCpu->pvApicPageR3);
    991         if (pApicCpu->pvApicPibRC)
     990        if (pApicCpu->pvApicPibRC != NIL_RTRCPTR)
    992991            pApicCpu->pvApicPibRC  = MMHyperR3ToRC(pVM, (RTR3PTR)pApicCpu->pvApicPibR3);
    993992    }
     
    12271226            pApic->fPostedIntrsEnabled, pApic->fVirtApicRegsEnabled, pApic->fSupportsTscDeadline));
    12281227
    1229 #ifdef VBOX_WITH_STATISTICS
    1230     /*
    1231      * Statistics.
    1232      */
    1233     /** @todo Figure out why doing this from apicR3Construct() it doesn't work. See @bugref{8245#c48} */
    1234 #define APIC_REG_COUNTER(a_Reg, a_Desc, a_Key) \
    1235     do { \
    1236         rc = STAMR3RegisterF(pVM, a_Reg, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, a_Desc, a_Key, idCpu); \
    1237         AssertRCReturn(rc, rc); \
    1238     } while(0)
    1239 
    1240     bool const fHasRC = !HMIsEnabled(pVM);
    1241     for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++)
    1242     {
    1243         PVMCPU   pVCpu     = &pVM->aCpus[idCpu];
    1244         PAPICCPU pApicCpu  = VMCPU_TO_APICCPU(pVCpu);
    1245 
    1246         APIC_REG_COUNTER(&pApicCpu->StatMmioReadR0,  "Number of APIC MMIO reads in R0.",  "/Devices/APIC/%u/R0/MmioRead");
    1247         APIC_REG_COUNTER(&pApicCpu->StatMmioWriteR0, "Number of APIC MMIO writes in R0.", "/Devices/APIC/%u/R0/MmioWrite");
    1248         APIC_REG_COUNTER(&pApicCpu->StatMsrReadR0,   "Number of APIC MSR reads in R0.",   "/Devices/APIC/%u/R0/MsrRead");
    1249         APIC_REG_COUNTER(&pApicCpu->StatMsrWriteR0,  "Number of APIC MSR writes in R0.",  "/Devices/APIC/%u/R0/MsrWrite");
    1250 
    1251         APIC_REG_COUNTER(&pApicCpu->StatMmioReadR3,  "Number of APIC MMIO reads in R3.",  "/Devices/APIC/%u/R3/MmioReadR3");
    1252         APIC_REG_COUNTER(&pApicCpu->StatMmioWriteR3, "Number of APIC MMIO writes in R3.", "/Devices/APIC/%u/R3/MmioWriteR3");
    1253         APIC_REG_COUNTER(&pApicCpu->StatMsrReadR3,   "Number of APIC MSR reads in R3.",   "/Devices/APIC/%u/R3/MsrReadR3");
    1254         APIC_REG_COUNTER(&pApicCpu->StatMsrWriteR3,  "Number of APIC MSR writes in R3.",  "/Devices/APIC/%u/R3/MsrWriteR3");
    1255 
    1256         if (fHasRC)
    1257         {
    1258             APIC_REG_COUNTER(&pApicCpu->StatMmioReadRC,  "Number of APIC MMIO reads in RC.",  "/Devices/APIC/%u/RC/MmioRead");
    1259             APIC_REG_COUNTER(&pApicCpu->StatMmioWriteRC, "Number of APIC MMIO writes in RC.", "/Devices/APIC/%u/RC/MmioWrite");
    1260             APIC_REG_COUNTER(&pApicCpu->StatMsrReadRC,   "Number of APIC MSR reads in RC.",   "/Devices/APIC/%u/RC/MsrRead");
    1261             APIC_REG_COUNTER(&pApicCpu->StatMsrWriteRC,  "Number of APIC MSR writes in RC.",  "/Devices/APIC/%u/RC/MsrWrite");
    1262         }
    1263     }
    1264 # undef APIC_REG_ACCESS_COUNTER
    1265 #endif
    1266 
    12671228    return VINF_SUCCESS;
    12681229}
     
    13961357    PAPICCPU pApicCpu0 = VMCPU_TO_APICCPU(&pVM->aCpus[0]);
    13971358    RTGCPHYS GCPhysApicBase = MSR_APICBASE_GET_PHYSADDR(pApicCpu0->uApicBaseMsr);
    1398     LogRel(("APIC: PDMDevHlpMMIORegister new = %#RGp\n", GCPhysApicBase));
     1359
    13991360    rc = PDMDevHlpMMIORegister(pDevIns, GCPhysApicBase, sizeof(XAPICPAGE), NULL /* pvUser */,
    14001361                               IOMMMIO_FLAGS_READ_DWORD | IOMMMIO_FLAGS_WRITE_DWORD_ZEROED,
     
    14341395            pApicCpu->pTimerR0 = TMTimerR0Ptr(pApicCpu->pTimerR3);
    14351396            pApicCpu->pTimerRC = TMTimerRCPtr(pApicCpu->pTimerR3);
    1436 
    14371397#if 0
    14381398            rc = PDMR3CritSectInit(pVM, &pApicCpu->TimerCritSect, RT_SRC_POS, pApicCpu->szTimerDesc);
    1439             if (RT_SUCCESS(rc))
    1440                 TMR3TimerSetCritSect(pApicCpu->pTimerR3, &pApicCpu->TimerCritSect);
    1441             else
    1442                 return rc;
    1443 #else
    1444             return VINF_SUCCESS;
     1399            AssertRCReturn(rc, rc);
     1400            TMR3TimerSetCritSect(pApicCpu->pTimerR3, &pApicCpu->TimerCritSect);
    14451401#endif
    14461402        }
     
    14601416     * Register debugger info callback.
    14611417     */
    1462     PDMDevHlpDBGFInfoRegister(pDevIns, "apic", "Display Local APIC state for current CPU. "
    1463                               "Recognizes 'basic', 'lvt', 'timer' as arguments, defaulting to 'basic'.", apicR3DbgInfo);
     1418    rc = PDMDevHlpDBGFInfoRegister(pDevIns, "apic", "Display local APIC state for current CPU. Recognizes "
     1419                                                    "'basic', 'lvt', 'timer' as arguments, defaults to 'basic'.", apicR3DbgInfo);
     1420    AssertRCReturn(rc, rc);
     1421
     1422#ifdef VBOX_WITH_STATISTICS
     1423    /*
     1424     * Statistics.
     1425     */
     1426#define APIC_REG_COUNTER(a_Reg, a_Desc, a_Key) \
     1427    do { \
     1428        rc = STAMR3RegisterF(pVM, a_Reg, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, a_Desc, a_Key, idCpu); \
     1429        AssertRCReturn(rc, rc); \
     1430    } while(0)
     1431
     1432    bool const fHasRC = !HMIsEnabled(pVM);
     1433    for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++)
     1434    {
     1435        PVMCPU   pVCpu     = &pVM->aCpus[idCpu];
     1436        PAPICCPU pApicCpu  = VMCPU_TO_APICCPU(pVCpu);
     1437
     1438        APIC_REG_COUNTER(&pApicCpu->StatMmioReadR0,  "Number of APIC MMIO reads in R0.",  "/Devices/APIC/%u/R0/MmioRead");
     1439        APIC_REG_COUNTER(&pApicCpu->StatMmioWriteR0, "Number of APIC MMIO writes in R0.", "/Devices/APIC/%u/R0/MmioWrite");
     1440        APIC_REG_COUNTER(&pApicCpu->StatMsrReadR0,   "Number of APIC MSR reads in R0.",   "/Devices/APIC/%u/R0/MsrRead");
     1441        APIC_REG_COUNTER(&pApicCpu->StatMsrWriteR0,  "Number of APIC MSR writes in R0.",  "/Devices/APIC/%u/R0/MsrWrite");
     1442
     1443        APIC_REG_COUNTER(&pApicCpu->StatMmioReadR3,  "Number of APIC MMIO reads in R3.",  "/Devices/APIC/%u/R3/MmioReadR3");
     1444        APIC_REG_COUNTER(&pApicCpu->StatMmioWriteR3, "Number of APIC MMIO writes in R3.", "/Devices/APIC/%u/R3/MmioWriteR3");
     1445        APIC_REG_COUNTER(&pApicCpu->StatMsrReadR3,   "Number of APIC MSR reads in R3.",   "/Devices/APIC/%u/R3/MsrReadR3");
     1446        APIC_REG_COUNTER(&pApicCpu->StatMsrWriteR3,  "Number of APIC MSR writes in R3.",  "/Devices/APIC/%u/R3/MsrWriteR3");
     1447
     1448        if (fHasRC)
     1449        {
     1450            APIC_REG_COUNTER(&pApicCpu->StatMmioReadRC,  "Number of APIC MMIO reads in RC.",  "/Devices/APIC/%u/RC/MmioRead");
     1451            APIC_REG_COUNTER(&pApicCpu->StatMmioWriteRC, "Number of APIC MMIO writes in RC.", "/Devices/APIC/%u/RC/MmioWrite");
     1452            APIC_REG_COUNTER(&pApicCpu->StatMsrReadRC,   "Number of APIC MSR reads in RC.",   "/Devices/APIC/%u/RC/MsrRead");
     1453            APIC_REG_COUNTER(&pApicCpu->StatMsrWriteRC,  "Number of APIC MSR writes in RC.",  "/Devices/APIC/%u/RC/MsrWrite");
     1454        }
     1455    }
     1456# undef APIC_REG_ACCESS_COUNTER
     1457#endif
    14641458
    14651459    return VINF_SUCCESS;
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