]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iommu/vt-d: Add iommu_domain_did() to get did
authorYi Liu <yi.l.liu@intel.com>
Fri, 8 Nov 2024 02:13:57 +0000 (10:13 +0800)
committerJoerg Roedel <jroedel@suse.de>
Fri, 8 Nov 2024 13:04:53 +0000 (14:04 +0100)
domain_id_iommu() does not support SVA type and identity type domains.
Add iommu_domain_did() to support all domain types.

Signed-off-by: Yi Liu <yi.l.liu@intel.com>
Link: https://lore.kernel.org/r/20241107122234.7424-7-yi.l.liu@intel.com
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/intel/iommu.h
drivers/iommu/intel/pasid.h

index df0261e03fadefa115b8e9e413dcf44f54bd6d20..cdca7d5061a7ee87a3c0543316873c0f9fa66b37 100644 (file)
@@ -806,6 +806,13 @@ static inline struct dmar_domain *to_dmar_domain(struct iommu_domain *dom)
        return container_of(dom, struct dmar_domain, domain);
 }
 
+/*
+ * Domain ID reserved for pasid entries programmed for first-level
+ * only and pass-through transfer modes.
+ */
+#define FLPT_DEFAULT_DID               1
+#define NUM_RESERVED_DID               2
+
 /* Retrieve the domain ID which has allocated to the domain */
 static inline u16
 domain_id_iommu(struct dmar_domain *domain, struct intel_iommu *iommu)
@@ -816,6 +823,15 @@ domain_id_iommu(struct dmar_domain *domain, struct intel_iommu *iommu)
        return info->did;
 }
 
+static inline u16
+iommu_domain_did(struct iommu_domain *domain, struct intel_iommu *iommu)
+{
+       if (domain->type == IOMMU_DOMAIN_SVA ||
+           domain->type == IOMMU_DOMAIN_IDENTITY)
+               return FLPT_DEFAULT_DID;
+       return domain_id_iommu(to_dmar_domain(domain), iommu);
+}
+
 /*
  * 0: readable
  * 1: writable
index 06d1f7006d01e8baa69e0c93ccb6744197d1aa71..082f4fe20216a7d92b6f94b69d78cba17482d2e8 100644 (file)
 #define is_pasid_enabled(entry)                (((entry)->lo >> 3) & 0x1)
 #define get_pasid_dir_size(entry)      (1 << ((((entry)->lo >> 9) & 0x7) + 7))
 
-/*
- * Domain ID reserved for pasid entries programmed for first-level
- * only and pass-through transfer modes.
- */
-#define FLPT_DEFAULT_DID               1
-#define NUM_RESERVED_DID               2
-
 #define PASID_FLAG_NESTED              BIT(1)
 #define PASID_FLAG_PAGE_SNOOP          BIT(2)