iommu: Expose DMA domain strictness via sysfs
authorRobin Murphy <robin.murphy@arm.com>
Wed, 11 Aug 2021 12:21:35 +0000 (13:21 +0100)
committerJoerg Roedel <jroedel@suse.de>
Wed, 18 Aug 2021 11:27:49 +0000 (13:27 +0200)
The sysfs interface for default domain types exists primarily so users
can choose the performance/security tradeoff relevant to their own
workload. As such, the choice between the policies for DMA domains fits
perfectly as an additional point on that scale - downgrading a
particular device from a strict default to non-strict may be enough to
let it reach the desired level of performance, while still retaining
more peace of mind than with a wide-open identity domain. Now that we've
abstracted non-strict mode as a distinct type of DMA domain, allow it to
be chosen through the user interface as well.

Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com>
Reviewed-by: John Garry <john.garry@huawei.com>
Signed-off-by: Robin Murphy <robin.murphy@arm.com>
Link: https://lore.kernel.org/r/0e08da5ed4069fd3473cfbadda758ca983becdbf.1628682049.git.robin.murphy@arm.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Documentation/ABI/testing/sysfs-kernel-iommu_groups
drivers/iommu/iommu.c

index eae2f1c..b15af6a 100644 (file)
@@ -42,8 +42,12 @@ Description: /sys/kernel/iommu_groups/<grp_id>/type shows the type of default
                ========  ======================================================
                DMA       All the DMA transactions from the device in this group
                          are translated by the iommu.
+               DMA-FQ    As above, but using batched invalidation to lazily
+                         remove translations after use. This may offer reduced
+                         overhead at the cost of reduced memory protection.
                identity  All the DMA transactions from the device in this group
-                         are not translated by the iommu.
+                         are not translated by the iommu. Maximum performance
+                         but zero protection.
                auto      Change to the type the device was booted with.
                ========  ======================================================
 
index e09f0d4..f653a70 100644 (file)
@@ -3268,6 +3268,8 @@ static ssize_t iommu_group_store_type(struct iommu_group *group,
                req_type = IOMMU_DOMAIN_IDENTITY;
        else if (sysfs_streq(buf, "DMA"))
                req_type = IOMMU_DOMAIN_DMA;
+       else if (sysfs_streq(buf, "DMA-FQ"))
+               req_type = IOMMU_DOMAIN_DMA_FQ;
        else if (sysfs_streq(buf, "auto"))
                req_type = 0;
        else