|
@@ -129,6 +129,7 @@ int intel_svm_enable_prq(struct intel_iommu *iommu)
|
|
|
pr_err("IOMMU: %s: Failed to request IRQ for page request queue\n",
|
|
|
iommu->name);
|
|
|
dmar_free_hwirq(irq);
|
|
|
+ iommu->pr_irq = 0;
|
|
|
goto err;
|
|
|
}
|
|
|
dmar_writeq(iommu->reg + DMAR_PQH_REG, 0ULL);
|
|
@@ -144,9 +145,11 @@ int intel_svm_finish_prq(struct intel_iommu *iommu)
|
|
|
dmar_writeq(iommu->reg + DMAR_PQT_REG, 0ULL);
|
|
|
dmar_writeq(iommu->reg + DMAR_PQA_REG, 0ULL);
|
|
|
|
|
|
- free_irq(iommu->pr_irq, iommu);
|
|
|
- dmar_free_hwirq(iommu->pr_irq);
|
|
|
- iommu->pr_irq = 0;
|
|
|
+ if (iommu->pr_irq) {
|
|
|
+ free_irq(iommu->pr_irq, iommu);
|
|
|
+ dmar_free_hwirq(iommu->pr_irq);
|
|
|
+ iommu->pr_irq = 0;
|
|
|
+ }
|
|
|
|
|
|
free_pages((unsigned long)iommu->prq, PRQ_ORDER);
|
|
|
iommu->prq = NULL;
|