IOMMU Archive on lore.kernel.org
 help / color / Atom feed
From: Deepa Dinamani <deepa.kernel@gmail.com>
To: joro@8bytes.org, linux-kernel@vger.kernel.org
Cc: iommu@lists.linux-foundation.org, dwmw2@infradead.org
Subject: [PATCH] intel-iommu: Turn off translations at shutdown
Date: Thu,  7 Nov 2019 12:59:14 -0800
Message-ID: <20191107205914.10611-1-deepa.kernel@gmail.com> (raw)

The intel-iommu driver assumes that the iommu state is
cleaned up at the start of the new kernel.
But, when we try to kexec boot something other than the
Linux kernel, the cleanup cannot be relied upon.
Hence, cleanup before we go down for reboot.

Keeping the cleanup at initialization also, in case BIOS
leaves the IOMMU enabled.

I considered turning off iommu only during kexec reboot,
but a clean shutdown seems always a good idea. But if
someone wants to make it conditional, we can do that.

Tested that before, the info message
'DMAR: Translation was enabled for <iommu> but we are not in kdump mode'
would be reported for each iommu. The message will not appear when the
DMA-remapping is not enabled on entry to the kernel.

Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
---
 drivers/iommu/intel-iommu.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
index fe8097078669..f0636b263722 100644
--- a/drivers/iommu/intel-iommu.c
+++ b/drivers/iommu/intel-iommu.c
@@ -4764,6 +4764,26 @@ static void intel_disable_iommus(void)
 		iommu_disable_translation(iommu);
 }
 
+static void intel_iommu_shutdown(void)
+{
+	struct dmar_drhd_unit *drhd;
+	struct intel_iommu *iommu = NULL;
+
+	if (no_iommu || dmar_disabled)
+		return;
+
+	down_write(&dmar_global_lock);
+
+	/* Disable PMRs explicitly here. */
+	for_each_iommu(iommu, drhd)
+		iommu_disable_protect_mem_regions(iommu);
+
+	/* Make sure the IOMMUs are switched off */
+	intel_disable_iommus();
+
+	up_write(&dmar_global_lock);
+}
+
 static inline struct intel_iommu *dev_to_intel_iommu(struct device *dev)
 {
 	struct iommu_device *iommu_dev = dev_to_iommu_device(dev);
@@ -5013,6 +5033,8 @@ int __init intel_iommu_init(void)
 	}
 	up_write(&dmar_global_lock);
 
+	x86_platform.iommu_shutdown = intel_iommu_shutdown;
+
 #if defined(CONFIG_X86) && defined(CONFIG_SWIOTLB)
 	/*
 	 * If the system has no untrusted device or the user has decided
-- 
2.17.1

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

             reply index

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-07 20:59 Deepa Dinamani [this message]
2019-11-07 21:27 ` Deepa Dinamani
2019-11-08  3:07   ` Lu Baolu
2019-11-08  3:06 ` Lu Baolu
2019-11-08 22:28   ` Deepa Dinamani
2019-11-09  0:35     ` Lu Baolu
2019-11-08  7:54 ` David Woodhouse
2019-11-08  8:47   ` Zeng, Jason
2019-11-08  8:57     ` David Woodhouse
2019-11-08  9:11       ` Zeng, Jason
2019-11-08 22:48         ` Deepa Dinamani
2019-11-10 18:24           ` Deepa Dinamani
2019-11-10 20:36             ` Deepa Dinamani
2019-11-11  2:35               ` Zeng, Jason
2019-11-11  0:39           ` Zeng, Jason

Reply instructions:

You may reply publically 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=20191107205914.10611-1-deepa.kernel@gmail.com \
    --to=deepa.kernel@gmail.com \
    --cc=dwmw2@infradead.org \
    --cc=iommu@lists.linux-foundation.org \
    --cc=joro@8bytes.org \
    --cc=linux-kernel@vger.kernel.org \
    /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

IOMMU Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-iommu/0 linux-iommu/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-iommu linux-iommu/ https://lore.kernel.org/linux-iommu \
		iommu@lists.linux-foundation.org
	public-inbox-index linux-iommu

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.linux-foundation.lists.iommu


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git