IB/mlx5: Remove per-MR pas and dma pointers
Since UMR code now uses its own context struct on the stack, the pas
and dma pointers for the UMR operation that remained in the mlx5_ib_mr
struct are not necessary. This patch removes them.
Fixes: a74d24168d
("IB/mlx5: Refactor UMR to have its own context struct")
Signed-off-by: Haggai Eran <haggaie@mellanox.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:
parent
70e71ca0af
commit
21af2c3ebf
@ -261,8 +261,6 @@ struct mlx5_ib_mr {
|
|||||||
struct list_head list;
|
struct list_head list;
|
||||||
int order;
|
int order;
|
||||||
int umred;
|
int umred;
|
||||||
__be64 *pas;
|
|
||||||
dma_addr_t dma;
|
|
||||||
int npages;
|
int npages;
|
||||||
struct mlx5_ib_dev *dev;
|
struct mlx5_ib_dev *dev;
|
||||||
struct mlx5_create_mkey_mbox_out out;
|
struct mlx5_create_mkey_mbox_out out;
|
||||||
|
@ -743,6 +743,8 @@ static struct mlx5_ib_mr *reg_umr(struct ib_pd *pd, struct ib_umem *umem,
|
|||||||
struct mlx5_ib_mr *mr;
|
struct mlx5_ib_mr *mr;
|
||||||
struct ib_sge sg;
|
struct ib_sge sg;
|
||||||
int size = sizeof(u64) * npages;
|
int size = sizeof(u64) * npages;
|
||||||
|
__be64 *mr_pas;
|
||||||
|
dma_addr_t dma;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -761,25 +763,26 @@ static struct mlx5_ib_mr *reg_umr(struct ib_pd *pd, struct ib_umem *umem,
|
|||||||
if (!mr)
|
if (!mr)
|
||||||
return ERR_PTR(-EAGAIN);
|
return ERR_PTR(-EAGAIN);
|
||||||
|
|
||||||
mr->pas = kmalloc(size + MLX5_UMR_ALIGN - 1, GFP_KERNEL);
|
mr_pas = kmalloc(size + MLX5_UMR_ALIGN - 1, GFP_KERNEL);
|
||||||
if (!mr->pas) {
|
if (!mr_pas) {
|
||||||
err = -ENOMEM;
|
err = -ENOMEM;
|
||||||
goto free_mr;
|
goto free_mr;
|
||||||
}
|
}
|
||||||
|
|
||||||
mlx5_ib_populate_pas(dev, umem, page_shift,
|
mlx5_ib_populate_pas(dev, umem, page_shift,
|
||||||
mr_align(mr->pas, MLX5_UMR_ALIGN), 1);
|
mr_align(mr_pas, MLX5_UMR_ALIGN), 1);
|
||||||
|
|
||||||
mr->dma = dma_map_single(ddev, mr_align(mr->pas, MLX5_UMR_ALIGN), size,
|
dma = dma_map_single(ddev, mr_align(mr_pas, MLX5_UMR_ALIGN), size,
|
||||||
DMA_TO_DEVICE);
|
DMA_TO_DEVICE);
|
||||||
if (dma_mapping_error(ddev, mr->dma)) {
|
if (dma_mapping_error(ddev, dma)) {
|
||||||
err = -ENOMEM;
|
err = -ENOMEM;
|
||||||
goto free_pas;
|
goto free_pas;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(&wr, 0, sizeof(wr));
|
memset(&wr, 0, sizeof(wr));
|
||||||
wr.wr_id = (u64)(unsigned long)&umr_context;
|
wr.wr_id = (u64)(unsigned long)&umr_context;
|
||||||
prep_umr_reg_wqe(pd, &wr, &sg, mr->dma, npages, mr->mmr.key, page_shift, virt_addr, len, access_flags);
|
prep_umr_reg_wqe(pd, &wr, &sg, dma, npages, mr->mmr.key, page_shift,
|
||||||
|
virt_addr, len, access_flags);
|
||||||
|
|
||||||
mlx5_ib_init_umr_context(&umr_context);
|
mlx5_ib_init_umr_context(&umr_context);
|
||||||
down(&umrc->sem);
|
down(&umrc->sem);
|
||||||
@ -801,10 +804,10 @@ static struct mlx5_ib_mr *reg_umr(struct ib_pd *pd, struct ib_umem *umem,
|
|||||||
|
|
||||||
unmap_dma:
|
unmap_dma:
|
||||||
up(&umrc->sem);
|
up(&umrc->sem);
|
||||||
dma_unmap_single(ddev, mr->dma, size, DMA_TO_DEVICE);
|
dma_unmap_single(ddev, dma, size, DMA_TO_DEVICE);
|
||||||
|
|
||||||
free_pas:
|
free_pas:
|
||||||
kfree(mr->pas);
|
kfree(mr_pas);
|
||||||
|
|
||||||
free_mr:
|
free_mr:
|
||||||
if (err) {
|
if (err) {
|
||||||
|
Loading…
Reference in New Issue
Block a user