On Thu, Apr 09, 2020 at 05:07:34PM +0800, Zhangfei Gao wrote: > > > On 2020/4/8 下午10:04, Jean-Philippe Brucker wrote: > > The mm_exit() op will be removed from the SVA API. When a process dies > > and its mm goes away, the IOMMU driver won't notify device drivers > > anymore. Drivers should expect to handle a lot more aborted DMA. On the > > upside, it does greatly simplify the queue management. > > > > The uacce_mm struct, that tracks all queues bound to an mm, was only > > used by the mm_exit() callback. Remove it. > > > > Signed-off-by: Jean-Philippe Brucker <jean-philippe@xxxxxxxxxx> > Thanks Jean for doing this. > > Tested-by: Zhangfei Gao <zhangfei.gao@xxxxxxxxxx> > > Except one line. > > -static void uacce_mm_put(struct uacce_queue *q) > > +static void uacce_unbind_queue(struct uacce_queue *q) > > { > > - struct uacce_mm *uacce_mm = q->uacce_mm; > > - > > - lockdep_assert_held(&q->uacce->mm_lock); > > - > > - mutex_lock(&uacce_mm->lock); > > - list_del(&q->list); > > - mutex_unlock(&uacce_mm->lock); > > - > > - if (list_empty(&uacce_mm->queues)) { > > - if (uacce_mm->handle) > > - iommu_sva_unbind_device(uacce_mm->handle); > > - list_del(&uacce_mm->list); > > - kfree(uacce_mm); > > - } > > + if (!q->handle) > > + return; > > + iommu_sva_unbind_device(q->handle); > + q->handle = 0; > > Otherwise iommu_sva_unbind_device maybe called twice. > Since uacce_unbind_queue can be called by uacce_remove and uacce_fops_release. Thanks, I'll add it in v2 Jean