|
@@ -823,6 +823,7 @@ static void i40iw_terminate_timeout(unsigned long context)
|
|
|
struct i40iw_sc_qp *qp = (struct i40iw_sc_qp *)&iwqp->sc_qp;
|
|
|
|
|
|
i40iw_terminate_done(qp, 1);
|
|
|
+ i40iw_rem_ref(&iwqp->ibqp);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -834,6 +835,7 @@ void i40iw_terminate_start_timer(struct i40iw_sc_qp *qp)
|
|
|
struct i40iw_qp *iwqp;
|
|
|
|
|
|
iwqp = (struct i40iw_qp *)qp->back_qp;
|
|
|
+ i40iw_add_ref(&iwqp->ibqp);
|
|
|
init_timer(&iwqp->terminate_timer);
|
|
|
iwqp->terminate_timer.function = i40iw_terminate_timeout;
|
|
|
iwqp->terminate_timer.expires = jiffies + HZ;
|
|
@@ -850,7 +852,8 @@ void i40iw_terminate_del_timer(struct i40iw_sc_qp *qp)
|
|
|
struct i40iw_qp *iwqp;
|
|
|
|
|
|
iwqp = (struct i40iw_qp *)qp->back_qp;
|
|
|
- del_timer(&iwqp->terminate_timer);
|
|
|
+ if (del_timer(&iwqp->terminate_timer))
|
|
|
+ i40iw_rem_ref(&iwqp->ibqp);
|
|
|
}
|
|
|
|
|
|
/**
|