> 在 2018年5月4日,21:39,Leon Romanovsky <leon@xxxxxxxxxx> 写道: > >> On Fri, May 04, 2018 at 04:32:38PM +0800, 858585 jemmy wrote: >>> On Fri, May 4, 2018 at 6:01 AM, Jason Gunthorpe <jgg@xxxxxxxx> wrote: >>>> On Thu, May 03, 2018 at 09:43:01PM +0300, Leon Romanovsky wrote: >>>>> On Thu, May 03, 2018 at 12:26:56PM -0600, Jason Gunthorpe wrote: >>>>>> On Thu, May 03, 2018 at 09:12:35PM +0300, Leon Romanovsky wrote: >>>>>>> On Thu, May 03, 2018 at 09:33:10AM -0600, Jason Gunthorpe wrote: >>>>>>>> On Thu, May 03, 2018 at 10:04:34PM +0800, Lidong Chen wrote: >>>>>>>> The userspace may invoke ibv_reg_mr and ibv_dereg_mr by different threads. >>>>>>>> If when ibv_dereg_mr invoke and the thread which invoked ibv_reg_mr has >>>>>>>> exited, get_pid_task will return NULL, ib_umem_release does not decrease >>>>>>>> mm->pinned_vm. This patch fixes it by use tgid. >>>>>>>> >>>>>>>> Signed-off-by: Lidong Chen <lidongchen@xxxxxxxxxxx> >>>>>>>> drivers/infiniband/core/umem.c | 12 ++++++------ >>>>>>>> include/rdma/ib_umem.h | 2 +- >>>>>>>> 2 files changed, 7 insertions(+), 7 deletions(-) >>>>>>> >>>>>>> Why are we even using a struct pid for this? Does anyone know? >>>>>>> >>>>>> >>>>>> Can it be related to "fork" support? >>>>> >>>>> Not sure.. >>>>> >>>>> Ideally we want to hold the struct mm, but we can't hold it long >>>>> term, so pid is a surrogate for that. >>>>> >>>>>>> I'm surprised that struct task isn't held in the struct ib_umem.. >>>>>>> >>>>>> >>>>>> I think that this code can be removed and all accesses to mm_struct can >>>>>> be done with "current->mm". >>>>> >>>>> That sounds wrong for fork support, as the mm used in destroy MUST >>>>> exactly match the mm used in create.. >>>>> >>>>> How does this accounting work in fork anyhow? >>>> >>>> We are not supporting fork, so this is why I proposed to remove it. >>> >>> Er, the new kabi certainly can call reg and dereg across a fork >> >> what is the expect behavior after fork? >> I write a test code, the dereg just return EACCES in the child >> process. and have no effect. > > Did you do reg/dereg over write() interface? If yes, this is expected > behaviour of "not-supported fork()". A couple of months/years ago, your > test program would work, but we closed this option due to security > constraints. the parent process call ibv_reg_mr, and the child process call ibv_dereg_mr. If fork is not supported now, so use tgid to get mm structure is fine for multithread. > > Thanks > >> >>> >>> Jason ?韬{.n?????%??檩??w?{.n???{炳?k???塄}?财??j:+v??????2??璀??摺?囤??z夸z罐?+?????w棹f