RE: [PATCH 02/14] vfio: factor out a vfio_iommu_driver_allowed helper

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> From: Christoph Hellwig <hch@xxxxxx>
> Sent: Thursday, August 26, 2021 12:19 AM
> 
> Factor out a little helper to make the checks for the noiommu driver less
> ugly.
> 
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>
> Reviewed-by: Jason Gunthorpe <jgg@xxxxxxxxxx>

Reviewed-by: Kevin Tian <kevin.tian@xxxxxxxxx>

> ---
>  drivers/vfio/vfio.c | 33 +++++++++++++++++++--------------
>  1 file changed, 19 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/vfio/vfio.c b/drivers/vfio/vfio.c
> index 5bd520f0dc6107..6705349ed93378 100644
> --- a/drivers/vfio/vfio.c
> +++ b/drivers/vfio/vfio.c
> @@ -267,8 +267,23 @@ static const struct vfio_iommu_driver_ops
> vfio_noiommu_ops = {
>  	.attach_group = vfio_noiommu_attach_group,
>  	.detach_group = vfio_noiommu_detach_group,
>  };
> -#endif
> 
> +/*
> + * Only noiommu containers can use vfio-noiommu and noiommu
> containers can only
> + * use vfio-noiommu.
> + */
> +static inline bool vfio_iommu_driver_allowed(struct vfio_container
> *container,
> +		const struct vfio_iommu_driver *driver)
> +{
> +	return container->noiommu == (driver->ops == &vfio_noiommu_ops);
> +}
> +#else
> +static inline bool vfio_iommu_driver_allowed(struct vfio_container
> *container,
> +		const struct vfio_iommu_driver *driver)
> +{
> +	return true;
> +}
> +#endif /* CONFIG_VFIO_NOIOMMU */
> 
>  /**
>   * IOMMU driver registration
> @@ -1031,13 +1046,10 @@ static long vfio_ioctl_check_extension(struct
> vfio_container *container,
>  			list_for_each_entry(driver, &vfio.iommu_drivers_list,
>  					    vfio_next) {
> 
> -#ifdef CONFIG_VFIO_NOIOMMU
>  				if (!list_empty(&container->group_list) &&
> -				    (container->noiommu !=
> -				     (driver->ops == &vfio_noiommu_ops)))
> +				    !vfio_iommu_driver_allowed(container,
> +							       driver))
>  					continue;
> -#endif
> -
>  				if (!try_module_get(driver->ops->owner))
>  					continue;
> 
> @@ -1109,15 +1121,8 @@ static long vfio_ioctl_set_iommu(struct
> vfio_container *container,
>  	list_for_each_entry(driver, &vfio.iommu_drivers_list, vfio_next) {
>  		void *data;
> 
> -#ifdef CONFIG_VFIO_NOIOMMU
> -		/*
> -		 * Only noiommu containers can use vfio-noiommu and
> noiommu
> -		 * containers can only use vfio-noiommu.
> -		 */
> -		if (container->noiommu != (driver->ops ==
> &vfio_noiommu_ops))
> +		if (!vfio_iommu_driver_allowed(container, driver))
>  			continue;
> -#endif
> -
>  		if (!try_module_get(driver->ops->owner))
>  			continue;
> 
> --
> 2.30.2





[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux