From: Baolu Lu<baolu.lu@xxxxxxxxxxxxxxx>at least above might be changed to a unified call with the helper
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:intel_iommu_remove_dev_pasid(struct device *dev, ioasid_t pasid)
@@ -4388,14 +4386,8 @@ static void
mmWARN_ON_ONCE(!dev_pasid);
spin_unlock_irqrestore(&dmar_domain->lock, flags);
- /*
- * The SVA implementation needs to handle its own stuffs like the
FLPT_DEFAULT_DID, dev, pasid);- * 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,
The VT-d spec recommends that all SVA domains share a single domain ID.- intel_svm_remove_dev_pasid(domain);It seems very strange that SVA has a different DID scheme, why is
} else {
did = domain_id_iommu(dmar_domain, iommu);
cache_tag_unassign_domain(dmar_domain, did, dev, pasid);
this? PASID and SVA should not be different at this layer.
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.
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);
...
}