Skip to content

Commit

Permalink
IB/mlx5: Fix alignment of reg umr gather buffers
Browse files Browse the repository at this point in the history
The hardware requires that gather buffers for UMR work requests be
aligned to 2K.

Signed-off-by: Eli Cohen <eli@mellanox.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
  • Loading branch information
Eli Cohen authored and Roland Dreier committed Oct 10, 2013
1 parent ada9f5d commit fe45f82
Showing 1 changed file with 8 additions and 3 deletions.
11 changes: 8 additions & 3 deletions drivers/infiniband/hw/mlx5/mr.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ enum {
DEF_CACHE_SIZE = 10,
};

enum {
MLX5_UMR_ALIGN = 2048
};

static __be64 *mr_align(__be64 *ptr, int align)
{
unsigned long mask = align - 1;
Expand Down Expand Up @@ -671,20 +675,21 @@ static struct mlx5_ib_mr *reg_umr(struct ib_pd *pd, struct ib_umem *umem,
if (!mr)
return ERR_PTR(-EAGAIN);

mr->pas = kmalloc(size + 0x3f, GFP_KERNEL);
mr->pas = kmalloc(size + MLX5_UMR_ALIGN - 1, GFP_KERNEL);
if (!mr->pas) {
err = -ENOMEM;
goto error;
}
mr->dma = dma_map_single(ddev, mr_align(mr->pas, 0x40), size,
mr->dma = dma_map_single(ddev, mr_align(mr->pas, MLX5_UMR_ALIGN), size,
DMA_TO_DEVICE);
if (dma_mapping_error(ddev, mr->dma)) {
kfree(mr->pas);
err = -ENOMEM;
goto error;
}

mlx5_ib_populate_pas(dev, umem, page_shift, mr_align(mr->pas, 0x40), 1);
mlx5_ib_populate_pas(dev, umem, page_shift,
mr_align(mr->pas, MLX5_UMR_ALIGN), 1);

memset(&wr, 0, sizeof(wr));
wr.wr_id = (u64)(unsigned long)mr;
Expand Down

0 comments on commit fe45f82

Please sign in to comment.