On Wed, May 03, 2023 at 10:17:29AM +0100, Robin Murphy wrote: > On 2023-05-01 19:02, Jason Gunthorpe wrote: > > tegra-gart seems to be kind of wonky since from the start its 'detach_dev' > > op doesn't actually touch hardware. It is supposed to empty the GART of > > all translations loaded into it. > > No, detach should never tear down translations - what if other devices are > still using the domain? ?? All other drivers do this. The core contract is that this sequence: dom = iommu_domain_alloc() iommu_attach_device(dom, dev) iommu_map(dom,...) iommu_detach_device(dom, dev) Will not continue to have the IOVA mapped to the device. We rely on this for various error paths. If the HW is multi-device then it is supposed to have groups. > > Call this weirdness PLATFORM which keeps the basic original > > ops->detach_dev() semantic alive without needing much special core code > > support. I'm guessing it really ends up in a BLOCKING configuration, but > > without any forced cleanup it is unsafe. > > The GART translation aperture is in physical address space, so the truth is > that all devices have access to it at the same time as having access to the > rest of physical address space. Attach/detach here really are only > bookkeeping for which domain currently owns the aperture. Oh yuk, that is not an UNMANAGED domain either as we now assume empty UNMANAGED domains are blocking in the core... > FWIW I wrote up this patch a while ago, not sure if it needs rebasing > again... That looks like the same as this patch, just calling the detach dev behavior IDENTITY. Can do.. Thanks, Jason