linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Will Deacon <will@kernel.org>
To: linux-kernel@vger.kernel.org, iommu@lists.linuxfoundation.org
Cc: kernel-team@android.com, Will Deacon <will@kernel.org>,
	Jean-Philippe Brucker <jean-philippe@linaro.org>,
	Jordan Crouse <jcrouse@codeaurora.org>,
	John Garry <john.garry@huawei.com>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Saravana Kannan <saravanak@google.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	"Isaac J. Manjarres" <isaacm@codeaurora.org>,
	Robin Murphy <robin.murphy@arm.com>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Joerg Roedel <joro@8bytes.org>, Ard Biesheuvel <ardb@kernel.org>
Subject: [PATCH v4 11/16] iommu/arm-smmu-v3: Unregister IOMMU and bus ops on device removal
Date: Thu, 19 Dec 2019 12:03:47 +0000	[thread overview]
Message-ID: <20191219120352.382-12-will@kernel.org> (raw)
In-Reply-To: <20191219120352.382-1-will@kernel.org>

When removing the SMMUv3 driver, we need to clear any state that we
registered during probe. This includes our bus ops, sysfs entries and
the IOMMU device registered for early firmware probing of masters.

Signed-off-by: Will Deacon <will@kernel.org>
---
 drivers/iommu/arm-smmu-v3.c | 64 +++++++++++++++++++++++++------------
 1 file changed, 43 insertions(+), 21 deletions(-)

diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c
index 9d4c9de6172d..46160a2fec3e 100644
--- a/drivers/iommu/arm-smmu-v3.c
+++ b/drivers/iommu/arm-smmu-v3.c
@@ -3565,6 +3565,45 @@ static unsigned long arm_smmu_resource_size(struct arm_smmu_device *smmu)
 		return SZ_128K;
 }
 
+static int arm_smmu_set_bus_ops(struct iommu_ops *ops)
+{
+	int err;
+
+#ifdef CONFIG_PCI
+	if (pci_bus_type.iommu_ops != ops) {
+		if (ops)
+			pci_request_acs();
+		err = bus_set_iommu(&pci_bus_type, ops);
+		if (err)
+			return err;
+	}
+#endif
+#ifdef CONFIG_ARM_AMBA
+	if (amba_bustype.iommu_ops != ops) {
+		err = bus_set_iommu(&amba_bustype, ops);
+		if (err)
+			goto err_reset_pci_ops;
+	}
+#endif
+	if (platform_bus_type.iommu_ops != ops) {
+		err = bus_set_iommu(&platform_bus_type, ops);
+		if (err)
+			goto err_reset_amba_ops;
+	}
+
+	return 0;
+
+err_reset_amba_ops:
+#ifdef CONFIG_ARM_AMBA
+	bus_set_iommu(&amba_bustype, NULL);
+#endif
+err_reset_pci_ops: __maybe_unused;
+#ifdef CONFIG_PCI
+	bus_set_iommu(&pci_bus_type, NULL);
+#endif
+	return err;
+}
+
 static int arm_smmu_device_probe(struct platform_device *pdev)
 {
 	int irq, ret;
@@ -3655,33 +3694,16 @@ static int arm_smmu_device_probe(struct platform_device *pdev)
 		return ret;
 	}
 
