On Fri, Mar 12, 2021 at 08:36:39AM +0200, Leon Romanovsky wrote: > On Thu, Mar 11, 2021 at 08:07:39PM -0400, Jason Gunthorpe wrote: > > On Thu, Mar 04, 2021 at 02:45:16PM +0200, Leon Romanovsky wrote: > > > -static int > > > -mlx5_ib_create_pf_eq(struct mlx5_ib_dev *dev, struct mlx5_ib_pf_eq *eq) > > > +int mlx5r_odp_create_eq(struct mlx5_ib_dev *dev, struct mlx5_ib_pf_eq *eq) > > > { > > > struct mlx5_eq_param param = {}; > > > - int err; > > > + int err = 0; > > > > > > + if (eq->core) > > > + return 0; > > > + > > > + mutex_lock(&dev->odp_eq_mutex); > > > > The above if is locked wrong. > > It is not wrong, but this is optimization for the case that will be > always. It is wrong because there is no release/acquire on eq->core Jason