Skip to content

Commit 4163cb3

Browse files
maorgottliebjgunthorpe
authored andcommitted
Revert "RDMA/mlx5: Fix releasing unallocated memory in dereg MR flow"
This patch is not the full fix and still causes to call traces during mlx5_ib_dereg_mr(). This reverts commit f0ae4af. Fixes: f0ae4af ("RDMA/mlx5: Fix releasing unallocated memory in dereg MR flow") Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Maor Gottlieb <[email protected]> Acked-by: Leon Romanovsky <[email protected]> Signed-off-by: Jason Gunthorpe <[email protected]>
1 parent 8ff5f5d commit 4163cb3

File tree

2 files changed

+17
-15
lines changed

2 files changed

+17
-15
lines changed

drivers/infiniband/hw/mlx5/mlx5_ib.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -664,6 +664,7 @@ struct mlx5_ib_mr {
664664

665665
/* User MR data */
666666
struct mlx5_cache_ent *cache_ent;
667+
struct ib_umem *umem;
667668

668669
/* This is zero'd when the MR is allocated */
669670
union {
@@ -675,7 +676,7 @@ struct mlx5_ib_mr {
675676
struct list_head list;
676677
};
677678

678-
/* Used only by kernel MRs */
679+
/* Used only by kernel MRs (umem == NULL) */
679680
struct {
680681
void *descs;
681682
void *descs_alloc;
@@ -696,9 +697,8 @@ struct mlx5_ib_mr {
696697
int data_length;
697698
};
698699

699-
/* Used only by User MRs */
700+
/* Used only by User MRs (umem != NULL) */
700701
struct {
701-
struct ib_umem *umem;
702702
unsigned int page_shift;
703703
/* Current access_flags */
704704
int access_flags;

drivers/infiniband/hw/mlx5/mr.c

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1904,18 +1904,19 @@ mlx5_alloc_priv_descs(struct ib_device *device,
19041904
return ret;
19051905
}
19061906

1907-
static void mlx5_free_priv_descs(struct mlx5_ib_mr *mr)
1907+
static void
1908+
mlx5_free_priv_descs(struct mlx5_ib_mr *mr)
19081909
{
1909-
struct mlx5_ib_dev *dev = to_mdev(mr->ibmr.device);
1910-
int size = mr->max_descs * mr->desc_size;
1911-
1912-
if (!mr->descs)
1913-
return;
1910+
if (!mr->umem && mr->descs) {
1911+
struct ib_device *device = mr->ibmr.device;
1912+
int size = mr->max_descs * mr->desc_size;
1913+
struct mlx5_ib_dev *dev = to_mdev(device);
19141914

1915-
dma_unmap_single(&dev->mdev->pdev->dev, mr->desc_map, size,
1916-
DMA_TO_DEVICE);
1917-
kfree(mr->descs_alloc);
1918-
mr->descs = NULL;
1915+
dma_unmap_single(&dev->mdev->pdev->dev, mr->desc_map, size,
1916+
DMA_TO_DEVICE);
1917+
kfree(mr->descs_alloc);
1918+
mr->descs = NULL;
1919+
}
19191920
}
19201921

19211922
int mlx5_ib_dereg_mr(struct ib_mr *ibmr, struct ib_udata *udata)
@@ -1991,8 +1992,7 @@ int mlx5_ib_dereg_mr(struct ib_mr *ibmr, struct ib_udata *udata)
19911992
if (mr->cache_ent) {
19921993
mlx5_mr_cache_free(dev, mr);
19931994
} else {
1994-
if (!udata)
1995-
mlx5_free_priv_descs(mr);
1995+
mlx5_free_priv_descs(mr);
19961996
kfree(mr);
19971997
}
19981998
return 0;
@@ -2079,6 +2079,7 @@ static struct mlx5_ib_mr *mlx5_ib_alloc_pi_mr(struct ib_pd *pd,
20792079
if (err)
20802080
goto err_free_in;
20812081

2082+
mr->umem = NULL;
20822083
kfree(in);
20832084

20842085
return mr;
@@ -2205,6 +2206,7 @@ static struct ib_mr *__mlx5_ib_alloc_mr(struct ib_pd *pd,
22052206
}
22062207

22072208
mr->ibmr.device = pd->device;
2209+
mr->umem = NULL;
22082210

22092211
switch (mr_type) {
22102212
case IB_MR_TYPE_MEM_REG:

0 commit comments

Comments
 (0)