On Tue, Nov 01, 2022 at 07:52:23AM +0000, Tian, Kevin wrote: > > IOMMU_CAP_ENFORCE_CACHE_COHERENCY we know what the > > iommu_domain will be > > capable of without having to create it. Use this to compute > > it's worth noting that the prerequisite is that vfio always enforces > cache coherency on a domain according to the iommu capability > of the devices attached to that domain. There is no mix of attaching > a device supporting the cap to a domain which doesn't enforce > coherency. With that we know what the domain will be w/o having > to create it. OK, I added this: VFIO always tries to upgrade domains to enforce cache coherency, it never attaches a device that supports enforce cache coherency to a less capable domain, so the cap test is a sufficient proxy for the ultimate outcome. iommufd also ensures that devices that set the cap will be connected to enforcing domains. > > + /* > > + * If the device does not have > > IOMMU_CAP_ENFORCE_CACHE_COHERENCY then > > + * any domain later attached to it will also not support it. > > + */ > > also add the other part i.e. if the device does have the cap then any domain > later attached to it will have the cap enabled. Only with both clarified > we can safely use the device cap here. And this: /* * If the device does not have IOMMU_CAP_ENFORCE_CACHE_COHERENCY then * any domain later attached to it will also not support it. If the cap * is set then the iommu_domain eventually attached to the device/group * must must use a domain with enforce_cache_coherency(). */ Jason