iommu/vt-d: Limit intel_iommu_set_dev_pasid() for paging domain
authorYi Liu <yi.l.liu@intel.com>
Fri, 8 Nov 2024 02:13:59 +0000 (10:13 +0800)
committerJoerg Roedel <jroedel@suse.de>
Fri, 8 Nov 2024 13:04:55 +0000 (14:04 +0100)
intel_iommu_set_dev_pasid() is only supposed to be used by paging domain,
so limit it.

Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Signed-off-by: Yi Liu <yi.l.liu@intel.com>
Link: https://lore.kernel.org/r/20241107122234.7424-9-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.c

index d19bd0f..f3ccbe5 100644 (file)
@@ -4154,6 +4154,9 @@ static int intel_iommu_set_dev_pasid(struct iommu_domain *domain,
        struct dev_pasid_info *dev_pasid;
        int ret;
 
+       if (WARN_ON_ONCE(!(domain->type & __IOMMU_DOMAIN_PAGING)))
+               return -EINVAL;
+
        if (!pasid_supported(iommu) || dev_is_real_dma_subdevice(dev))
                return -EOPNOTSUPP;
 
@@ -4182,8 +4185,7 @@ static int intel_iommu_set_dev_pasid(struct iommu_domain *domain,
 
        domain_remove_dev_pasid(old, dev, pasid);
 
-       if (domain->type & __IOMMU_DOMAIN_PAGING)
-               intel_iommu_debugfs_create_dev_pasid(dev_pasid);
+       intel_iommu_debugfs_create_dev_pasid(dev_pasid);
 
        return 0;