On 12/29/21 4:56 PM, Guoqing Jiang wrote:
Call irq_domain_free_fwnode to free 'fn' if dmar_enable_qi returns
failure, same as when irq_domain_create_hierarchy returns failure.
Signed-off-by: Guoqing Jiang <[email protected]>
Add a "Fixes" tag if you think this change needs backport.
---
drivers/iommu/intel/irq_remapping.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/iommu/intel/irq_remapping.c
b/drivers/iommu/intel/irq_remapping.c
index f912fe45bea2..6e8362c21fc3 100644
--- a/drivers/iommu/intel/irq_remapping.c
+++ b/drivers/iommu/intel/irq_remapping.c
@@ -594,6 +594,7 @@ static int intel_setup_irq_remapping(struct intel_iommu
*iommu)
dmar_disable_qi(iommu);
if (dmar_enable_qi(iommu)) {
+ irq_domain_free_fwnode(fn);
pr_err("Failed to enable queued invalidation\n");
goto out_free_bitmap;
}
The rewinding paths in intel_setup_irq_remapping() need more
enhancement. How about below changes?
diff --git a/drivers/iommu/intel/irq_remapping.c
b/drivers/iommu/intel/irq_remapping.c
index f912fe45bea2..89c32bf173ef 100644
--- a/drivers/iommu/intel/irq_remapping.c
+++ b/drivers/iommu/intel/irq_remapping.c
@@ -569,9 +569,8 @@ static int intel_setup_irq_remapping(struct
intel_iommu *iommu)
fn, &intel_ir_domain_ops,
iommu);
if (!iommu->ir_domain) {
- irq_domain_free_fwnode(fn);
pr_err("IR%d: failed to allocate irqdomain\n",
iommu->seq_id);
- goto out_free_bitmap;
+ goto out_free_fwnode;
}
iommu->ir_msi_domain =
arch_create_remap_msi_irq_domain(iommu->ir_domain,
@@ -595,7 +594,7 @@ static int intel_setup_irq_remapping(struct
intel_iommu *iommu)
if (dmar_enable_qi(iommu)) {
pr_err("Failed to enable queued invalidation\n");
- goto out_free_bitmap;
+ goto out_free_ir_domain;
}
}
@@ -619,6 +618,14 @@ static int intel_setup_irq_remapping(struct
intel_iommu *iommu)
return 0;
+out_free_ir_domain:
+ if (iommu->ir_msi_domain)
+ irq_domain_remove(iommu->ir_msi_domain);
+ irq_domain_remove(iommu->ir_domain);
+ iommu->ir_msi_domain = NULL;
+ iommu->ir_domain = NULL;
+out_free_fwnode:
+ irq_domain_free_fwnode(fn);
out_free_bitmap:
bitmap_free(bitmap);
out_free_pages:
Best regards,
baolu
_______________________________________________
iommu mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/iommu