[RFC PATCH 3/6] iommu: Introduce struct iommu_mm_data

From: Tina Zhang
Date: Thu Jul 06 2023 - 21:35:16 EST


To make sva domain 1:1 with mm pasid, mm needs to keep reference to the
sva domain as well as keeping the information of mm pasid. Introduce
struct iommu_mm_data to wrap the information up.

When a process is created, the mm pasid is initialized as IOMMU_PASID_
INVALID. The default_iommu_mms is introduced to initialize an mm pasid
with that default value.

Signed-off-by: Tina Zhang <tina.zhang@xxxxxxxxx>
---
drivers/iommu/iommu.c | 2 ++
include/linux/iommu.h | 7 +++++++
2 files changed, 9 insertions(+)

diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index f1dcfa3f1a1b4..35fa1c1b12826 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -83,6 +83,8 @@ static const char * const iommu_group_resv_type_string[] = {
[IOMMU_RESV_SW_MSI] = "msi",
};

+struct iommu_mm_data default_iommu_mm = { IOMMU_PASID_INVALID, NULL };
+
#define IOMMU_CMD_LINE_DMA_API BIT(0)
#define IOMMU_CMD_LINE_STRICT BIT(1)

diff --git a/include/linux/iommu.h b/include/linux/iommu.h
index d39e647219eb8..20135912584ba 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@ -42,6 +42,8 @@ struct iommu_sva;
struct iommu_fault_event;
struct iommu_dma_cookie;

+extern struct iommu_mm_data default_iommu_mm;
+
/* iommu fault flags */
#define IOMMU_FAULT_READ 0x0
#define IOMMU_FAULT_WRITE 0x1
@@ -664,6 +666,11 @@ struct iommu_sva {
struct iommu_domain *domain;
};

+struct iommu_mm_data {
+ u32 pasid;
+ struct iommu_domain *sva_domain;
+};
+
int iommu_fwspec_init(struct device *dev, struct fwnode_handle *iommu_fwnode,
const struct iommu_ops *ops);
void iommu_fwspec_free(struct device *dev);
--
2.34.1