RDMA/hns: Fix wrong parameters when initial mtt of srq->idx_que
[linux-2.6-microblaze.git] / drivers / infiniband / hw / hns / hns_roce_srq.c
index 9591457..d96041d 100644 (file)
@@ -180,8 +180,7 @@ static int create_user_srq(struct hns_roce_srq *srq, struct ib_udata *udata,
 {
        struct hns_roce_dev *hr_dev = to_hr_dev(srq->ibsrq.device);
        struct hns_roce_ib_create_srq  ucmd;
-       u32 page_shift;
-       u32 npages;
+       struct hns_roce_buf *buf;
        int ret;
 
        if (ib_copy_from_udata(&ucmd, udata, sizeof(ucmd)))
@@ -191,11 +190,13 @@ static int create_user_srq(struct hns_roce_srq *srq, struct ib_udata *udata,
        if (IS_ERR(srq->umem))
                return PTR_ERR(srq->umem);
 
-       npages = (ib_umem_page_count(srq->umem) +
-               (1 << hr_dev->caps.srqwqe_buf_pg_sz) - 1) /
-               (1 << hr_dev->caps.srqwqe_buf_pg_sz);
-       page_shift = PAGE_SHIFT + hr_dev->caps.srqwqe_buf_pg_sz;
-       ret = hns_roce_mtt_init(hr_dev, npages, page_shift, &srq->mtt);
+       buf = &srq->buf;
+       buf->npages = (ib_umem_page_count(srq->umem) +
+                      (1 << hr_dev->caps.srqwqe_buf_pg_sz) - 1) /
+                     (1 << hr_dev->caps.srqwqe_buf_pg_sz);
+       buf->page_shift = PAGE_SHIFT + hr_dev->caps.srqwqe_buf_pg_sz;
+       ret = hns_roce_mtt_init(hr_dev, buf->npages, buf->page_shift,
+                               &srq->mtt);
        if (ret)
                goto err_user_buf;
 
@@ -212,9 +213,12 @@ static int create_user_srq(struct hns_roce_srq *srq, struct ib_udata *udata,
                goto err_user_srq_mtt;
        }
 
-       ret = hns_roce_mtt_init(hr_dev, ib_umem_page_count(srq->idx_que.umem),
-                               PAGE_SHIFT, &srq->idx_que.mtt);
-
+       buf = &srq->idx_que.idx_buf;
+       buf->npages = DIV_ROUND_UP(ib_umem_page_count(srq->idx_que.umem),
+                                  1 << hr_dev->caps.idx_buf_pg_sz);
+       buf->page_shift = PAGE_SHIFT + hr_dev->caps.idx_buf_pg_sz;
+       ret = hns_roce_mtt_init(hr_dev, buf->npages, buf->page_shift,
+                               &srq->idx_que.mtt);
        if (ret) {
                dev_err(hr_dev->dev, "hns_roce_mtt_init error for idx que\n");
                goto err_user_idx_mtt;