lkml.org 
[lkml]   [2019]   [Dec]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.4 135/350] RDMA/hns: Fix wrong parameters when initial mtt of srq->idx_que
    Date
    From: Weihang Li <liweihang@hisilicon.com>

    [ Upstream commit e8a07de57ea4ca7c2d604871c52826e66899fc70 ]

    The parameters npages used to initial mtt of srq->idx_que shouldn't be
    same with srq's. And page_shift should be calculated from idx_buf_pg_sz.
    This patch fixes above issues and use field named npage and page_shift
    in hns_roce_buf instead of two temporary variables to let us use them
    anywhere.

    Fixes: 18df508c7970 ("RDMA/hns: Remove if-else judgment statements for creating srq")
    Signed-off-by: Weihang Li <liweihang@hisilicon.com>
    Link: https://lore.kernel.org/r/1567566885-23088-3-git-send-email-liweihang@hisilicon.com
    Signed-off-by: Doug Ledford <dledford@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/infiniband/hw/hns/hns_roce_srq.c | 24 ++++++++++++++----------
    1 file changed, 14 insertions(+), 10 deletions(-)

    diff --git a/drivers/infiniband/hw/hns/hns_roce_srq.c b/drivers/infiniband/hw/hns/hns_roce_srq.c
    index 43ea2c13b2122..108667ae6b14c 100644
    --- a/drivers/infiniband/hw/hns/hns_roce_srq.c
    +++ b/drivers/infiniband/hw/hns/hns_roce_srq.c
    @@ -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;
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-12-10 22:10    [W:3.211 / U:0.128 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site