Message ID | 20230117134942.101112-5-yi.l.liu@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add vfio_device cdev for iommufd support | expand |
> From: Liu, Yi L <yi.l.liu@intel.com> > Sent: Tuesday, January 17, 2023 9:50 PM > > Meanwhile, rename related helpers. No functional change is intended. > > Signed-off-by: Yi Liu <yi.l.liu@intel.com> Reviewed-by: Kevin Tian <kevin.tian@intel.com>
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@intel.com> > --- > 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@redhat.com> Eric
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;
Meanwhile, rename related helpers. No functional change is intended. Signed-off-by: Yi Liu <yi.l.liu@intel.com> --- virt/kvm/vfio.c | 115 ++++++++++++++++++++++++------------------------ 1 file changed, 58 insertions(+), 57 deletions(-)