Re: [PATCH RFC 06/11] iommu/sva: Use attach/detach_pasid_dev in SVA interfaces

From: Lu Baolu
Date: Mon Mar 21 2022 - 07:02:34 EST


On 2022/3/21 16:04, Tian, Kevin wrote:
From: Lu Baolu <baolu.lu@xxxxxxxxxxxxxxx>
Sent: Sunday, March 20, 2022 2:40 PM
+struct iommu_sva *
+iommu_sva_bind_device(struct device *dev, struct mm_struct *mm, void
*drvdata)
+{
+ int ret = -EINVAL;
+ struct iommu_sva *handle;
+ struct iommu_domain *domain;
+
+ handle = kzalloc(sizeof(*handle), GFP_KERNEL);
+ if (!handle)
+ return ERR_PTR(-ENOMEM);
+
+ ret = iommu_sva_alloc_pasid(mm, 1, (1U << dev->iommu->pasid_bits)
- 1);
+ if (ret)
+ goto out;
+
+ domain = iommu_sva_domain_alloc(dev);
+ if (!domain) {
+ ret = -ENOMEM;
+ goto out;
+ }
+ domain->sva_cookie = mm;

one domain can be attached by multiple devices, so this should not be
a blind alloc.

Indeed. Perhaps we could associate the SVA domain with the mm->pasid and
add a user counter inside the domain.

Best regards,
baolu