RDMA/hns: Add verification of QP type when post_recv
authorWenpeng Liang <liangwenpeng@huawei.com>
Sat, 30 Jan 2021 08:58:10 +0000 (16:58 +0800)
committerJason Gunthorpe <jgg@nvidia.com>
Mon, 8 Feb 2021 23:37:36 +0000 (19:37 -0400)
The post_recv only supports QP types of RC, GSI and UD.

Link: https://lore.kernel.org/r/1611997090-48820-13-git-send-email-liweihang@huawei.com
Signed-off-by: Wenpeng Liang <liangwenpeng@huawei.com>
Signed-off-by: Weihang Li <liweihang@huawei.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/hw/hns/hns_roce_hw_v2.c

index d5a63e4..3adb77d 100644 (file)
@@ -721,9 +721,21 @@ out:
 static int check_recv_valid(struct hns_roce_dev *hr_dev,
                            struct hns_roce_qp *hr_qp)
 {
+       struct ib_device *ibdev = &hr_dev->ib_dev;
+       struct ib_qp *ibqp = &hr_qp->ibqp;
+
+       if (unlikely(ibqp->qp_type != IB_QPT_RC &&
+                    ibqp->qp_type != IB_QPT_GSI &&
+                    ibqp->qp_type != IB_QPT_UD)) {
+               ibdev_err(ibdev, "unsupported qp type, qp_type = %d.\n",
+                         ibqp->qp_type);
+               return -EOPNOTSUPP;
+       }
+
        if (unlikely(hr_dev->state >= HNS_ROCE_DEVICE_STATE_RST_DOWN))
                return -EIO;
-       else if (hr_qp->state == IB_QPS_RESET)
+
+       if (hr_qp->state == IB_QPS_RESET)
                return -EINVAL;
 
        return 0;