Changeset 88638 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Apr 22, 2021 5:40:05 AM (4 years ago)
- svn:sync-xref-src-repo-rev:
- 143951
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PDMAllIommu.cpp
r88636 r88638 89 89 PPDMIOMMU pIommu = PDMDEVINS_TO_IOMMU(pDevIns); 90 90 PPDMDEVINS pDevInsIommu = pIommu->CTX_SUFF(pDevIns); 91 if ( pDevInsIommu 92 && pDevInsIommu != pDevIns) 93 { 94 int rc = pIommu->pfnMsiRemap(pDevInsIommu, idDevice, pMsiIn, pMsiOut); 95 if (RT_FAILURE(rc)) 96 { 97 LogFunc(("MSI remap failed. idDevice=%#x pMsiIn=(%#RX64, %#RU32) rc=%Rrc\n", idDevice, pMsiIn->Addr.u64, 98 pMsiIn->Data.u32, rc)); 99 } 100 return rc; 101 } 102 /** @todo Should we return an rc such that we can reschedule to R3 if R0 isn't 103 * enabled? Is that even viable with the state the I/O APIC would be in? */ 104 return VERR_IOMMU_NOT_PRESENT; 91 Assert(pDevInsIommu); 92 if (pDevInsIommu != pDevIns) 93 return pIommu->pfnMsiRemap(pDevInsIommu, idDevice, pMsiIn, pMsiOut); 94 return VERR_IOMMU_CANNOT_CALL_SELF; 105 95 } 106 96 … … 126 116 PPDMIOMMU pIommu = PDMDEVINS_TO_IOMMU(pDevIns); 127 117 PPDMDEVINS pDevInsIommu = pIommu->CTX_SUFF(pDevIns); 128 if ( pDevInsIommu 129 && pDevInsIommu != pDevIns) 130 { 118 if (pDevInsIommu) 119 { 120 if (pDevInsIommu != pDevIns) 121 { /* likely */ } 122 else 123 return VERR_IOMMU_CANNOT_CALL_SELF; 124 131 125 uint16_t const idDevice = pdmIommuGetPciDeviceId(pDevIns, pPciDev); 132 126 int rc = VINF_SUCCESS; … … 190 184 PPDMIOMMU pIommu = PDMDEVINS_TO_IOMMU(pDevIns); 191 185 PPDMDEVINS pDevInsIommu = pIommu->CTX_SUFF(pDevIns); 192 if ( pDevInsIommu 193 && pDevInsIommu != pDevIns) 194 { 186 if (pDevInsIommu) 187 { 188 if (pDevInsIommu != pDevIns) 189 { /* likely */ } 190 else 191 return VERR_IOMMU_CANNOT_CALL_SELF; 192 195 193 uint16_t const idDevice = pdmIommuGetPciDeviceId(pDevIns, pPciDev); 196 194 int rc = VINF_SUCCESS; … … 251 249 PPDMIOMMU pIommu = PDMDEVINS_TO_IOMMU(pDevIns); 252 250 PPDMDEVINS pDevInsIommu = pIommu->CTX_SUFF(pDevIns); 253 if ( pDevInsIommu 254 && pDevInsIommu != pDevIns) 255 { 251 if (pDevInsIommu) 252 { 253 if (pDevInsIommu != pDevIns) 254 { /* likely */ } 255 else 256 return VERR_IOMMU_CANNOT_CALL_SELF; 257 256 258 uint16_t const idDevice = pdmIommuGetPciDeviceId(pDevIns, pPciDev); 257 259 size_t cbContig = 0; … … 296 298 PPDMIOMMU pIommu = PDMDEVINS_TO_IOMMU(pDevIns); 297 299 PPDMDEVINS pDevInsIommu = pIommu->CTX_SUFF(pDevIns); 298 if ( pDevInsIommu 299 && pDevInsIommu != pDevIns) 300 { 300 if (pDevInsIommu) 301 { 302 if (pDevInsIommu != pDevIns) 303 { /* likely */ } 304 else 305 return VERR_IOMMU_CANNOT_CALL_SELF; 306 301 307 uint16_t const idDevice = pdmIommuGetPciDeviceId(pDevIns, pPciDev); 302 308 size_t cbContig = 0; … … 344 350 PPDMIOMMU pIommu = PDMDEVINS_TO_IOMMU(pDevIns); 345 351 PPDMDEVINS pDevInsIommu = pIommu->CTX_SUFF(pDevIns); 346 if ( pDevInsIommu 347 && pDevInsIommu != pDevIns) 348 { 352 if (pDevInsIommu) 353 { 354 if (pDevInsIommu != pDevIns) 355 { /* likely */ } 356 else 357 return VERR_IOMMU_CANNOT_CALL_SELF; 358 349 359 /* Allocate space for translated addresses. */ 350 360 size_t const cbIovas = cPages * sizeof(uint64_t); … … 407 417 PPDMIOMMU pIommu = PDMDEVINS_TO_IOMMU(pDevIns); 408 418 PPDMDEVINS pDevInsIommu = pIommu->CTX_SUFF(pDevIns); 409 if ( pDevInsIommu 410 && pDevInsIommu != pDevIns) 411 { 419 if (pDevInsIommu) 420 { 421 if (pDevInsIommu != pDevIns) 422 { /* likely */ } 423 else 424 return VERR_IOMMU_CANNOT_CALL_SELF; 425 412 426 /* Allocate space for translated addresses. */ 413 427 size_t const cbIovas = cPages * sizeof(uint64_t);
Note:
See TracChangeset
for help on using the changeset viewer.