On Fri, Apr 08, 2022 at 08:26:10AM +0000, Tian, Kevin wrote: > > From: Jason Gunthorpe <jgg@xxxxxxxxxx> > > Sent: Thursday, April 7, 2022 11:24 PM > > > > IOMMU_CACHE means that normal DMAs do not require any additional > > coherency > > mechanism and is the basic uAPI that VFIO exposes to userspace. For > > instance VFIO applications like DPDK will not work if additional coherency > > operations are required. > > > > Therefore check IOMMU_CAP_CACHE_COHERENCY like vdpa & usnic do > > before > > allowing an IOMMU backed VFIO device to be created. > > > > Signed-off-by: Jason Gunthorpe <jgg@xxxxxxxxxx> > > drivers/vfio/vfio.c | 7 +++++++ > > 1 file changed, 7 insertions(+) > > > > diff --git a/drivers/vfio/vfio.c b/drivers/vfio/vfio.c > > index a4555014bd1e72..9edad767cfdad3 100644 > > +++ b/drivers/vfio/vfio.c > > @@ -815,6 +815,13 @@ static int __vfio_register_dev(struct vfio_device > > *device, > > > > int vfio_register_group_dev(struct vfio_device *device) > > { > > + /* > > + * VFIO always sets IOMMU_CACHE because we offer no way for > > userspace to > > + * restore cache coherency. > > + */ > > + if (!iommu_capable(device->dev->bus, > > IOMMU_CAP_CACHE_COHERENCY)) > > + return -EINVAL; > > + > > One nit. Is it logistically more reasonable to put this patch before > changing VFIO to always set IOMMU_CACHE? For bisectability it has to be after iommu: Redefine IOMMU_CAP_CACHE_COHERENCY as the cap flag for IOMMU_CACHE Otherwise Intel iommu will stop working with VFIO The ordering is OK as is because no IOMMU that works with VFIO cares about IOMMU_CACHE. Jason