Re: [PATCH 04/13] kvm/vfio: Rename kvm_vfio_group to prepare for accepting vfio device fd

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

 




On 1/17/23 14:49, Yi Liu wrote:
> Meanwhile, rename related helpers. No functional change is intended.
>
> Signed-off-by: Yi Liu <yi.l.liu@xxxxxxxxx>
> ---
>  virt/kvm/vfio.c | 115 ++++++++++++++++++++++++------------------------
>  1 file changed, 58 insertions(+), 57 deletions(-)
>
> diff --git a/virt/kvm/vfio.c b/virt/kvm/vfio.c
> index 868930c7a59b..0f54b9d308d7 100644
> --- a/virt/kvm/vfio.c
> +++ b/virt/kvm/vfio.c
> @@ -21,7 +21,7 @@
>  #include <asm/kvm_ppc.h>
>  #endif
>  
> -struct kvm_vfio_group {
> +struct kvm_vfio_file {
>  	struct list_head node;
>  	struct file *file;
>  #ifdef CONFIG_SPAPR_TCE_IOMMU
> @@ -30,7 +30,7 @@ struct kvm_vfio_group {
>  };
>  
>  struct kvm_vfio {
> -	struct list_head group_list;
> +	struct list_head file_list;
>  	struct mutex lock;
>  	bool noncoherent;
>  };
> @@ -98,34 +98,35 @@ static struct iommu_group *kvm_vfio_file_iommu_group(struct file *file)
>  }
>  
>  static void kvm_spapr_tce_release_vfio_group(struct kvm *kvm,
> -					     struct kvm_vfio_group *kvg)
> +					     struct kvm_vfio_file *kvf)
>  {
> -	if (WARN_ON_ONCE(!kvg->iommu_group))
> +	if (WARN_ON_ONCE(!kvf->iommu_group))
>  		return;
>  
> -	kvm_spapr_tce_release_iommu_group(kvm, kvg->iommu_group);
> -	iommu_group_put(kvg->iommu_group);
> -	kvg->iommu_group = NULL;
> +	kvm_spapr_tce_release_iommu_group(kvm, kvf->iommu_group);
> +	iommu_group_put(kvf->iommu_group);
> +	kvf->iommu_group = NULL;
>  }
>  #endif
>  
>  /*
> - * Groups can use the same or different IOMMU domains.  If the same then
> - * adding a new group may change the coherency of groups we've previously
> - * been told about.  We don't want to care about any of that so we retest
> - * each group and bail as soon as we find one that's noncoherent.  This
> - * means we only ever [un]register_noncoherent_dma once for the whole device.
> + * Groups/devices can use the same or different IOMMU domains.  If the same
> + * then adding a new group/device may change the coherency of groups/devices
> + * we've previously been told about.  We don't want to care about any of
> + * that so we retest each group/device and bail as soon as we find one that's
> + * noncoherent.  This means we only ever [un]register_noncoherent_dma once
> + * for the whole device.
>   */
>  static void kvm_vfio_update_coherency(struct kvm_device *dev)
>  {
>  	struct kvm_vfio *kv = dev->private;
>  	bool noncoherent = false;
> -	struct kvm_vfio_group *kvg;
> +	struct kvm_vfio_file *kvf;
>  
>  	mutex_lock(&kv->lock);
>  
> -	list_for_each_entry(kvg, &kv->group_list, node) {
> -		if (!kvm_vfio_file_enforced_coherent(kvg->file)) {
> +	list_for_each_entry(kvf, &kv->file_list, node) {
> +		if (!kvm_vfio_file_enforced_coherent(kvf->file)) {
>  			noncoherent = true;
>  			break;
>  		}
> @@ -143,10 +144,10 @@ static void kvm_vfio_update_coherency(struct kvm_device *dev)
>  	mutex_unlock(&kv->lock);
>  }
>  
> -static int kvm_vfio_group_add(struct kvm_device *dev, unsigned int fd)
> +static int kvm_vfio_file_add(struct kvm_device *dev, unsigned int fd)
>  {
>  	struct kvm_vfio *kv = dev->private;
> -	struct kvm_vfio_group *kvg;
> +	struct kvm_vfio_file *kvf;
>  	struct file *filp;
>  	int ret;
>  
> @@ -162,27 +163,27 @@ static int kvm_vfio_group_add(struct kvm_device *dev, unsigned int fd)
>  
>  	mutex_lock(&kv->lock);
>  
> -	list_for_each_entry(kvg, &kv->group_list, node) {
> -		if (kvg->file == filp) {
> +	list_for_each_entry(kvf, &kv->file_list, node) {
> +		if (kvf->file == filp) {
>  			ret = -EEXIST;
>  			goto err_unlock;
>  		}
>  	}
>  
> -	kvg = kzalloc(sizeof(*kvg), GFP_KERNEL_ACCOUNT);
> -	if (!kvg) {
> +	kvf = kzalloc(sizeof(*kvf), GFP_KERNEL_ACCOUNT);
> +	if (!kvf) {
>  		ret = -ENOMEM;
>  		goto err_unlock;
>  	}
>  
> -	kvg->file = filp;
> -	list_add_tail(&kvg->node, &kv->group_list);
> +	kvf->file = filp;
> +	list_add_tail(&kvf->node, &kv->file_list);
>  
>  	kvm_arch_start_assignment(dev->kvm);
>  
>  	mutex_unlock(&kv->lock);
>  
> -	kvm_vfio_file_set_kvm(kvg->file, dev->kvm);
> +	kvm_vfio_file_set_kvm(kvf->file, dev->kvm);
>  	kvm_vfio_update_coherency(dev);
>  
>  	return 0;
> @@ -193,10 +194,10 @@ static int kvm_vfio_group_add(struct kvm_device *dev, unsigned int fd)
>  	return ret;
>  }
>  
> -static int kvm_vfio_group_del(struct kvm_device *dev, unsigned int fd)
> +static int kvm_vfio_file_del(struct kvm_device *dev, unsigned int fd)
>  {
>  	struct kvm_vfio *kv = dev->private;
> -	struct kvm_vfio_group *kvg;
> +	struct kvm_vfio_file *kvf;
>  	struct fd f;
>  	int ret;
>  
> @@ -208,18 +209,18 @@ static int kvm_vfio_group_del(struct kvm_device *dev, unsigned int fd)
>  
>  	mutex_lock(&kv->lock);
>  
> -	list_for_each_entry(kvg, &kv->group_list, node) {
> -		if (kvg->file != f.file)
> +	list_for_each_entry(kvf, &kv->file_list, node) {
> +		if (kvf->file != f.file)
>  			continue;
>  
> -		list_del(&kvg->node);
> +		list_del(&kvf->node);
>  		kvm_arch_end_assignment(dev->kvm);
>  #ifdef CONFIG_SPAPR_TCE_IOMMU
> -		kvm_spapr_tce_release_vfio_group(dev->kvm, kvg);
> +		kvm_spapr_tce_release_vfio_group(dev->kvm, kvf);
>  #endif
> -		kvm_vfio_file_set_kvm(kvg->file, NULL);
> -		fput(kvg->file);
> -		kfree(kvg);
> +		kvm_vfio_file_set_kvm(kvf->file, NULL);
> +		fput(kvf->file);
> +		kfree(kvf);
>  		ret = 0;
>  		break;
>  	}
> @@ -234,12 +235,12 @@ static int kvm_vfio_group_del(struct kvm_device *dev, unsigned int fd)
>  }
>  
>  #ifdef CONFIG_SPAPR_TCE_IOMMU
> -static int kvm_vfio_group_set_spapr_tce(struct kvm_device *dev,
> -					void __user *arg)
> +static int kvm_vfio_file_set_spapr_tce(struct kvm_device *dev,
> +				       void __user *arg)
>  {
>  	struct kvm_vfio_spapr_tce param;
>  	struct kvm_vfio *kv = dev->private;
> -	struct kvm_vfio_group *kvg;
> +	struct kvm_vfio_file *kvf;
>  	struct fd f;
>  	int ret;
>  
> @@ -254,20 +255,20 @@ static int kvm_vfio_group_set_spapr_tce(struct kvm_device *dev,
>  
>  	mutex_lock(&kv->lock);
>  
> -	list_for_each_entry(kvg, &kv->group_list, node) {
> -		if (kvg->file != f.file)
> +	list_for_each_entry(kvf, &kv->file_list, node) {
> +		if (kvf->file != f.file)
>  			continue;
>  
> -		if (!kvg->iommu_group) {
> -			kvg->iommu_group = kvm_vfio_file_iommu_group(kvg->file);
> -			if (WARN_ON_ONCE(!kvg->iommu_group)) {
> +		if (!kvf->iommu_group) {
> +			kvf->iommu_group = kvm_vfio_file_iommu_group(kvf->file);
> +			if (WARN_ON_ONCE(!kvf->iommu_group)) {
>  				ret = -EIO;
>  				goto err_fdput;
>  			}
>  		}
>  
>  		ret = kvm_spapr_tce_attach_iommu_group(dev->kvm, param.tablefd,
> -						       kvg->iommu_group);
> +						       kvf->iommu_group);
>  		break;
>  	}
>  
> @@ -278,8 +279,8 @@ static int kvm_vfio_group_set_spapr_tce(struct kvm_device *dev,
>  }
>  #endif
>  
> -static int kvm_vfio_set_group(struct kvm_device *dev, long attr,
> -			      void __user *arg)
> +static int kvm_vfio_set_file(struct kvm_device *dev, long attr,
> +			     void __user *arg)
>  {
>  	int32_t __user *argp = arg;
>  	int32_t fd;
> @@ -288,16 +289,16 @@ static int kvm_vfio_set_group(struct kvm_device *dev, long attr,
>  	case KVM_DEV_VFIO_GROUP_ADD:
>  		if (get_user(fd, argp))
>  			return -EFAULT;
> -		return kvm_vfio_group_add(dev, fd);
> +		return kvm_vfio_file_add(dev, fd);
>  
>  	case KVM_DEV_VFIO_GROUP_DEL:
>  		if (get_user(fd, argp))
>  			return -EFAULT;
> -		return kvm_vfio_group_del(dev, fd);
> +		return kvm_vfio_file_del(dev, fd);
>  
>  #ifdef CONFIG_SPAPR_TCE_IOMMU
>  	case KVM_DEV_VFIO_GROUP_SET_SPAPR_TCE:
> -		return kvm_vfio_group_set_spapr_tce(dev, arg);
> +		return kvm_vfio_file_set_spapr_tce(dev, arg);
>  #endif
>  	}
>  
> @@ -309,8 +310,8 @@ static int kvm_vfio_set_attr(struct kvm_device *dev,
>  {
>  	switch (attr->group) {
>  	case KVM_DEV_VFIO_GROUP:
> -		return kvm_vfio_set_group(dev, attr->attr,
> -					  u64_to_user_ptr(attr->addr));
> +		return kvm_vfio_set_file(dev, attr->attr,
> +					 u64_to_user_ptr(attr->addr));
>  	}
>  
>  	return -ENXIO;
> @@ -339,16 +340,16 @@ static int kvm_vfio_has_attr(struct kvm_device *dev,
>  static void kvm_vfio_destroy(struct kvm_device *dev)
>  {
>  	struct kvm_vfio *kv = dev->private;
> -	struct kvm_vfio_group *kvg, *tmp;
> +	struct kvm_vfio_file *kvf, *tmp;
>  
> -	list_for_each_entry_safe(kvg, tmp, &kv->group_list, node) {
> +	list_for_each_entry_safe(kvf, tmp, &kv->file_list, node) {
>  #ifdef CONFIG_SPAPR_TCE_IOMMU
> -		kvm_spapr_tce_release_vfio_group(dev->kvm, kvg);
> +		kvm_spapr_tce_release_vfio_group(dev->kvm, kvf);
>  #endif
> -		kvm_vfio_file_set_kvm(kvg->file, NULL);
> -		fput(kvg->file);
> -		list_del(&kvg->node);
> -		kfree(kvg);
> +		kvm_vfio_file_set_kvm(kvf->file, NULL);
> +		fput(kvf->file);
> +		list_del(&kvf->node);
> +		kfree(kvf);
>  		kvm_arch_end_assignment(dev->kvm);
>  	}
>  
> @@ -382,7 +383,7 @@ static int kvm_vfio_create(struct kvm_device *dev, u32 type)
>  	if (!kv)
>  		return -ENOMEM;
>  
> -	INIT_LIST_HEAD(&kv->group_list);
> +	INIT_LIST_HEAD(&kv->file_list);
>  	mutex_init(&kv->lock);
>  
>  	dev->private = kv;
Reviewed-by: Eric Auger <eric.auger@xxxxxxxxxx>

Eric




[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