VirtualBox

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


Ignore:
Timestamp:
Sep 9, 2020 9:50:01 AM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
140287
Message:

AMD IOMMU: bugref:9654 Fix accidentally not copying/initialize MSIMSG values. Fix using the translated memory address on
successful translations from the IOMMU. Fix not remapping any interrupt when IOMMU code is compiled but an IOMMU is not present.

Location:
trunk/src/VBox/VMM/VMMR3
Files:
3 edited

Legend:

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

    r85007 r86070  
    18341834        uint16_t const uDevId = PCIBDF_MAKE(pBus->iBus, pPciDev->uDevFn);
    18351835        int rc = pIommu->pfnMemRead(pDevInsIommu, uDevId, GCPhys, cbRead, &GCPhysOut);
    1836         if (RT_FAILURE(rc))
     1836        if (RT_SUCCESS(rc))
     1837            GCPhys = GCPhysOut;
     1838        else
    18371839        {
    18381840            Log(("pdmR3DevHlp_PCIPhysRead: IOMMU translation failed. uDevId=%#x GCPhys=%#RGp cb=%u rc=%Rrc\n", uDevId, GCPhys,
     
    18861888        uint16_t const uDevId = PCIBDF_MAKE(pBus->iBus, pPciDev->uDevFn);
    18871889        int rc = pIommu->pfnMemWrite(pDevInsIommu, uDevId, GCPhys, cbWrite, &GCPhysOut);
    1888         if (RT_FAILURE(rc))
     1890        if (RT_SUCCESS(rc))
     1891            GCPhys = GCPhysOut;
     1892        else
    18891893        {
    18901894            Log(("pdmR3DevHlp_PCIPhysRead: IOMMU translation failed. uDevId=%#x GCPhys=%#RGp cb=%u rc=%Rrc\n", uDevId, GCPhys,
  • trunk/src/VBox/VMM/VMMR3/PDMDevHlpTracing.cpp

    r85126 r86070  
    433433        uint16_t const uDevId = PCIBDF_MAKE(pBus->iBus, pPciDev->uDevFn);
    434434        int rc = pIommu->pfnMemRead(pDevInsIommu, uDevId, GCPhys, cbRead, &GCPhysOut);
    435         if (RT_FAILURE(rc))
     435        if (RT_SUCCESS(rc))
     436            GCPhys = GCPhysOut;
     437        else
    436438        {
    437439            Log(("pdmR3DevHlp_PCIPhysRead: IOMMU translation failed. uDevId=%#x GCPhys=%#RGp cb=%u rc=%Rrc\n", uDevId, GCPhys,
     
    439441            return rc;
    440442        }
     443
     444        GCPhys = GCPhysOut;
    441445    }
    442446#endif
     
    485489        uint16_t const uDevId = PCIBDF_MAKE(pBus->iBus, pPciDev->uDevFn);
    486490        int rc = pIommu->pfnMemWrite(pDevInsIommu, uDevId, GCPhys, cbWrite, &GCPhysOut);
    487         if (RT_FAILURE(rc))
     491        if (RT_SUCCESS(rc))
     492            GCPhys = GCPhysOut;
     493        else
    488494        {
    489495            Log(("pdmR3DevHlp_PCIPhysRead: IOMMU translation failed. uDevId=%#x GCPhys=%#RGp cb=%u rc=%Rrc\n", uDevId, GCPhys,
     
    491497            return rc;
    492498        }
     499
     500        GCPhys = GCPhysOut;
    493501    }
    494502#endif
  • trunk/src/VBox/VMM/VMMR3/PDMDevMiscHlp.cpp

    r84826 r86070  
    157157    {
    158158        int rc = pIommu->pfnMsiRemap(pDevInsIommu, uDevId, pMsiIn, pMsiOut);
    159         if (RT_FAILURE(rc))
    160         {
    161             Log(("pdmR3IoApicHlp_IommuRemapMsi: IOMMU MSI remap failed. uDevId=%#x pMsiIn=(%#RX64, %#RU32) rc=%Rrc\n",
    162                  uDevId, pMsiIn->Addr.u64, pMsiIn->Data.u32, rc));
     159        if (RT_SUCCESS(rc))
    163160            return rc;
    164         }
     161
     162        Log(("pdmR3IoApicHlp_IommuRemapMsi: IOMMU MSI remap failed. uDevId=%#x pMsiIn=(%#RX64, %#RU32) rc=%Rrc\n",
     163             uDevId, pMsiIn->Addr.u64, pMsiIn->Data.u32, rc));
     164        return rc;
    165165    }
    166166#else
    167167    RT_NOREF(pDevIns, uDevId);
     168#endif
    168169    *pMsiOut = *pMsiIn;
    169 #endif
    170170    return VINF_SUCCESS;
    171171}
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