OSDN Git Service

RDMA/hns: Fixup qp release bug
authorchenglang <chenglang@huawei.com>
Mon, 24 Jun 2019 11:47:46 +0000 (19:47 +0800)
committerJason Gunthorpe <jgg@mellanox.com>
Fri, 5 Jul 2019 15:02:00 +0000 (12:02 -0300)
Hip06 reserve 12 qps, Hip08 reserve 8 qps. When the QP is released, the
chip model is not judged, and the Hip08 cannot release the qpn 8~12

Signed-off-by: Lang Cheng <chenglang@huawei.com>
Signed-off-by: Lijun Ou <oulijun@huawei.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/hw/hns/hns_roce_hw_v1.c
drivers/infiniband/hw/hns/hns_roce_qp.c

index 998431c..2189e52 100644 (file)
@@ -1559,6 +1559,7 @@ static int hns_roce_v1_profile(struct hns_roce_dev *hr_dev)
        caps->reserved_mrws     = 1;
        caps->reserved_uars     = 0;
        caps->reserved_cqs      = 0;
+       caps->reserved_qps      = 12; /* 2 SQP per port, six ports total 12 */
        caps->chunk_sz          = HNS_ROCE_V1_TABLE_CHUNK_SIZE;
 
        for (i = 0; i < caps->num_ports; i++)
index 4f693cd..e7bbd6d 100644 (file)
@@ -263,7 +263,7 @@ void hns_roce_release_range_qp(struct hns_roce_dev *hr_dev, int base_qpn,
 {
        struct hns_roce_qp_table *qp_table = &hr_dev->qp_table;
 
-       if (base_qpn < SQP_NUM)
+       if (base_qpn < hr_dev->caps.reserved_qps)
                return;
 
        hns_roce_bitmap_free_range(&qp_table->bitmap, base_qpn, cnt, BITMAP_RR);
@@ -1226,11 +1226,7 @@ int hns_roce_init_qp_table(struct hns_roce_dev *hr_dev)
        mutex_init(&qp_table->scc_mutex);
        xa_init(&hr_dev->qp_table_xa);
 
-       /* In hw v1, a port include two SQP, six ports total 12 */
-       if (hr_dev->caps.max_sq_sg <= 2)
-               reserved_from_bot = SQP_NUM;
-       else
-               reserved_from_bot = hr_dev->caps.reserved_qps;
+       reserved_from_bot = hr_dev->caps.reserved_qps;
 
        ret = hns_roce_bitmap_init(&qp_table->bitmap, hr_dev->caps.num_qps,
                                   hr_dev->caps.num_qps - 1, reserved_from_bot,