VFIO fix for v5.19-rc7

- Move IOMMU test to unbreak no-iommu support (Jason Gunthorpe)
 -----BEGIN PGP SIGNATURE-----
 
 iQJPBAABCAA5FiEEQvbATlQL0amee4qQI5ubbjuwiyIFAmLMIWIbHGFsZXgud2ls
 bGlhbXNvbkByZWRoYXQuY29tAAoJECObm247sIsigG8P/2Kk4D+atyoEGWWzuH1P
 Is6LyGLLS7zbGOySWNm+ibJDiIDwlDyrZJhHx8SSpf2h55XO4PSxWQrPXzM4B0l0
 qejk4PynKskAGUakXI2hPvxLnbSzadrPaKAdg6RIPjK1hKBqUlQEy12mhVL7QKxg
 Re6+kGRKiCEQWKZfPOURgHyjYIvUSrRF3REi0hDGW7BSxg/EbEYuj36kNU9H4Zg0
 vUwp/mf8rRYWmbBb4IRTr5vV+pDA8unnPvKeLUw/uMVbGSglTIo1vQs4kTgzPECH
 uVJRO8z2GhY3epRdste/fNuQSqOmXPo6vOTd/SrVgafcI1HxGQl57wCfe8EqwXVU
 GG/xoCkcocPBMtcM7U31clt9lfbDeWQw2n9dWnr+cD6mLOI9lXLt9NM/P+A5pY9n
 hExqoDBZoE+JQfZFngNckMuhqAQIh6XokDQaeSOygwLpKFR369j9uBrn5cnf5TML
 8w9Ayl5jYPYPGbNRLtSyc+SxCK5Uox0GvCfS3mvuczjgianXZwmK+SNHHhMuHy92
 sjDpcyQHjoIVlLaZkWG6z0oADkzXhYRH+rjudLbS5gIDgeEs848QXtvhSwySB+8u
 k+JywWXD1MTyIucfPXm88w1lfMxBgi1WXOAZF+hXyzJcmTNzBK9U8ayE+vGBanTL
 ki4gkMYW/f1/1GeE0C6iQUp1
 =Y1K4
 -----END PGP SIGNATURE-----

Merge tag 'vfio-v5.19-rc7' of https://github.com/awilliam/linux-vfio

Pull VFIO fix from Alex Williamson:

 - Move IOMMU test to unbreak no-iommu support (Jason Gunthorpe)

* tag 'vfio-v5.19-rc7' of https://github.com/awilliam/linux-vfio:
  vfio: Move IOMMU_CAP_CACHE_COHERENCY test to after we know we have a group
This commit is contained in:
Linus Torvalds 2022-07-11 10:02:03 -07:00
commit 816e51dfb5

View file

@ -549,6 +549,16 @@ static struct vfio_group *vfio_group_find_or_alloc(struct device *dev)
if (!iommu_group)
return ERR_PTR(-EINVAL);
/*
* VFIO always sets IOMMU_CACHE because we offer no way for userspace to
* restore cache coherency. It has to be checked here because it is only
* valid for cases where we are using iommu groups.
*/
if (!iommu_capable(dev->bus, IOMMU_CAP_CACHE_COHERENCY)) {
iommu_group_put(iommu_group);
return ERR_PTR(-EINVAL);
}
group = vfio_group_get_from_iommu(iommu_group);
if (!group)
group = vfio_create_group(iommu_group, VFIO_IOMMU);
@ -601,13 +611,6 @@ 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));
}