Messages in this thread | | | Date | Tue, 25 Jan 2022 14:48:02 +0000 | Subject | Re: [PATCH 0/7] iommu cleanup and refactoring | From | Robin Murphy <> |
| |
On 2022-01-24 17:44, Jason Gunthorpe wrote: > On Mon, Jan 24, 2022 at 09:46:26AM +0000, Tian, Kevin wrote: >>> From: Lu Baolu <baolu.lu@linux.intel.com> >>> Sent: Monday, January 24, 2022 3:11 PM >>> >>> Hi, >>> >>> The guest pasid and aux-domain related code are dead code in current >>> iommu subtree. As we have reached a consensus that all these features >>> should be based on the new iommufd framework (which is under active >>> development), the first part of this series removes and cleanups all >>> the dead code. >>> >>> The second part of this series refactors the iommu_domain by moving all >>> domain-specific ops from iommu_ops to a new domain_ops. This makes an >>> iommu_domain self-contained and represent the abstraction of an I/O >>> translation table in the IOMMU subsystem. With different type of >>> iommu_domain providing different set of ops, it's easier to support more >>> types of I/O translation tables. >> >> You may want to give more background on this end goal. In general there >> are four IOPT types in iommufd discussions: >> >> 1) The one currently tracked by iommu_domain, with a map/unmap semantics >> 2) The one managed by mm and shared to iommu via sva_bind/unbind ops >> 3) The one managed by userspace and bound to iommu via iommufd (require nesting) >> 4) The one managed by KVM (e.g. EPT) and shared to iommu via a TBD interface > > Yes, at least from an iommufd perspective I'd like to see one struct > for all of these types, mainly so we can have a uniform alloc, attach > and detatch flow for all io page table types.
Agreed, certainly an IOMMU_DOMAIN_SVA type that can both encapsulate the mm and effectively replace iommu_sva seems like a logical and fairly small next step. We already have the paradigm of different domain types supporting different ops, so initially an SVA domain would simply allow bind/unbind rather than attach/detach/map/unmap.
It might then further be possible to hide SVA bind/unbind behind the attach/detach interface, but AFAICS we'd still need distinct flows for attaching/binding the whole device vs. attaching/binding to a PASID, since they are fundamentally different things in their own right, and the ideal API should give us the orthogonality to also bind a device to an SVA domain without PASID (e.g. for KVM stage 2, or userspace assignment of simpler fault/stall-tolerant devices), or attach PASIDs to regular iommu_domains.
That distinction could of course be consolidated by flipping to the other approach of explicitly allocating the PASID first, then wrapping it in a struct device that could then be passed through the same attach/detach interfaces and distinguished internally, but although I still have a fondness for that approach I know I'm about the only one :)
Cheers, Robin.
> If we want to use the iommu_domain, or make iommu_domain a sub-class > of a new struct, can be determined as we go along. > > Regardless, I think this cleanup stands on its own. Moving the ops and > purging the dead code is clearly the right thing to do. > > Thanks, > Jason
| |