RDMA/hns: Fix PBL page MTR find
authorChengchang Tang <tangchengchang@huawei.com>
Sat, 26 Nov 2022 10:29:08 +0000 (18:29 +0800)
committerJason Gunthorpe <jgg@nvidia.com>
Wed, 7 Dec 2022 23:51:05 +0000 (19:51 -0400)
Now, The address of the first two pages in the MR will be searched, which
use to speed up the lookup of the pbl table for hardware.  An exception
will occur when there is only one page in this MR.  This patch fix the
number of page to search.

Fixes: 9b2cf76c9f05 ("RDMA/hns: Optimize PBL buffer allocation process")
Link: https://lore.kernel.org/r/20221126102911.2921820-4-xuhaoyue1@hisilicon.com
Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
Signed-off-by: Haoyue Xu <xuhaoyue1@hisilicon.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/hw/hns/hns_roce_hw_v2.c

index a8f8c790d31dc9f5cfe8c89326e1b48142a0842f..41835cb05983ade63ec468320e9ea91621ceba31 100644 (file)
@@ -3274,7 +3274,8 @@ static int set_mtpt_pbl(struct hns_roce_dev *hr_dev,
        int i, count;
 
        count = hns_roce_mtr_find(hr_dev, &mr->pbl_mtr, 0, pages,
-                                 ARRAY_SIZE(pages), &pbl_ba);
+                                 min_t(int, ARRAY_SIZE(pages), mr->npages),
+                                 &pbl_ba);
        if (count < 1) {
                ibdev_err(ibdev, "failed to find PBL mtr, count = %d.\n",
                          count);