Re: [PATCH v2 12/12] iommu/vt-d: Retire struct intel_svm

From: Baolu Lu
Date: Thu Apr 11 2024 - 06:42:55 EST


On 2024/4/11 16:32, Tian, Kevin wrote:
From: Baolu Lu<baolu.lu@xxxxxxxxxxxxxxx>
Sent: Thursday, April 11, 2024 3:56 PM

On 2024/4/10 23:49, Jason Gunthorpe wrote:
On Wed, Apr 10, 2024 at 10:08:44AM +0800, Lu Baolu wrote:
@@ -4388,14 +4386,8 @@ static void
intel_iommu_remove_dev_pasid(struct device *dev, ioasid_t pasid)
WARN_ON_ONCE(!dev_pasid);
spin_unlock_irqrestore(&dmar_domain->lock, flags);

- /*
- * The SVA implementation needs to handle its own stuffs like the
mm
- * notification. Before consolidating that code into iommu core, let
- * the intel sva code handle it.
- */
if (domain->type == IOMMU_DOMAIN_SVA) {
cache_tag_unassign_domain(dmar_domain,
FLPT_DEFAULT_DID, dev, pasid);
- intel_svm_remove_dev_pasid(domain);
} else {
did = domain_id_iommu(dmar_domain, iommu);
cache_tag_unassign_domain(dmar_domain, did, dev, pasid);
It seems very strange that SVA has a different DID scheme, why is
this? PASID and SVA should not be different at this layer.
The VT-d spec recommends that all SVA domains share a single domain ID.
The PASID is unique to each SVA domain, hence the cache tags are unique.
Currently, the Intel IOMMU driver assigns different domain IDs for all
domains except the SVA type.

Sharing a domain ID is not specific to SVA. In general, for devices
under a single IOMMU, domains with unique PASIDs can share the same
domain ID.

In the long term (also on my task list), we will extend the cache tag
code to support sharing domain IDs and remove the domain type check from
the main code. This will also benefit the nesting case, where user
domains nested on the same parent could share a domain ID.

at least above might be changed to a unified call with the helper
accepting an iommu parameter and then finding proper did
internally based on domain type, e.g.

cache_tag_unassign_domain(domain, iommu, dev, pasid)
{
if (domain->type == IOMMU_DOMAIN_SVA)
did = FLPT_DEFAULT_DID;
else
did = domain_id_iommu(domain, iommu);

...
}

Yeah, your code is more graceful.

Best regards,
baolu