RE: [PATCH 11/14] vfio: clean up the check for mediated device in vfio_iommu_type1

[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
> 
> Pass the group flags to ->attach_group and remove the messy check for
> the bus type.
> 
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>
> Reviewed-by: Jason Gunthorpe <jgg@xxxxxxxxxx>

This is a nice cleanup.

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

> ---
>  drivers/vfio/vfio.c                 | 11 +++++------
>  drivers/vfio/vfio.h                 |  7 ++++++-
>  drivers/vfio/vfio_iommu_spapr_tce.c |  2 +-
>  drivers/vfio/vfio_iommu_type1.c     | 19 ++-----------------
>  4 files changed, 14 insertions(+), 25 deletions(-)
> 
> diff --git a/drivers/vfio/vfio.c b/drivers/vfio/vfio.c
> index f73158fce8c446..8b31eca02e0be7 100644
> --- a/drivers/vfio/vfio.c
> +++ b/drivers/vfio/vfio.c
> @@ -68,9 +68,6 @@ struct vfio_unbound_dev {
>  	struct list_head		unbound_next;
>  };
> 
> -#define VFIO_EMULATED_IOMMU	(1 << 0)
> -#define VFIO_NO_IOMMU		(1 << 1)
> -
>  struct vfio_group {
>  	struct kref			kref;
>  	int				minor;
> @@ -198,7 +195,7 @@ static long vfio_noiommu_ioctl(void *iommu_data,
>  }
> 
>  static int vfio_noiommu_attach_group(void *iommu_data,
> -				     struct iommu_group *iommu_group)
> +		struct iommu_group *iommu_group, unsigned int flags)
>  {
>  	return 0;
>  }
> @@ -1105,7 +1102,8 @@ static int __vfio_container_attach_groups(struct
> vfio_container *container,
>  	int ret = -ENODEV;
> 
>  	list_for_each_entry(group, &container->group_list, container_next) {
> -		ret = driver->ops->attach_group(data, group->iommu_group);
> +		ret = driver->ops->attach_group(data, group->iommu_group,
> +						group->flags);
>  		if (ret)
>  			goto unwind;
>  	}
> @@ -1363,7 +1361,8 @@ static int vfio_group_set_container(struct
> vfio_group *group, int container_fd)
>  	driver = container->iommu_driver;
>  	if (driver) {
>  		ret = driver->ops->attach_group(container->iommu_data,
> -						group->iommu_group);
> +						group->iommu_group,
> +						group->flags);
>  		if (ret)
>  			goto unlock_out;
>  	}
> diff --git a/drivers/vfio/vfio.h b/drivers/vfio/vfio.h
> index a78de649eb2f16..1e02433d3992ef 100644
> --- a/drivers/vfio/vfio.h
> +++ b/drivers/vfio/vfio.h
> @@ -9,6 +9,10 @@ enum vfio_iommu_notify_type {
>  	VFIO_IOMMU_CONTAINER_CLOSE = 0,
>  };
> 
> +/* flags for group->flags and ->attach_group */
> +#define VFIO_EMULATED_IOMMU	(1 << 0)
> +#define VFIO_NO_IOMMU		(1 << 1)
> +
>  /**
>   * struct vfio_iommu_driver_ops - VFIO IOMMU driver callbacks
>   */
> @@ -20,7 +24,8 @@ struct vfio_iommu_driver_ops {
>  	long		(*ioctl)(void *iommu_data, unsigned int cmd,
>  				 unsigned long arg);
>  	int		(*attach_group)(void *iommu_data,
> -					struct iommu_group *group);
> +					struct iommu_group *group,
> +					unsigned int flags);
>  	void		(*detach_group)(void *iommu_data,
>  					struct iommu_group *group);
>  	int		(*pin_pages)(void *iommu_data,
> diff --git a/drivers/vfio/vfio_iommu_spapr_tce.c
> b/drivers/vfio/vfio_iommu_spapr_tce.c
> index 3efd09faeca4a8..7567328d347d25 100644
> --- a/drivers/vfio/vfio_iommu_spapr_tce.c
> +++ b/drivers/vfio/vfio_iommu_spapr_tce.c
> @@ -1239,7 +1239,7 @@ static long
> tce_iommu_take_ownership_ddw(struct tce_container *container,
>  }
> 
>  static int tce_iommu_attach_group(void *iommu_data,
> -		struct iommu_group *iommu_group)
> +		struct iommu_group *iommu_group, unsigned int flags)
>  {
>  	int ret = 0;
>  	struct tce_container *container = iommu_data;
> diff --git a/drivers/vfio/vfio_iommu_type1.c
> b/drivers/vfio/vfio_iommu_type1.c
> index 39e2706d0b3f34..ca3c995c84166f 100644
> --- a/drivers/vfio/vfio_iommu_type1.c
> +++ b/drivers/vfio/vfio_iommu_type1.c
> @@ -36,7 +36,6 @@
>  #include <linux/uaccess.h>
>  #include <linux/vfio.h>
>  #include <linux/workqueue.h>
> -#include <linux/mdev.h>
>  #include <linux/notifier.h>
>  #include <linux/dma-iommu.h>
>  #include <linux/irqdomain.h>
> @@ -1934,20 +1933,6 @@ static bool vfio_iommu_has_sw_msi(struct
> list_head *group_resv_regions,
>  	return ret;
>  }
> 
> -static bool vfio_bus_is_mdev(struct bus_type *bus)
> -{
> -	struct bus_type *mdev_bus;
> -	bool ret = false;
> -
> -	mdev_bus = symbol_get(mdev_bus_type);
> -	if (mdev_bus) {
> -		ret = (bus == mdev_bus);
> -		symbol_put(mdev_bus_type);
> -	}
> -
> -	return ret;
> -}
> -
>  /*
>   * This is a helper function to insert an address range to iova list.
>   * The list is initially created with a single entry corresponding to
> @@ -2172,7 +2157,7 @@ static void vfio_iommu_iova_insert_copy(struct
> vfio_iommu *iommu,
>  }
> 
>  static int vfio_iommu_type1_attach_group(void *iommu_data,
> -					 struct iommu_group *iommu_group)
> +		struct iommu_group *iommu_group, unsigned int flags)
>  {
>  	struct vfio_iommu *iommu = iommu_data;
>  	struct vfio_iommu_group *group;
> @@ -2207,7 +2192,7 @@ static int vfio_iommu_type1_attach_group(void
> *iommu_data,
>  	if (ret)
>  		goto out_free;
> 
> -	if (vfio_bus_is_mdev(bus)) {
> +	if (flags & VFIO_EMULATED_IOMMU) {
>  		if (!iommu->external_domain) {
>  			INIT_LIST_HEAD(&domain->group_list);
>  			iommu->external_domain = domain;
> --
> 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