[PATCH v2 3/5] iommu/amd: Split probe error paths to preserve IRQ remapping
Pranjal Shrivastava <[email protected]>
| Newsgroups | dev.linux.lists.iommu,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pci |
|---|---|
| Message-ID | <[email protected]> |
Split the amd_iommu_probe_device() error paths into err_deinit and out_err. Proper init failures continue to call iommu_disable_device_dma() while configuration failures (like PD_MODE_NONE or ATS mismatches) skip it to preserve the rlookup_table entry required for IRQ remapping. Reported-by: [email protected] Closes: https://lore.kernel.org/all/[email protected]/ Suggested-by: Ankit Soni <[email protected]> Signed-off-by: Pranjal Shrivastava <[email protected]> --- drivers/iommu/amd/iommu.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c index 911a95527d74..808011a700de 100644 --- a/drivers/iommu/amd/iommu.c +++ b/drivers/iommu/amd/iommu.c @@ -2540,8 +2540,7 @@ static struct iommu_device *amd_iommu_probe_device(struct device *dev) ret = PTR_ERR(dev_data); dev_err(dev, "Failed to initialize - trying to proceed anyway\n"); iommu_dev = ERR_PTR(ret); - iommu_disable_device_dma(iommu, dev); - goto out_err; + goto err_deinit; } iommu_init_device_caps(dev_data, dev, iommu); @@ -2554,6 +2553,10 @@ static struct iommu_device *amd_iommu_probe_device(struct device *dev) goto out_err; } + return iommu_dev; + +err_deinit: + iommu_disable_device_dma(iommu, dev); out_err: return iommu_dev; } -- 2.55.0.691.gc56d675ccc-goog