On Thu, 2020-02-27 at 14:33 +0200, Leon Romanovsky wrote: > From: Michael Guralnik <michaelgur@xxxxxxxxxxxx> > > As mlx5_ib is the only user of the mlx5_core_create_mkey_cb, move the > logic inside mlx5_ib and cleanup the code in mlx5_core. > I have a WIP series that is moving the whole mr.c to mlx5_ib. https://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux.git/log/?h=topic/mr-relocate > Signed-off-by: Michael Guralnik <michaelgur@xxxxxxxxxxxx> > Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx> > --- > drivers/infiniband/hw/mlx5/mr.c | 25 ++++++++++++++++ > ---- > drivers/net/ethernet/mellanox/mlx5/core/mr.c | 22 +++-------------- > include/linux/mlx5/driver.h | 6 ----- > 3 files changed, 24 insertions(+), 29 deletions(-) > > diff --git a/drivers/infiniband/hw/mlx5/mr.c > b/drivers/infiniband/hw/mlx5/mr.c > index 6fa0a83c19de..dea14477a676 100644 > --- a/drivers/infiniband/hw/mlx5/mr.c > +++ b/drivers/infiniband/hw/mlx5/mr.c > @@ -79,6 +79,25 @@ static bool use_umr_mtt_update(struct mlx5_ib_mr > *mr, u64 start, u64 length) > length + (start & (MLX5_ADAPTER_PAGE_SIZE - 1)); > } > > +static int create_mkey_cb(struct mlx5_core_dev *dev, struct > mlx5_ib_mr *mr, > + struct mlx5_async_ctx *async_ctx, u32 *in, > int inlen, > + mlx5_async_cbk_t callback) > +{ > + void *mkc; > + u8 key; > + > + spin_lock_irq(&dev->priv.mkey_lock); > + key = dev->priv.mkey_key++; you know i don't like mlx5_ib sniffing around mlx5_core->priv .. this is handled correctly in my series, i can rebase it and make it ready in a couple of days.. let me know if this will be good enough for you. > + spin_unlock_irq(&dev->priv.mkey_lock); > + mkc = MLX5_ADDR_OF(create_mkey_in, in, memory_key_mkey_entry); > + > + MLX5_SET(create_mkey_in, in, opcode, MLX5_CMD_OP_CREATE_MKEY); > + MLX5_SET(mkc, mkc, mkey_7_0, key); > + > + return mlx5_cmd_exec_cb(async_ctx, in, inlen, mr->out, > sizeof(mr->out), > + callback, &mr->cb_work); > +} > + > static void reg_mr_callback(int status, struct mlx5_async_work > *context) > { > struct mlx5_ib_mr *mr = > @@ -163,10 +182,8 @@ static int add_keys(struct mlx5_ib_dev *dev, int > c, int num) > spin_lock_irq(&ent->lock); > ent->pending++; > spin_unlock_irq(&ent->lock); > - err = mlx5_core_create_mkey_cb(dev->mdev, &mr->mmkey, > - &dev->async_ctx, in, > inlen, > - mr->out, sizeof(mr- > >out), > - reg_mr_callback, &mr- > >cb_work); > + err = create_mkey_cb(dev->mdev, mr, &dev->async_ctx, > in, inlen, > + reg_mr_callback); > if (err) { > spin_lock_irq(&ent->lock); > ent->pending--; > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/mr.c > b/drivers/net/ethernet/mellanox/mlx5/core/mr.c > index 42cc3c7ac5b6..83841e4119d7 100644 > --- a/drivers/net/ethernet/mellanox/mlx5/core/mr.c > +++ b/drivers/net/ethernet/mellanox/mlx5/core/mr.c > @@ -36,12 +36,9 @@ > #include <linux/mlx5/cmd.h> > #include "mlx5_core.h" > > -int mlx5_core_create_mkey_cb(struct mlx5_core_dev *dev, > - struct mlx5_core_mkey *mkey, > - struct mlx5_async_ctx *async_ctx, u32 *in, > - int inlen, u32 *out, int outlen, > - mlx5_async_cbk_t callback, > - struct mlx5_async_work *context) > +int mlx5_core_create_mkey(struct mlx5_core_dev *dev, > + struct mlx5_core_mkey *mkey, > + u32 *in, int inlen) > { > u32 lout[MLX5_ST_SZ_DW(create_mkey_out)] = {0}; > u32 mkey_index; > @@ -57,10 +54,6 @@ int mlx5_core_create_mkey_cb(struct mlx5_core_dev > *dev, > MLX5_SET(create_mkey_in, in, opcode, MLX5_CMD_OP_CREATE_MKEY); > MLX5_SET(mkc, mkc, mkey_7_0, key); > > - if (callback) > - return mlx5_cmd_exec_cb(async_ctx, in, inlen, out, > outlen, > - callback, context); > - > err = mlx5_cmd_exec(dev, in, inlen, lout, sizeof(lout)); > if (err) > return err; > @@ -75,15 +68,6 @@ int mlx5_core_create_mkey_cb(struct mlx5_core_dev > *dev, > mkey_index, key, mkey->key); > return 0; > } > -EXPORT_SYMBOL(mlx5_core_create_mkey_cb); > - > -int mlx5_core_create_mkey(struct mlx5_core_dev *dev, > - struct mlx5_core_mkey *mkey, > - u32 *in, int inlen) > -{ > - return mlx5_core_create_mkey_cb(dev, mkey, NULL, in, inlen, > - NULL, 0, NULL, NULL); > -} > EXPORT_SYMBOL(mlx5_core_create_mkey); > > int mlx5_core_destroy_mkey(struct mlx5_core_dev *dev, > diff --git a/include/linux/mlx5/driver.h > b/include/linux/mlx5/driver.h > index f2b4225ed650..7225e9ca0f25 100644 > --- a/include/linux/mlx5/driver.h > +++ b/include/linux/mlx5/driver.h > @@ -947,12 +947,6 @@ struct mlx5_cmd_mailbox > *mlx5_alloc_cmd_mailbox_chain(struct mlx5_core_dev *dev, > gfp_t flags, int > npages); > void mlx5_free_cmd_mailbox_chain(struct mlx5_core_dev *dev, > struct mlx5_cmd_mailbox *head); > -int mlx5_core_create_mkey_cb(struct mlx5_core_dev *dev, > - struct mlx5_core_mkey *mkey, > - struct mlx5_async_ctx *async_ctx, u32 *in, > - int inlen, u32 *out, int outlen, > - mlx5_async_cbk_t callback, > - struct mlx5_async_work *context); > int mlx5_core_create_mkey(struct mlx5_core_dev *dev, > struct mlx5_core_mkey *mkey, > u32 *in, int inlen);