On Tue, Jun 08, 2021 at 10:53:02AM +1000, David Gibson wrote: > On Thu, Jun 03, 2021 at 08:52:24AM -0300, Jason Gunthorpe wrote: > > On Thu, Jun 03, 2021 at 03:13:44PM +1000, David Gibson wrote: > > > > > > We can still consider it a single "address space" from the IOMMU > > > > perspective. What has happened is that the address table is not just a > > > > 64 bit IOVA, but an extended ~80 bit IOVA formed by "PASID, IOVA". > > > > > > True. This does complexify how we represent what IOVA ranges are > > > valid, though. I'll bet you most implementations don't actually > > > implement a full 64-bit IOVA, which means we effectively have a large > > > number of windows from (0..max IOVA) for each valid pasid. This adds > > > another reason I don't think my concept of IOVA windows is just a > > > power specific thing. > > > > Yes > > > > Things rapidly get into weird hardware specific stuff though, the > > request will be for things like: > > "ARM PASID&IO page table format from SMMU IP block vXX" > > So, I'm happy enough for picking a user-managed pagetable format to > imply the set of valid IOVA ranges (though a query might be nice). I think a query is mandatory, and optionally asking for ranges seems generally useful as a HW property. The danger is things can get really tricky as the app can ask for ranges some HW needs but other HW can't provide. I would encourage a flow where "generic" apps like DPDK can somehow just ignore this, or at least be very, very simplified "I want around XX GB of IOVA space" dpdk type apps vs qemu apps are really quite different and we should be carefully that the needs of HW accelerated vIOMMU emulation do not trump the needs of simple universal control over a DMA map. Jason