@@ -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;
@@ -63,6 +63,7 @@ struct vfio_device {
bool iommufd_attached;
#endif
bool cdev_opened;
+ bool noiommu;
};
/**