Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 21af2c3e authored by Haggai Eran's avatar Haggai Eran Committed by Roland Dreier
Browse files

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: a74d2416 ("IB/mlx5: Refactor UMR to have its own context struct")
Signed-off-by: default avatarHaggai Eran <haggaie@mellanox.com>
Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
parent 70e71ca0
Loading
Loading
Loading
Loading
+0 −2
Original line number Original line Diff line number Diff line
@@ -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;
+12 −9
Original line number Original line Diff line number Diff line
@@ -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) {