-#ifdef CONFIG_PCI
-	if (pci_bus_type.iommu_ops != &arm_smmu_ops) {
-		pci_request_acs();
-		ret = bus_set_iommu(&pci_bus_type, &arm_smmu_ops);
-		if (ret)
-			return ret;
-	}
-#endif
-#ifdef CONFIG_ARM_AMBA
-	if (amba_bustype.iommu_ops != &arm_smmu_ops) {
-		ret = bus_set_iommu(&amba_bustype, &arm_smmu_ops);
-		if (ret)
-			return ret;
-	}
-#endif
-	if (platform_bus_type.iommu_ops != &arm_smmu_ops) {
-		ret = bus_set_iommu(&platform_bus_type, &arm_smmu_ops);
-		if (ret)
-			return ret;
-	}
-	return 0;
+	return arm_smmu_set_bus_ops(&arm_smmu_ops);
 }
 
 static int arm_smmu_device_remove(struct platform_device *pdev)
 {
 	struct arm_smmu_device *smmu = platform_get_drvdata(pdev);
 
+	arm_smmu_set_bus_ops(NULL);
+	iommu_device_unregister(&smmu->iommu);
+	iommu_device_sysfs_remove(&smmu->iommu);
 	arm_smmu_device_disable(smmu);
 
 	return 0;
-- 
2.24.1.735.g03f4e72817-goog


  parent reply	other threads:[~2019-12-19 12:04 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-19 12:03 [PATCH v4 00/16] iommu: Permit modular builds of ARM SMMU[v3] drivers Will Deacon
2019-12-19 12:03 ` [PATCH v4 01/16] drivers/iommu: Export core IOMMU API symbols to permit modular drivers Will Deacon
2019-12-19 12:03 ` [PATCH v4 02/16] iommu/of: Request ACS from the PCI core when configuring IOMMU linkage Will Deacon
2019-12-19 12:03 ` [PATCH v4 03/16] PCI/ATS: Restore EXPORT_SYMBOL_GPL() for pci_{enable,disable}_ats() Will Deacon
2019-12-20  8:43   ` Joerg Roedel
2019-12-20 15:03     ` Bjorn Helgaas
2019-12-19 12:03 ` [PATCH v4 04/16] PCI: Export pci_ats_disabled() as a GPL symbol to modules Will Deacon
2019-12-19 12:03 ` [PATCH v4 05/16] drivers/iommu: Take a ref to the IOMMU driver prior to ->add_device() Will Deacon
2019-12-19 14:44   ` Greg Kroah-Hartman
2020-01-09 14:16     ` Will Deacon
2020-01-09 18:17       ` Greg Kroah-Hartman
2019-12-19 12:03 ` [PATCH v4 06/16] iommu/of: Take a ref to the IOMMU driver during ->of_xlate() Will Deacon
2019-12-19 12:03 ` [PATCH v4 07/16] drivers/iommu: Allow IOMMU bus ops to be unregistered Will Deacon
2019-12-19 12:03 ` [PATCH v4 08/16] Revert "iommu/arm-smmu: Make arm-smmu-v3 explicitly non-modular" Will Deacon
2019-12-19 12:03 ` [PATCH v4 09/16] Revert "iommu/arm-smmu: Make arm-smmu " Will Deacon
2019-12-19 12:03 ` [PATCH v4 10/16] iommu/arm-smmu: Prevent forced unbinding of Arm SMMU drivers Will Deacon
2019-12-19 12:03 ` Will Deacon [this message]
2019-12-19 12:03 ` [PATCH v4 12/16] iommu/arm-smmu: Support SMMU module probing from the IORT Will Deacon
2019-12-19 12:03 ` [PATCH v4 13/16] iommu/arm-smmu-v3: Allow building as a module Will Deacon
2019-12-19 12:03 ` [PATCH v4 14/16] iommu/arm-smmu: Unregister IOMMU and bus ops on device removal Will Deacon
2019-12-19 12:03 ` [PATCH v4 15/16] iommu/arm-smmu: Allow building as a module Will Deacon
2019-12-19 12:03 ` [PATCH v4 16/16] iommu/arm-smmu: Update my email address in MODULE_AUTHOR() Will Deacon
2019-12-19 12:12 ` [PATCH v4 00/16] iommu: Permit modular builds of ARM SMMU[v3] drivers John Garry
2019-12-19 14:44 ` Greg Kroah-Hartman
2019-12-20 16:13 ` Joerg Roedel
2020-01-06 10:48   ` Will Deacon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191219120352.382-12-will@kernel.org \
    --to=will@kernel.org \
    --cc=ardb@kernel.org \
    --cc=bhelgaas@google.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=iommu@lists.linuxfoundation.org \
    --cc=isaacm@codeaurora.org \
    --cc=jcrouse@codeaurora.org \
    --cc=jean-philippe@linaro.org \
    --cc=john.garry@huawei.com \
    --cc=joro@8bytes.org \
    --cc=kernel-team@android.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lorenzo.pieralisi@arm.com \
    --cc=robin.murphy@arm.com \
    --cc=saravanak@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).