> 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 > --- a/drivers/vfio/vfio.c > +++ 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? otherwise, Reviewed-by: Kevin Tian <kevin.tian@xxxxxxxxx>