lkml.org 
[lkml]   [2021]   [Sep]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[RFC 12/20] iommu/iommufd: Add IOMMU_CHECK_EXTENSION
Date
As aforementioned, userspace should check extension for what formats
can be specified when allocating an IOASID. This patch adds such
interface for userspace. In this RFC, iommufd reports EXT_MAP_TYPE1V2
support and no no-snoop support yet.

Signed-off-by: Liu Yi L <yi.l.liu@intel.com>
---
drivers/iommu/iommufd/iommufd.c | 7 +++++++
include/uapi/linux/iommu.h | 27 +++++++++++++++++++++++++++
2 files changed, 34 insertions(+)

diff --git a/drivers/iommu/iommufd/iommufd.c b/drivers/iommu/iommufd/iommufd.c
index 4839f128b24a..e45d76359e34 100644
--- a/drivers/iommu/iommufd/iommufd.c
+++ b/drivers/iommu/iommufd/iommufd.c
@@ -306,6 +306,13 @@ static long iommufd_fops_unl_ioctl(struct file *filep,
return ret;

switch (cmd) {
+ case IOMMU_CHECK_EXTENSION:
+ switch (arg) {
+ case EXT_MAP_TYPE1V2:
+ return 1;
+ default:
+ return 0;
+ }
case IOMMU_DEVICE_GET_INFO:
ret = iommufd_get_device_info(ictx, arg);
break;
diff --git a/include/uapi/linux/iommu.h b/include/uapi/linux/iommu.h
index 5cbd300eb0ee..49731be71213 100644
--- a/include/uapi/linux/iommu.h
+++ b/include/uapi/linux/iommu.h
@@ -14,6 +14,33 @@
#define IOMMU_TYPE (';')
#define IOMMU_BASE 100

+/*
+ * IOMMU_CHECK_EXTENSION - _IO(IOMMU_TYPE, IOMMU_BASE + 0)
+ *
+ * Check whether an uAPI extension is supported.
+ *
+ * It's unlikely that all planned capabilities in IOMMU fd will be ready
+ * in one breath. User should check which uAPI extension is supported
+ * according to its intended usage.
+ *
+ * A rough list of possible extensions may include:
+ *
+ * - EXT_MAP_TYPE1V2 for vfio type1v2 map semantics;
+ * - EXT_DMA_NO_SNOOP for no-snoop DMA support;
+ * - EXT_MAP_NEWTYPE for an enhanced map semantics;
+ * - EXT_MULTIDEV_GROUP for 1:N iommu group;
+ * - EXT_IOASID_NESTING for what the name stands;
+ * - EXT_USER_PAGE_TABLE for user managed page table;
+ * - EXT_USER_PASID_TABLE for user managed PASID table;
+ * - EXT_DIRTY_TRACKING for tracking pages dirtied by DMA;
+ * - ...
+ *
+ * Return: 0 if not supported, 1 if supported.
+ */
+#define EXT_MAP_TYPE1V2 1
+#define EXT_DMA_NO_SNOOP 2
+#define IOMMU_CHECK_EXTENSION _IO(IOMMU_TYPE, IOMMU_BASE + 0)
+
/*
* IOMMU_DEVICE_GET_INFO - _IOR(IOMMU_TYPE, IOMMU_BASE + 1,
* struct iommu_device_info)
--
2.25.1
\
 
 \ /
  Last update: 2021-09-19 08:45    [W:0.736 / U:4.532 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site