diff options
| -rw-r--r-- | drivers/infiniband/hw/mlx5/mr.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/infiniband/hw/mlx5/mr.c b/drivers/infiniband/hw/mlx5/mr.c index 06e33e6cb07f..154241290f5c 100644 --- a/drivers/infiniband/hw/mlx5/mr.c +++ b/drivers/infiniband/hw/mlx5/mr.c | |||
| @@ -42,6 +42,10 @@ enum { | |||
| 42 | DEF_CACHE_SIZE = 10, | 42 | DEF_CACHE_SIZE = 10, |
| 43 | }; | 43 | }; |
| 44 | 44 | ||
| 45 | enum { | ||
| 46 | MLX5_UMR_ALIGN = 2048 | ||
| 47 | }; | ||
| 48 | |||
| 45 | static __be64 *mr_align(__be64 *ptr, int align) | 49 | static __be64 *mr_align(__be64 *ptr, int align) |
| 46 | { | 50 | { |
| 47 | unsigned long mask = align - 1; | 51 | unsigned long mask = align - 1; |
| @@ -671,12 +675,12 @@ static struct mlx5_ib_mr *reg_umr(struct ib_pd *pd, struct ib_umem *umem, | |||
| 671 | if (!mr) | 675 | if (!mr) |
| 672 | return ERR_PTR(-EAGAIN); | 676 | return ERR_PTR(-EAGAIN); |
| 673 | 677 | ||
| 674 | mr->pas = kmalloc(size + 0x3f, GFP_KERNEL); | 678 | mr->pas = kmalloc(size + MLX5_UMR_ALIGN - 1, GFP_KERNEL); |
| 675 | if (!mr->pas) { | 679 | if (!mr->pas) { |
| 676 | err = -ENOMEM; | 680 | err = -ENOMEM; |
| 677 | goto error; | 681 | goto error; |
| 678 | } | 682 | } |
| 679 | mr->dma = dma_map_single(ddev, mr_align(mr->pas, 0x40), size, | 683 | mr->dma = dma_map_single(ddev, mr_align(mr->pas, MLX5_UMR_ALIGN), size, |
| 680 | DMA_TO_DEVICE); | 684 | DMA_TO_DEVICE); |
| 681 | if (dma_mapping_error(ddev, mr->dma)) { | 685 | if (dma_mapping_error(ddev, mr->dma)) { |
| 682 | kfree(mr->pas); | 686 | kfree(mr->pas); |
| @@ -684,7 +688,8 @@ static struct mlx5_ib_mr *reg_umr(struct ib_pd *pd, struct ib_umem *umem, | |||
| 684 | goto error; | 688 | goto error; |
| 685 | } | 689 | } |
| 686 | 690 | ||
| 687 | mlx5_ib_populate_pas(dev, umem, page_shift, mr_align(mr->pas, 0x40), 1); | 691 | mlx5_ib_populate_pas(dev, umem, page_shift, |
| 692 | mr_align(mr->pas, MLX5_UMR_ALIGN), 1); | ||
| 688 | 693 | ||
| 689 | memset(&wr, 0, sizeof(wr)); | 694 | memset(&wr, 0, sizeof(wr)); |
| 690 | wr.wr_id = (u64)(unsigned long)mr; | 695 | wr.wr_id = (u64)(unsigned long)mr; |
