VirtualBox

Changeset 85895 in vbox


Ignore:
Timestamp:
Aug 27, 2020 7:14:53 AM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
140077
Message:

AMD IOMMU: bugref:9654 Logging, assertion and comment about unmapping MMIO region.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Bus/DevIommuAmd.cpp

    r85860 r85895  
    456456 * @{ */
    457457/** Log prefix string. */
    458 #define IOMMU_LOG_PFX                               "AMD_IOMMU"
     458#define IOMMU_LOG_PFX                               "IOMMU-AMD"
    459459/** The current saved state version. */
    460460#define IOMMU_SAVED_STATE_VERSION                   1
     
    25952595{
    25962596    IOMMU_ASSERT_LOCKED(pDevIns);
     2597    LogFlowFunc(("\n"));
    25972598
    25982599    PIOMMU pThis = PDMDEVINS_2_DATA(pDevIns, PIOMMU);
    25992600    if (   !ASMAtomicXchgBool(&pThis->fCmdThreadSignaled, true)
    26002601        &&  ASMAtomicReadBool(&pThis->fCmdThreadSleeping))
     2602    {
     2603        LogFlowFunc(("Signaling command thread\n"));
    26012604        PDMDevHlpSUPSemEventSignal(pDevIns, pThis->hEvtCmdThread);
     2605    }
    26022606}
    26032607
     
    44424446
    44434447    PIOMMU pThis = PDMDEVINS_2_DATA(pDevIns, PIOMMU);
     4448    LogFlowFunc(("uDevId=%#x uIova=%#RX64 cbRead=%u\n", uDevId, uIova, cbRead));
    44444449
    44454450    /* Addresses are forwarded without translation when the IOMMU is disabled. */
     
    44794484
    44804485    PIOMMU pThis = PDMDEVINS_2_DATA(pDevIns, PIOMMU);
     4486    LogFlowFunc(("uDevId=%#x uIova=%#RX64 cbWrite=%u\n", uDevId, uIova, cbWrite));
    44814487
    44824488    /* Addresses are forwarded without translation when the IOMMU is disabled. */
     
    47914797
    47924798    PIOMMU pThis = PDMDEVINS_2_DATA(pDevIns, PIOMMU);
     4799    LogFlowFunc(("uDevId=%#x\n", uDevId));
    47934800
    47944801    /* Interrupts are forwarded with remapping when the IOMMU is disabled. */
     
    48154822    Assert(!(off & (cb - 1)));
    48164823
     4824    LogFlowFunc(("off=%RGp cb=%u\n", off, cb));
     4825
    48174826    uint64_t const uValue = cb == 8 ? *(uint64_t const *)pv : *(uint32_t const *)pv;
    48184827    return iommuAmdWriteRegister(pDevIns, off, cb, uValue);
     
    48284837    Assert(cb == 4 || cb == 8);
    48294838    Assert(!(off & (cb - 1)));
     4839
     4840    LogFlowFunc(("off=%RGp cb=%u\n", off, cb));
    48304841
    48314842    uint64_t uResult;
     
    50875098{
    50885099    RT_NOREF(pThread);
    5089 
     5100    LogFlowFunc(("\n"));
    50905101    PIOMMU pThis = PDMDEVINS_2_DATA(pDevIns, PIOMMU);
    50915102    return PDMDevHlpSUPSemEventSignal(pDevIns, pThis->hEvtCmdThread);
     
    50995110                                                          unsigned cb, uint32_t *pu32Value)
    51005111{
     5112    LogFlowFunc(("\n"));
    51015113    /** @todo IOMMU: PCI config read stat counter. */
    51025114    VBOXSTRICTRC rcStrict = PDMDevHlpPCIConfigRead(pDevIns, pPciDev, uAddress, cb, pu32Value);
     
    51145126{
    51155127    PIOMMU pThis = PDMDEVINS_2_DATA(pDevIns, PIOMMU);
     5128    LogFlowFunc(("\n"));
    51165129
    51175130    /*
     
    51495162            if (pThis->IommuBar.n.u1Enable)
    51505163            {
    5151                 Assert(pThis->hMmio == NIL_IOMMMIOHANDLE);
     5164                Assert(pThis->hMmio != NIL_IOMMMIOHANDLE);
     5165                Assert(PDMDevHlpMmioGetMappingAddress(pDevIns, pThis->hMmio) == NIL_RTGCPHYS);
    51525166                Assert(!pThis->ExtFeat.n.u1PerfCounterSup); /* Base is 16K aligned when performance counters aren't supported. */
    51535167                RTGCPHYS const GCPhysMmioBase = RT_MAKE_U64(pThis->IommuBar.au32[0] & 0xffffc000, pThis->IommuBar.au32[1]);
     
    57515765    /** @todo IOMMU: Save state. */
    57525766    RT_NOREF2(pDevIns, pSSM);
     5767    LogFlowFunc(("\n"));
    57535768    return VERR_NOT_IMPLEMENTED;
    57545769}
     
    57625777    /** @todo IOMMU: Load state. */
    57635778    RT_NOREF4(pDevIns, pSSM, uVersion, uPass);
     5779    LogFlowFunc(("\n"));
    57645780    return VERR_NOT_IMPLEMENTED;
    57655781}
     
    57815797    PDMPCIDEV_ASSERT_VALID(pDevIns, pPciDev);
    57825798
     5799    LogFlowFunc(("\n"));
     5800
    57835801    memset(&pThis->aDevTabBaseAddrs[0], 0, sizeof(pThis->aDevTabBaseAddrs));
    57845802
     
    58445862    PDMPciDevSetDWord(pPciDev, IOMMU_PCI_OFF_BASE_ADDR_REG_LO, 0);
    58455863    PDMPciDevSetDWord(pPciDev, IOMMU_PCI_OFF_BASE_ADDR_REG_HI, 0);
     5864
     5865    /*
     5866     * I ASSUME all MMIO regions mapped by a PDM device are automatically unmapped
     5867     * on VM reset. If not, we need to enable the following...
     5868     */
     5869#if 0
     5870    /* Unmap the MMIO region on reset if it has been mapped previously. */
     5871    Assert(pThis->hMmio != NIL_IOMMMIOHANDLE);
     5872    if (PDMDevHlpMmioGetMappingAddress(pDevIns, pThis->hMmio) != NIL_RTGCPHYS)
     5873        PDMDevHlpMmioUnmap(pDevIns, pThis->hMmio);
     5874#endif
    58465875}
    58475876
     
    58535882{
    58545883    PDMDEV_CHECK_VERSIONS_RETURN_QUIET(pDevIns);
    5855     PIOMMU   pThis  = PDMDEVINS_2_DATA(pDevIns, PIOMMU);
     5884    PIOMMU pThis = PDMDEVINS_2_DATA(pDevIns, PIOMMU);
    58565885    LogFlowFunc(("\n"));
    58575886
     
    58725901{
    58735902    PDMDEV_CHECK_VERSIONS_RETURN(pDevIns);
    5874     RT_NOREF2(iInstance, pCfg);
    5875     LogFlowFunc(("\n"));
     5903    RT_NOREF(pCfg);
    58765904
    58775905    PIOMMU   pThis   = PDMDEVINS_2_DATA(pDevIns, PIOMMU);
    58785906    PIOMMUCC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PIOMMUCC);
    58795907    pThisCC->pDevInsR3 = pDevIns;
     5908
     5909    LogFlowFunc(("iInstance=%d\n", iInstance));
    58805910
    58815911    /*
     
    60346064     * Create the command thread and its event semaphore.
    60356065     */
     6066    char szDevIommu[64];
     6067    RT_ZERO(szDevIommu);
     6068    RTStrPrintf(szDevIommu, sizeof(szDevIommu), "IOMMU-%u", iInstance);
    60366069    rc = PDMDevHlpThreadCreate(pDevIns, &pThisCC->pCmdThread, pThis, iommuAmdR3CmdThread, iommuAmdR3CmdThreadWakeUp,
    6037                                0 /* cbStack */, RTTHREADTYPE_IO, "AMD-IOMMU");
     6070                               0 /* cbStack */, RTTHREADTYPE_IO, szDevIommu);
    60386071    AssertLogRelRCReturn(rc, rc);
    60396072
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