On Thu, May 26, 2022 at 02:21:32PM -0300, Jason Gunthorpe wrote: > On Thu, May 26, 2022 at 07:29:20PM +0300, Leon Romanovsky wrote: > > > > > + err = mlx5r_umr_post_send(umrc->qp, mkey, &umr_context.cqe, wqe, > > > > + with_data); > > > > + mutex_unlock(&umrc->lock); > > > > + if (err) { > > > > + mlx5_ib_warn(dev, "UMR post send failed, err %d\n", > > > > + err); > > > > + break; > > > > } > > > > + > > > > + wait_for_completion(&umr_context.done); > > > > > > Nor is sleeping under a semaphore. > > > > Not according to the kernel/locking/semaphore.c. Semaphores can sleep > > and the code protected by semaphores can sleep too. > > > > 53 void down(struct semaphore *sem) > > 54 { > > 55 unsigned long flags; > > 56 > > 57 might_sleep(); > > .... > > 64 } > > 65 EXPORT_SYMBOL(down); > > Hum, OK, I am confused > > > > And, I'm pretty sure, this entire function is called under a spinlock > > > in some cases. > > > > Can you point to such flow? > > It seems like not anymore, or at least I couldn't find a case. So are we fine with this patch and it can go as is after merge window? Thanks > > Jason