Linux IOMMU Development
 help / color / mirror / Atom feed
From: Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>
To: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Cc: Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>,
	iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
Subject: [PATCH 5/5] iommu: Allow default domain type to be set on the kernel command line
Date: Thu, 19 Jan 2017 18:19:15 +0000	[thread overview]
Message-ID: <1484849955-1871-6-git-send-email-will.deacon@arm.com> (raw)
In-Reply-To: <1484849955-1871-1-git-send-email-will.deacon-5wv7dgnIgG8@public.gmane.org>

The IOMMU core currently initialises the default domain for each group
to IOMMU_DOMAIN_DMA, under the assumption that devices will use
IOMMU-backed DMA ops by default. However, in some cases it is desirable
for the DMA ops to bypass the IOMMU for performance reasons, reserving
use of translation for subsystems such as VFIO that require it for
enforcing device isolation.

Rather than modify each IOMMU driver to provide different semantics for
DMA domains, instead we introduce a command line parameter that can be
used to change the type of the default domain. Passthrough can then be
specified using "iommu.default_domain=identity" on the kernel command
line.

Signed-off-by: Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>
---
 drivers/iommu/iommu.c | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index dbe7f653bb7c..69f7f1a75543 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -36,6 +36,7 @@
 
 static struct kset *iommu_group_kset;
 static DEFINE_IDA(iommu_group_ida);
+static unsigned int iommu_def_domain_type = IOMMU_DOMAIN_DMA;
 
 struct iommu_callback_data {
 	const struct iommu_ops *ops;
@@ -86,6 +87,20 @@ static int __iommu_attach_group(struct iommu_domain *domain,
 static void __iommu_detach_group(struct iommu_domain *domain,
 				 struct iommu_group *group);
 
+static int __init iommu_set_def_domain_type(char *str)
+{
+	if (!str)
+		return -EINVAL;
+
+	if (!strcmp(str, "identity"))
+		iommu_def_domain_type = IOMMU_DOMAIN_IDENTITY;
+	else if (!strcmp(str, "dma"))
+		iommu_def_domain_type = IOMMU_DOMAIN_DMA;
+
+	return 0;
+}
+early_param("iommu.default_domain", iommu_set_def_domain_type);
+
 static ssize_t iommu_group_attr_show(struct kobject *kobj,
 				     struct attribute *__attr, char *buf)
 {
@@ -847,8 +862,8 @@ struct iommu_group *iommu_group_get_for_dev(struct device *dev)
 	 * IOMMU driver.
 	 */
 	if (!group->default_domain) {
-		group->default_domain = __iommu_domain_alloc(dev->bus,
-							     IOMMU_DOMAIN_DMA);
+		group->default_domain =
+			__iommu_domain_alloc(dev->bus, iommu_def_domain_type);
 		if (!group->domain)
 			group->domain = group->default_domain;
 	}
-- 
2.1.4

  parent reply	other threads:[~2017-01-19 18:19 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-19 18:19 [PATCH 0/5] Implement SMMU passthrough using the default domain Will Deacon
     [not found] ` <1484849955-1871-1-git-send-email-will.deacon-5wv7dgnIgG8@public.gmane.org>
2017-01-19 18:19   ` [PATCH 1/5] iommu/arm-smmu: Restrict domain attributes to UNMANAGED domains Will Deacon
     [not found]     ` <1484849955-1871-2-git-send-email-will.deacon-5wv7dgnIgG8@public.gmane.org>
2017-01-19 18:41       ` Robin Murphy
     [not found]         ` <89d795b9-a6d7-7f41-705c-b918ee66ebf0-5wv7dgnIgG8@public.gmane.org>
2017-01-26 17:06           ` Joerg Roedel
2017-01-26 17:03       ` Joerg Roedel
     [not found]         ` <20170126170329.GB27598-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2017-01-26 17:57           ` Will Deacon
2017-01-19 18:19   ` [PATCH 2/5] iommu/arm-smmu: Install bypass S2CRs for IOMMU_DOMAIN_IDENTITY domains Will Deacon
2017-01-19 18:50     ` Robin Murphy
2017-01-19 18:19   ` [PATCH 3/5] iommu/arm-smmu-v3: Install bypass STEs " Will Deacon
     [not found]     ` <1484849955-1871-4-git-send-email-will.deacon-5wv7dgnIgG8@public.gmane.org>
2017-01-19 18:56       ` Robin Murphy
2017-01-19 18:19   ` [PATCH 4/5] arm64: dma-mapping: Only swizzle DMA ops for IOMMU_DOMAIN_DMA Will Deacon
     [not found]     ` <1484849955-1871-5-git-send-email-will.deacon-5wv7dgnIgG8@public.gmane.org>
2017-01-19 19:00       ` Robin Murphy
2017-01-26 17:57         ` Will Deacon
2017-01-19 18:19   ` Will Deacon [this message]
     [not found]     ` <1484849955-1871-6-git-send-email-will.deacon-5wv7dgnIgG8@public.gmane.org>
2017-01-26 17:15       ` [PATCH 5/5] iommu: Allow default domain type to be set on the kernel command line Joerg Roedel
     [not found]         ` <20170126171555.GD27598-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2017-01-26 17:26           ` Robin Murphy
2017-01-26 17:48           ` Will Deacon
2017-01-24 15:12   ` [PATCH 0/5] Implement SMMU passthrough using the default domain Sricharan
2017-01-26 17:18     ` Joerg Roedel
     [not found]       ` <20170126171857.GE27598-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2017-02-02 15:02         ` Rob Clark
     [not found]           ` <CAF6AEGtfrrwVZ_W86_HqVsiqfcM=XFa+g2LECFYQJmvv7-JSqQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-02-02 15:12             ` Will Deacon
     [not found]               ` <20170202151241.GE13839-5wv7dgnIgG8@public.gmane.org>
2017-02-03 12:20                 ` Rob Clark
2017-02-02 15:45             ` Sricharan
2017-02-02 16:10               ` Will Deacon
     [not found]                 ` <20170202161047.GG13839-5wv7dgnIgG8@public.gmane.org>
2017-02-03 16:33                   ` Sricharan

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=1484849955-1871-6-git-send-email-will.deacon@arm.com \
    --to=will.deacon-5wv7dgnigg8@public.gmane.org \
    --cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
    --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.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
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