On Mon, Feb 11, 2019 at 08:21:18PM +0200, Leon Romanovsky wrote: > From: Leon Romanovsky <leonro@xxxxxxxxxxxx> > > Follow PD conversion patch, do the same for ucontext allocations. > > /** > * i40iw_dealloc_ucontext - deallocate the user context data structure > * @context: user context created during alloc > */ > -static int i40iw_dealloc_ucontext(struct ib_ucontext *context) > +static void i40iw_dealloc_ucontext(struct ib_ucontext *context) > { > struct i40iw_ucontext *ucontext = to_ucontext(context); > - unsigned long flags; > - > - spin_lock_irqsave(&ucontext->cq_reg_mem_list_lock, flags); > - if (!list_empty(&ucontext->cq_reg_mem_list)) { > - spin_unlock_irqrestore(&ucontext->cq_reg_mem_list_lock, flags); > - return -EBUSY; > - } > - spin_unlock_irqrestore(&ucontext->cq_reg_mem_list_lock, flags); > - spin_lock_irqsave(&ucontext->qp_reg_mem_list_lock, flags); > - if (!list_empty(&ucontext->qp_reg_mem_list)) { > - spin_unlock_irqrestore(&ucontext->qp_reg_mem_list_lock, flags); > - return -EBUSY; > - } > - spin_unlock_irqrestore(&ucontext->qp_reg_mem_list_lock, flags); > > - kfree(ucontext); > - return 0; > + /* > + * dealloc is supposed to be called after all MRs QPs > + * were already freed, No need to grab XXX_reg_mem_list_lock > + * locks, in order to check lists, because it is too late now > + * and the warning below symbol of bug in the driver. > + */ > + WARN_ON_ONCE(!list_empty(&ucontext->cq_reg_mem_list)); > + WARN_ON_ONCE(!list_empty(&ucontext->qp_reg_mem_list)); > } Lets remove the comment and WARN_ON. I believe this list empty check was added during early dev. and should go away. > /** > @@ -2742,6 +2728,7 @@ static const struct ib_device_ops i40iw_dev_ops = { > .reg_user_mr = i40iw_reg_user_mr, > .req_notify_cq = i40iw_req_notify_cq, > INIT_RDMA_OBJ_SIZE(ib_pd, i40iw_pd, ibpd), > + INIT_RDMA_OBJ_SIZE(ib_ucontext, i40iw_ucontext, ibucontext), > }; > > /** Are you planning to convert other objects too? Shiraz