On Mon, Sep 09, 2024 at 04:41:00PM +0800, Junxian Huang wrote: > > > On 2024/9/7 20:12, Jason Gunthorpe wrote: > > On Thu, Sep 05, 2024 at 09:11:54PM +0800, Junxian Huang wrote: > > > >> @@ -698,11 +700,20 @@ static int ib_uverbs_mmap(struct file *filp, struct vm_area_struct *vma) > >> ucontext = ib_uverbs_get_ucontext_file(file); > >> if (IS_ERR(ucontext)) { > >> ret = PTR_ERR(ucontext); > >> - goto out; > >> + goto out_srcu; > >> } > >> + > >> + mutex_lock(&file->disassociation_lock); > >> + if (file->disassociated) { > >> + ret = -EPERM; > >> + goto out_mutex; > >> + } > > > > What sets disassociated back to false once the driver reset is > > completed? > > > > I think you should probably drop this and instead add a lock and test > > inside the driver within its mmap op. While reset is ongoing fail all > > new mmaps. > > > > disassociated won't be set back to false. This is to stop new mmaps on > this ucontext even after reset is completed, because during hns reset, > all resources will be destroyed, and the ucontexts will become unavailable. ucontext is SW object and not HW object, why will it become unavailable? Thanks