OSDN Git Service

RDMA/hns: Encapsulate and simplify qp state transition
authorLijun Ou <oulijun@huawei.com>
Sat, 8 Dec 2018 10:40:08 +0000 (18:40 +0800)
committerJason Gunthorpe <jgg@mellanox.com>
Tue, 11 Dec 2018 19:04:06 +0000 (12:04 -0700)
This patch move the codes of qp state transition into the new function as
well as simplify the logic for other qp states transition.

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

index 1cffe74..ca71e10 100644 (file)
@@ -3670,6 +3670,21 @@ static int modify_qp_rtr_to_rts(struct ib_qp *ibqp,
        return 0;
 }
 
+static inline bool hns_roce_v2_check_qp_stat(enum ib_qp_state cur_state,
+                                            enum ib_qp_state new_state)
+{
+
+       if ((cur_state != IB_QPS_RESET &&
+           (new_state == IB_QPS_ERR || new_state == IB_QPS_RESET)) ||
+           ((cur_state == IB_QPS_RTS || cur_state == IB_QPS_SQD) &&
+           (new_state == IB_QPS_RTS || new_state == IB_QPS_SQD)) ||
+           (cur_state == IB_QPS_SQE && new_state == IB_QPS_RTS))
+               return true;
+
+       return false;
+
+}
+
 static int hns_roce_v2_modify_qp(struct ib_qp *ibqp,
                                 const struct ib_qp_attr *attr,
                                 int attr_mask, enum ib_qp_state cur_state,
@@ -3711,21 +3726,7 @@ static int hns_roce_v2_modify_qp(struct ib_qp *ibqp,
                                           qpc_mask);
                if (ret)
                        goto out;
-       } else if ((cur_state == IB_QPS_RTS && new_state == IB_QPS_RTS) ||
-                  (cur_state == IB_QPS_SQE && new_state == IB_QPS_RTS) ||
-                  (cur_state == IB_QPS_RTS && new_state == IB_QPS_SQD) ||
-                  (cur_state == IB_QPS_SQD && new_state == IB_QPS_SQD) ||
-                  (cur_state == IB_QPS_SQD && new_state == IB_QPS_RTS) ||
-                  (cur_state == IB_QPS_INIT && new_state == IB_QPS_RESET) ||
-                  (cur_state == IB_QPS_RTR && new_state == IB_QPS_RESET) ||
-                  (cur_state == IB_QPS_RTS && new_state == IB_QPS_RESET) ||
-                  (cur_state == IB_QPS_ERR && new_state == IB_QPS_RESET) ||
-                  (cur_state == IB_QPS_INIT && new_state == IB_QPS_ERR) ||
-                  (cur_state == IB_QPS_RTR && new_state == IB_QPS_ERR) ||
-                  (cur_state == IB_QPS_RTS && new_state == IB_QPS_ERR) ||
-                  (cur_state == IB_QPS_SQD && new_state == IB_QPS_ERR) ||
-                  (cur_state == IB_QPS_SQE && new_state == IB_QPS_ERR) ||
-                  (cur_state == IB_QPS_ERR && new_state == IB_QPS_ERR)) {
+       } else if (hns_roce_v2_check_qp_stat(cur_state, new_state)) {
                /* Nothing */
                ;
        } else {