@@ -192,7 +192,7 @@ static int vfio_device_group_open(struct vfio_device_file *df)
vfio_device_group_get_kvm_safe(device);
df->iommufd = device->group->iommufd;
- if (df->iommufd && vfio_device_is_noiommu(device)) {
+ if (df->iommufd && device->noiommu) {
if (device->open_count == 0) {
ret = vfio_iommufd_enable_noiommu_compat(device,
df->iommufd);
@@ -108,10 +108,10 @@ bool vfio_device_has_container(struct vfio_device *device);
int __init vfio_group_init(void);
void vfio_group_cleanup(void);
-static inline bool vfio_device_is_noiommu(struct vfio_device *vdev)
+static inline void vfio_device_set_noiommu(struct vfio_device *device)
{
- return IS_ENABLED(CONFIG_VFIO_NOIOMMU) &&
- vdev->group->type == VFIO_NO_IOMMU;
+ device->noiommu = IS_ENABLED(CONFIG_VFIO_NOIOMMU) &&
+ device->group->type == VFIO_NO_IOMMU;
}
#if IS_ENABLED(CONFIG_VFIO_CONTAINER)
@@ -277,6 +277,8 @@ static int __vfio_register_dev(struct vfio_device *device,
if (ret)
return ret;
+ vfio_device_set_noiommu(device);
+
ret = device_add(&device->device);
if (ret)
goto err_out;
@@ -62,6 +62,7 @@ struct vfio_device {
struct iommufd_device *iommufd_device;
bool iommufd_attached;
#endif
+ bool noiommu;
};
/**
This adds a noiommu flag in vfio_device, hence caller of the vfio_device_is_noiommu() just refers to the flag for noiommu check. Signed-off-by: Yi Liu <yi.l.liu@intel.com> --- drivers/vfio/group.c | 2 +- drivers/vfio/vfio.h | 6 +++--- drivers/vfio/vfio_main.c | 2 ++ include/linux/vfio.h | 1 + 4 files changed, 7 insertions(+), 4 deletions(-)