]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
RDMA/hns: Fix QP's resp incomplete assignment
authorWenpeng Liang <liangwenpeng@huawei.com>
Thu, 26 Aug 2021 13:37:31 +0000 (21:37 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 18 Sep 2021 11:41:56 +0000 (13:41 +0200)
[ Upstream commit d2e0ccffcdd7209fc9881c8970d2a7e28dcb43b9 ]

The resp passed to the user space represents the enable flag of qp,
incomplete assignment will cause some features of the user space to be
disabled.

Fixes: 90ae0b57e4a5 ("RDMA/hns: Combine enable flags of qp")
Fixes: aba457ca890c ("RDMA/hns: Support owner mode doorbell")
Link: https://lore.kernel.org/r/1629985056-57004-3-git-send-email-liangwenpeng@huawei.com
Signed-off-by: Wenpeng Liang <liangwenpeng@huawei.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/infiniband/hw/hns/hns_roce_qp.c

index 80661d3688600feda15ad2f0437068cb86c6b7cc..5d5dd0b5d50753f116239facb748f4effd76dfcb 100644 (file)
@@ -835,7 +835,6 @@ static int alloc_qp_db(struct hns_roce_dev *hr_dev, struct hns_roce_qp *hr_qp,
                                goto err_out;
                        }
                        hr_qp->en_flags |= HNS_ROCE_QP_CAP_SQ_RECORD_DB;
-                       resp->cap_flags |= HNS_ROCE_QP_CAP_SQ_RECORD_DB;
                }
 
                if (user_qp_has_rdb(hr_dev, init_attr, udata, resp)) {
@@ -848,7 +847,6 @@ static int alloc_qp_db(struct hns_roce_dev *hr_dev, struct hns_roce_qp *hr_qp,
                                goto err_sdb;
                        }
                        hr_qp->en_flags |= HNS_ROCE_QP_CAP_RQ_RECORD_DB;
-                       resp->cap_flags |= HNS_ROCE_QP_CAP_RQ_RECORD_DB;
                }
        } else {
                if (hr_dev->pci_dev->revision >= PCI_REVISION_ID_HIP09)
@@ -1060,6 +1058,7 @@ static int hns_roce_create_qp_common(struct hns_roce_dev *hr_dev,
        }
 
        if (udata) {
+               resp.cap_flags = hr_qp->en_flags;
                ret = ib_copy_to_udata(udata, &resp,
                                       min(udata->outlen, sizeof(resp)));
                if (ret) {