|
@@ -1721,18 +1721,20 @@ int ocrdma_destroy_qp(struct ib_qp *ibqp)
|
|
|
struct ocrdma_qp *qp;
|
|
|
struct ocrdma_dev *dev;
|
|
|
struct ib_qp_attr attrs;
|
|
|
- int attr_mask = IB_QP_STATE;
|
|
|
+ int attr_mask;
|
|
|
unsigned long flags;
|
|
|
|
|
|
qp = get_ocrdma_qp(ibqp);
|
|
|
dev = get_ocrdma_dev(ibqp->device);
|
|
|
|
|
|
- attrs.qp_state = IB_QPS_ERR;
|
|
|
pd = qp->pd;
|
|
|
|
|
|
/* change the QP state to ERROR */
|
|
|
- _ocrdma_modify_qp(ibqp, &attrs, attr_mask);
|
|
|
-
|
|
|
+ if (qp->state != OCRDMA_QPS_RST) {
|
|
|
+ attrs.qp_state = IB_QPS_ERR;
|
|
|
+ attr_mask = IB_QP_STATE;
|
|
|
+ _ocrdma_modify_qp(ibqp, &attrs, attr_mask);
|
|
|
+ }
|
|
|
/* ensure that CQEs for newly created QP (whose id may be same with
|
|
|
* one which just getting destroyed are same), dont get
|
|
|
* discarded until the old CQEs are discarded.
|