|
@@ -1038,6 +1038,8 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd,
|
|
|
struct mlx4_ib_create_wq wq;
|
|
|
} ucmd;
|
|
|
size_t copy_len;
|
|
|
+ int shift;
|
|
|
+ int n;
|
|
|
|
|
|
copy_len = (src == MLX4_IB_QP_SRC) ?
|
|
|
sizeof(struct mlx4_ib_create_qp) :
|
|
@@ -1100,8 +1102,10 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd,
|
|
|
goto err;
|
|
|
}
|
|
|
|
|
|
- err = mlx4_mtt_init(dev->dev, ib_umem_page_count(qp->umem),
|
|
|
- qp->umem->page_shift, &qp->mtt);
|
|
|
+ n = ib_umem_page_count(qp->umem);
|
|
|
+ shift = mlx4_ib_umem_calc_optimal_mtt_size(qp->umem, 0, &n);
|
|
|
+ err = mlx4_mtt_init(dev->dev, n, shift, &qp->mtt);
|
|
|
+
|
|
|
if (err)
|
|
|
goto err_buf;
|
|
|
|