Message ID | 3-v2-f090ae795824+6ad-intel_no_snoop_jgg@nvidia.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Make the iommu driver no-snoop block feature consistent | expand |
(CC Jason Wang) > From: Jason Gunthorpe > Sent: Thursday, April 7, 2022 11:24 PM > > While the comment was correct that this flag was intended to convey the > block no-snoop support in the IOMMU, it has become widely implemented > and > used to mean the IOMMU supports IOMMU_CACHE as a map flag. Only the > Intel > driver was different. > > Now that the Intel driver is using enforce_cache_coherency() update the > comment to make it clear that IOMMU_CAP_CACHE_COHERENCY is only > about > IOMMU_CACHE. Fix the Intel driver to return true since IOMMU_CACHE > always > works. > > The two places that test this flag, usnic and vdpa, are both assigning > userspace pages to a driver controlled iommu_domain and require > IOMMU_CACHE behavior as they offer no way for userspace to synchronize > caches. > > Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Reviewed-by: Kevin Tian <kevin.tian@intel.com> btw the comment about vsnic and vdpa matches my thought. But a recent change in Qemu [1] possibly wants confirmation from Jason Wang. [1] https://lore.kernel.org/all/20220304133556.233983-20-mst@redhat.com/ Thanks Kevin
On Fri, Apr 08, 2022 at 08:21:55AM +0000, Tian, Kevin wrote: > (CC Jason Wang) > > > From: Jason Gunthorpe > > Sent: Thursday, April 7, 2022 11:24 PM > > > > While the comment was correct that this flag was intended to convey the > > block no-snoop support in the IOMMU, it has become widely implemented > > and > > used to mean the IOMMU supports IOMMU_CACHE as a map flag. Only the > > Intel > > driver was different. > > > > Now that the Intel driver is using enforce_cache_coherency() update the > > comment to make it clear that IOMMU_CAP_CACHE_COHERENCY is only > > about > > IOMMU_CACHE. Fix the Intel driver to return true since IOMMU_CACHE > > always > > works. > > > > The two places that test this flag, usnic and vdpa, are both assigning > > userspace pages to a driver controlled iommu_domain and require > > IOMMU_CACHE behavior as they offer no way for userspace to synchronize > > caches. > > > > Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> > > Reviewed-by: Kevin Tian <kevin.tian@intel.com> > > btw the comment about vsnic and vdpa matches my thought. But > a recent change in Qemu [1] possibly wants confirmation from > Jason Wang. > > [1] https://lore.kernel.org/all/20220304133556.233983-20-mst@redhat.com/ That patch seems to have run into the confusion this series is addressing. VFIO_DMA_CC_IOMMU and snoop control is absolutely not needed by VDPA. We expect the VDPA kernel driver to be well behaved and not cause its device to generate no-snoop TLPs. VDPA needs IOMMU_CACHE only. Jason
On 2022/4/7 23:23, Jason Gunthorpe wrote: > While the comment was correct that this flag was intended to convey the > block no-snoop support in the IOMMU, it has become widely implemented and > used to mean the IOMMU supports IOMMU_CACHE as a map flag. Only the Intel > driver was different. > > Now that the Intel driver is using enforce_cache_coherency() update the > comment to make it clear that IOMMU_CAP_CACHE_COHERENCY is only about > IOMMU_CACHE. Fix the Intel driver to return true since IOMMU_CACHE always > works. > > The two places that test this flag, usnic and vdpa, are both assigning > userspace pages to a driver controlled iommu_domain and require > IOMMU_CACHE behavior as they offer no way for userspace to synchronize > caches. > > Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> > --- > drivers/iommu/intel/iommu.c | 2 +- > include/linux/iommu.h | 3 +-- > 2 files changed, 2 insertions(+), 3 deletions(-) > > diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c > index 8f3674e997df06..14ba185175e9ec 100644 > --- a/drivers/iommu/intel/iommu.c > +++ b/drivers/iommu/intel/iommu.c > @@ -4556,7 +4556,7 @@ static bool intel_iommu_enforce_cache_coherency(struct iommu_domain *domain) > static bool intel_iommu_capable(enum iommu_cap cap) > { > if (cap == IOMMU_CAP_CACHE_COHERENCY) > - return domain_update_iommu_snooping(NULL); > + return true; > if (cap == IOMMU_CAP_INTR_REMAP) > return irq_remapping_enabled == 1; > > diff --git a/include/linux/iommu.h b/include/linux/iommu.h > index fe4f24c469c373..fd58f7adc52796 100644 > --- a/include/linux/iommu.h > +++ b/include/linux/iommu.h > @@ -103,8 +103,7 @@ static inline bool iommu_is_dma_domain(struct iommu_domain *domain) > } > > enum iommu_cap { > - IOMMU_CAP_CACHE_COHERENCY, /* IOMMU can enforce cache coherent DMA > - transactions */ > + IOMMU_CAP_CACHE_COHERENCY, /* IOMMU_CACHE is supported */ > IOMMU_CAP_INTR_REMAP, /* IOMMU supports interrupt isolation */ > IOMMU_CAP_NOEXEC, /* IOMMU_NOEXEC flag */ > }; Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com> Best regards, baolu
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index 8f3674e997df06..14ba185175e9ec 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -4556,7 +4556,7 @@ static bool intel_iommu_enforce_cache_coherency(struct iommu_domain *domain) static bool intel_iommu_capable(enum iommu_cap cap) { if (cap == IOMMU_CAP_CACHE_COHERENCY) - return domain_update_iommu_snooping(NULL); + return true; if (cap == IOMMU_CAP_INTR_REMAP) return irq_remapping_enabled == 1; diff --git a/include/linux/iommu.h b/include/linux/iommu.h index fe4f24c469c373..fd58f7adc52796 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -103,8 +103,7 @@ static inline bool iommu_is_dma_domain(struct iommu_domain *domain) } enum iommu_cap { - IOMMU_CAP_CACHE_COHERENCY, /* IOMMU can enforce cache coherent DMA - transactions */ + IOMMU_CAP_CACHE_COHERENCY, /* IOMMU_CACHE is supported */ IOMMU_CAP_INTR_REMAP, /* IOMMU supports interrupt isolation */ IOMMU_CAP_NOEXEC, /* IOMMU_NOEXEC flag */ };
While the comment was correct that this flag was intended to convey the block no-snoop support in the IOMMU, it has become widely implemented and used to mean the IOMMU supports IOMMU_CACHE as a map flag. Only the Intel driver was different. Now that the Intel driver is using enforce_cache_coherency() update the comment to make it clear that IOMMU_CAP_CACHE_COHERENCY is only about IOMMU_CACHE. Fix the Intel driver to return true since IOMMU_CACHE always works. The two places that test this flag, usnic and vdpa, are both assigning userspace pages to a driver controlled iommu_domain and require IOMMU_CACHE behavior as they offer no way for userspace to synchronize caches. Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> --- drivers/iommu/intel/iommu.c | 2 +- include/linux/iommu.h | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-)