On Thu, Sep 24, 2020 at 11:21:07AM +0800, Jason Wang wrote: > To ease the implementation of per group ASID support for vDPA > device. This patch switches to use a vhost-vdpa specific IOTLB to > avoid the unnecessary refactoring of the vhost core. > > Signed-off-by: Jason Wang <jasowang@xxxxxxxxxx> > --- > drivers/vhost/vdpa.c | 14 ++++++++------ > 1 file changed, 8 insertions(+), 6 deletions(-) > > diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c > index 74bef1c15a70..ec3c94f706c1 100644 > --- a/drivers/vhost/vdpa.c > +++ b/drivers/vhost/vdpa.c > @@ -40,6 +40,7 @@ struct vhost_vdpa { > struct vhost_virtqueue *vqs; > struct completion completion; > struct vdpa_device *vdpa; > + struct vhost_iotlb *iotlb; > struct device dev; > struct cdev cdev; > atomic_t opened; > @@ -514,12 +515,11 @@ static void vhost_vdpa_iotlb_unmap(struct vhost_vdpa *v, > > static void vhost_vdpa_iotlb_free(struct vhost_vdpa *v) > { > - struct vhost_dev *dev = &v->vdev; > - struct vhost_iotlb *iotlb = dev->iotlb; > + struct vhost_iotlb *iotlb = v->iotlb; > > vhost_vdpa_iotlb_unmap(v, iotlb, 0ULL, 0ULL - 1); > - kfree(dev->iotlb); > - dev->iotlb = NULL; > + kfree(v->iotlb); > + v->iotlb = NULL; > } > > static int perm_to_iommu_flags(u32 perm) > @@ -681,7 +681,7 @@ static int vhost_vdpa_process_iotlb_msg(struct vhost_dev *dev, > struct vhost_vdpa *v = container_of(dev, struct vhost_vdpa, vdev); > struct vdpa_device *vdpa = v->vdpa; > const struct vdpa_config_ops *ops = vdpa->config; > - struct vhost_iotlb *iotlb = dev->iotlb; > + struct vhost_iotlb *iotlb = v->iotlb; > int r = 0; > > r = vhost_dev_check_owner(dev); > @@ -812,12 +812,14 @@ static int vhost_vdpa_open(struct inode *inode, struct file *filep) > > r = vhost_vdpa_alloc_domain(v); > if (r) > - goto err_init_iotlb; > + goto err_alloc_domain; You're still using this: dev->iotlb = vhost_iotlb_alloc(0, 0); Shouldn't you use v->iotlb = host_iotlb_alloc(0, 0); to set the vdpa device iotlb field? > > filep->private_data = v; > > return 0; > > +err_alloc_domain: > + vhost_vdpa_iotlb_free(v); > err_init_iotlb: > vhost_vdpa_cleanup(v); > err: > -- > 2.20.1 >