> From: Alexey Kardashevskiy <aik@xxxxxxxxx> > Sent: Friday, July 1, 2022 12:58 PM > > On 4/8/22 01:23, Jason Gunthorpe via iommu wrote: > > 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. > > > This just broke VFIO on POWER which does not use iommu_ops. In this case below check is more reasonable to be put in type1 attach_group(). Do a iommu_group_for_each_dev() to verify CACHE_COHERENCY similar to what Robin did for INTR_REMAP. (sorry no access to my build machine now but I suppose Jason can soon work out a fix once he sees this. 😊) > > > > > > 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; > > + > > return __vfio_register_dev(device, > > vfio_group_find_or_alloc(device->dev)); > > } > > -- > Alexey