Skip to content

Commit 81fb5e2

Browse files
Sagi Grimbergdledford
authored andcommitted
IB/mlx5: Remove pa_lkey usages
Since mlx5 driver cannot rely on registration using the reserved lkey (global_dma_lkey) it used to allocate a private physical address lkey for each allocated pd. Commit 96249d7 ("IB/core: Guarantee that a local_dma_lkey is available") just does it in the core layer so we can go ahead and use that. Signed-off-by: Sagi Grimberg <[email protected]> Signed-off-by: Doug Ledford <[email protected]>
1 parent c6790aa commit 81fb5e2

File tree

3 files changed

+1
-62
lines changed

3 files changed

+1
-62
lines changed

drivers/infiniband/hw/mlx5/main.c

Lines changed: 0 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -794,53 +794,6 @@ static int mlx5_ib_mmap(struct ib_ucontext *ibcontext, struct vm_area_struct *vm
794794
return 0;
795795
}
796796

797-
static int alloc_pa_mkey(struct mlx5_ib_dev *dev, u32 *key, u32 pdn)
798-
{
799-
struct mlx5_create_mkey_mbox_in *in;
800-
struct mlx5_mkey_seg *seg;
801-
struct mlx5_core_mr mr;
802-
int err;
803-
804-
in = kzalloc(sizeof(*in), GFP_KERNEL);
805-
if (!in)
806-
return -ENOMEM;
807-
808-
seg = &in->seg;
809-
seg->flags = MLX5_PERM_LOCAL_READ | MLX5_ACCESS_MODE_PA;
810-
seg->flags_pd = cpu_to_be32(pdn | MLX5_MKEY_LEN64);
811-
seg->qpn_mkey7_0 = cpu_to_be32(0xffffff << 8);
812-
seg->start_addr = 0;
813-
814-
err = mlx5_core_create_mkey(dev->mdev, &mr, in, sizeof(*in),
815-
NULL, NULL, NULL);
816-
if (err) {
817-
mlx5_ib_warn(dev, "failed to create mkey, %d\n", err);
818-
goto err_in;
819-
}
820-
821-
kfree(in);
822-
*key = mr.key;
823-
824-
return 0;
825-
826-
err_in:
827-
kfree(in);
828-
829-
return err;
830-
}
831-
832-
static void free_pa_mkey(struct mlx5_ib_dev *dev, u32 key)
833-
{
834-
struct mlx5_core_mr mr;
835-
int err;
836-
837-
memset(&mr, 0, sizeof(mr));
838-
mr.key = key;
839-
err = mlx5_core_destroy_mkey(dev->mdev, &mr);
840-
if (err)
841-
mlx5_ib_warn(dev, "failed to destroy mkey 0x%x\n", key);
842-
}
843-
844797
static struct ib_pd *mlx5_ib_alloc_pd(struct ib_device *ibdev,
845798
struct ib_ucontext *context,
846799
struct ib_udata *udata)
@@ -866,13 +819,6 @@ static struct ib_pd *mlx5_ib_alloc_pd(struct ib_device *ibdev,
866819
kfree(pd);
867820
return ERR_PTR(-EFAULT);
868821
}
869-
} else {
870-
err = alloc_pa_mkey(to_mdev(ibdev), &pd->pa_lkey, pd->pdn);
871-
if (err) {
872-
mlx5_core_dealloc_pd(to_mdev(ibdev)->mdev, pd->pdn);
873-
kfree(pd);
874-
return ERR_PTR(err);
875-
}
876822
}
877823

878824
return &pd->ibpd;
@@ -883,9 +829,6 @@ static int mlx5_ib_dealloc_pd(struct ib_pd *pd)
883829
struct mlx5_ib_dev *mdev = to_mdev(pd->device);
884830
struct mlx5_ib_pd *mpd = to_mpd(pd);
885831

886-
if (!pd->uobject)
887-
free_pa_mkey(mdev, mpd->pa_lkey);
888-
889832
mlx5_core_dealloc_pd(mdev->mdev, mpd->pdn);
890833
kfree(mpd);
891834

drivers/infiniband/hw/mlx5/mlx5_ib.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,6 @@ static inline struct mlx5_ib_ucontext *to_mucontext(struct ib_ucontext *ibuconte
103103
struct mlx5_ib_pd {
104104
struct ib_pd ibpd;
105105
u32 pdn;
106-
u32 pa_lkey;
107106
};
108107

109108
/* Use macros here so that don't have to duplicate
@@ -213,7 +212,6 @@ struct mlx5_ib_qp {
213212
int uuarn;
214213

215214
int create_type;
216-
u32 pa_lkey;
217215

218216
/* Store signature errors */
219217
bool signature_en;

drivers/infiniband/hw/mlx5/qp.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -925,8 +925,6 @@ static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd,
925925
err = create_kernel_qp(dev, init_attr, qp, &in, &inlen);
926926
if (err)
927927
mlx5_ib_dbg(dev, "err %d\n", err);
928-
else
929-
qp->pa_lkey = to_mpd(pd)->pa_lkey;
930928
}
931929

932930
if (err)
@@ -2045,7 +2043,7 @@ static void set_frwr_pages(struct mlx5_wqe_data_seg *dseg,
20452043
mfrpl->mapped_page_list[i] = cpu_to_be64(page_list[i] | perm);
20462044
dseg->addr = cpu_to_be64(mfrpl->map);
20472045
dseg->byte_count = cpu_to_be32(ALIGN(sizeof(u64) * wr->wr.fast_reg.page_list_len, 64));
2048-
dseg->lkey = cpu_to_be32(pd->pa_lkey);
2046+
dseg->lkey = cpu_to_be32(pd->ibpd.local_dma_lkey);
20492047
}
20502048

20512049
static __be32 send_ieth(struct ib_send_wr *wr)

0 commit comments

Comments
 (0)