Skip to content

Commit 60b1daa

Browse files
LuBaolujoergroedel
authored andcommitted
iommu/vt-d: Fix error handling in sva enable/disable paths
Roll back all previous actions in error paths of intel_iommu_enable_sva() and intel_iommu_disable_sva(). Fixes: d5b9e4b ("iommu/vt-d: Report prq to io-pgfault framework") Reviewed-by: Kevin Tian <[email protected]> Signed-off-by: Lu Baolu <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Joerg Roedel <[email protected]>
1 parent d8a7c0c commit 60b1daa

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

drivers/iommu/intel/iommu.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4644,8 +4644,12 @@ static int intel_iommu_enable_sva(struct device *dev)
46444644
return -EINVAL;
46454645

46464646
ret = iopf_queue_add_device(iommu->iopf_queue, dev);
4647-
if (!ret)
4648-
ret = iommu_register_device_fault_handler(dev, iommu_queue_iopf, dev);
4647+
if (ret)
4648+
return ret;
4649+
4650+
ret = iommu_register_device_fault_handler(dev, iommu_queue_iopf, dev);
4651+
if (ret)
4652+
iopf_queue_remove_device(iommu->iopf_queue, dev);
46494653

46504654
return ret;
46514655
}
@@ -4657,8 +4661,12 @@ static int intel_iommu_disable_sva(struct device *dev)
46574661
int ret;
46584662

46594663
ret = iommu_unregister_device_fault_handler(dev);
4660-
if (!ret)
4661-
ret = iopf_queue_remove_device(iommu->iopf_queue, dev);
4664+
if (ret)
4665+
return ret;
4666+
4667+
ret = iopf_queue_remove_device(iommu->iopf_queue, dev);
4668+
if (ret)
4669+
iommu_register_device_fault_handler(dev, iommu_queue_iopf, dev);
46624670

46634671
return ret;
46644672
}

0 commit comments

Comments
 (0)