RDMA/ocrdma: Remove driver QP state machine
authorNaresh Gottumukkala <bgottumukkala@emulex.com>
Wed, 7 Aug 2013 07:22:35 +0000 (12:52 +0530)
committerRoland Dreier <roland@purestorage.com>
Mon, 12 Aug 2013 17:58:38 +0000 (10:58 -0700)
Remove QP state machine in ocrdma low-level driver and use on the core
IB stack's instead.

Signed-off-by: Naresh Gottumukkala <bgottumukkala@emulex.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
drivers/infiniband/hw/ocrdma/ocrdma_hw.c
drivers/infiniband/hw/ocrdma/ocrdma_hw.h
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c

index af01ba202d40fff1cbfbb2152d726cb2abda39fb..c4bb29c9d48adbe7605614ac5c0d358130e9589d 100644 (file)
@@ -654,7 +654,7 @@ static void ocrdma_process_qpcat_error(struct ocrdma_dev *dev,
 
        if (qp == NULL)
                BUG();
-       ocrdma_qp_state_machine(qp, new_ib_qps, &old_ib_qps);
+       ocrdma_qp_state_change(qp, new_ib_qps, &old_ib_qps);
 }
 
 static void ocrdma_dispatch_ibevent(struct ocrdma_dev *dev,
@@ -1676,8 +1676,8 @@ void ocrdma_flush_qp(struct ocrdma_qp *qp)
        spin_unlock_irqrestore(&qp->dev->flush_q_lock, flags);
 }
 
-int ocrdma_qp_state_machine(struct ocrdma_qp *qp, enum ib_qp_state new_ib_state,
-                           enum ib_qp_state *old_ib_state)
+int ocrdma_qp_state_change(struct ocrdma_qp *qp, enum ib_qp_state new_ib_state,
+                          enum ib_qp_state *old_ib_state)
 {
        unsigned long flags;
        int status = 0;
@@ -1694,96 +1694,11 @@ int ocrdma_qp_state_machine(struct ocrdma_qp *qp, enum ib_qp_state new_ib_state,
                return 1;
        }
 
-       switch (qp->state) {
-       case OCRDMA_QPS_RST:
-               switch (new_state) {
-               case OCRDMA_QPS_RST:
-               case OCRDMA_QPS_INIT:
-                       break;
-               default:
-                       status = -EINVAL;
-                       break;
-               };
-               break;
-       case OCRDMA_QPS_INIT:
-               /* qps: INIT->XXX */
-               switch (new_state) {
-               case OCRDMA_QPS_INIT:
-               case OCRDMA_QPS_RTR:
-                       break;
-               case OCRDMA_QPS_ERR:
-                       ocrdma_flush_qp(qp);
-                       break;
-               default:
-                       status = -EINVAL;
-                       break;
-               };
-               break;
-       case OCRDMA_QPS_RTR:
-               /* qps: RTS->XXX */
-               switch (new_state) {
-               case OCRDMA_QPS_RTS:
-                       break;
-               case OCRDMA_QPS_ERR:
-                       ocrdma_flush_qp(qp);
-                       break;
-               default:
-                       status = -EINVAL;
-                       break;
-               };
-               break;
-       case OCRDMA_QPS_RTS:
-               /* qps: RTS->XXX */
-               switch (new_state) {
-               case OCRDMA_QPS_SQD:
-               case OCRDMA_QPS_SQE:
-                       break;
-               case OCRDMA_QPS_ERR:
-                       ocrdma_flush_qp(qp);
-                       break;
-               default:
-                       status = -EINVAL;
-                       break;
-               };
-               break;
-       case OCRDMA_QPS_SQD:
-               /* qps: SQD->XXX */
-               switch (new_state) {
-               case OCRDMA_QPS_RTS:
-               case OCRDMA_QPS_SQE:
-               case OCRDMA_QPS_ERR:
-                       break;
-               default:
-                       status = -EINVAL;
-                       break;
-               };
-               break;
-       case OCRDMA_QPS_SQE:
-               switch (new_state) {
-               case OCRDMA_QPS_RTS:
-               case OCRDMA_QPS_ERR:
-                       break;
-               default:
-                       status = -EINVAL;
-                       break;
-               };
-               break;
-       case OCRDMA_QPS_ERR:
-               /* qps: ERR->XXX */
-               switch (new_state) {
-               case OCRDMA_QPS_RST:
-                       break;
-               default:
-                       status = -EINVAL;
-                       break;
-               };
-               break;
-       default:
-               status = -EINVAL;
-               break;
-       };
-       if (!status)
-               qp->state = new_state;
+
+       if (new_state == OCRDMA_QPS_ERR)
+               ocrdma_flush_qp(qp);
+
+       qp->state = new_state;
 
        spin_unlock_irqrestore(&qp->q_lock, flags);
        return status;
index 5d8e6f518f874cf4e8b5a338fc5837b063542b60..cc90ac3b6d424f73f432b3f4639c85212367c57a 100644 (file)
@@ -122,7 +122,7 @@ int ocrdma_mbx_destroy_srq(struct ocrdma_dev *, struct ocrdma_srq *);
 int ocrdma_alloc_av(struct ocrdma_dev *, struct ocrdma_ah *);
 int ocrdma_free_av(struct ocrdma_dev *, struct ocrdma_ah *);
 
-int ocrdma_qp_state_machine(struct ocrdma_qp *, enum ib_qp_state new_state,
+int ocrdma_qp_state_change(struct ocrdma_qp *, enum ib_qp_state new_state,
                            enum ib_qp_state *old_ib_state);
 bool ocrdma_is_qp_in_sq_flushlist(struct ocrdma_cq *, struct ocrdma_qp *);
 bool ocrdma_is_qp_in_rq_flushlist(struct ocrdma_cq *, struct ocrdma_qp *);
index c9ace64fc3432cab957fcc32261e51487d2396bc..2cfbd343ba0e57fcc1ae0fcd73ebf7a58eaf3527 100644 (file)
@@ -1101,7 +1101,7 @@ int _ocrdma_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
        qp = get_ocrdma_qp(ibqp);
        dev = qp->dev;
        if (attr_mask & IB_QP_STATE)
-               status = ocrdma_qp_state_machine(qp, attr->qp_state, &old_qps);
+               status = ocrdma_qp_state_change(qp, attr->qp_state, &old_qps);
        /* if new and previous states are same hw doesn't need to
         * know about it.
         */
@@ -2106,7 +2106,7 @@ static bool ocrdma_update_err_cqe(struct ib_wc *ibwc, struct ocrdma_cqe *cqe,
        ibwc->status = ocrdma_to_ibwc_err(status);
 
        ocrdma_flush_qp(qp);
-       ocrdma_qp_state_machine(qp, IB_QPS_ERR, NULL);
+       ocrdma_qp_state_change(qp, IB_QPS_ERR, NULL);
 
        /* if wqe/rqe pending for which cqe needs to be returned,
         * trigger inflating it.
This page took 0.031015 seconds and 5 git commands to generate.