diff options
Diffstat (limited to 'drivers/infiniband/hw/irdma/verbs.c')
| -rw-r--r-- | drivers/infiniband/hw/irdma/verbs.c | 12 | 
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/infiniband/hw/irdma/verbs.c b/drivers/infiniband/hw/irdma/verbs.c index ab5cdf782785..eaa12c124598 100644 --- a/drivers/infiniband/hw/irdma/verbs.c +++ b/drivers/infiniband/hw/irdma/verbs.c @@ -522,11 +522,6 @@ static int irdma_destroy_qp(struct ib_qp *ibqp, struct ib_udata *udata)  	if (!iwqp->user_mode)  		cancel_delayed_work_sync(&iwqp->dwork_flush); -	irdma_qp_rem_ref(&iwqp->ibqp); -	wait_for_completion(&iwqp->free_qp); -	irdma_free_lsmm_rsrc(iwqp); -	irdma_cqp_qp_destroy_cmd(&iwdev->rf->sc_dev, &iwqp->sc_qp); -  	if (!iwqp->user_mode) {  		if (iwqp->iwscq) {  			irdma_clean_cqes(iwqp, iwqp->iwscq); @@ -534,6 +529,12 @@ static int irdma_destroy_qp(struct ib_qp *ibqp, struct ib_udata *udata)  				irdma_clean_cqes(iwqp, iwqp->iwrcq);  		}  	} + +	irdma_qp_rem_ref(&iwqp->ibqp); +	wait_for_completion(&iwqp->free_qp); +	irdma_free_lsmm_rsrc(iwqp); +	irdma_cqp_qp_destroy_cmd(&iwdev->rf->sc_dev, &iwqp->sc_qp); +  	irdma_remove_push_mmap_entries(iwqp);  	irdma_free_qp_rsrc(iwqp); @@ -3291,6 +3292,7 @@ static int irdma_post_send(struct ib_qp *ibqp,  			break;  		case IB_WR_LOCAL_INV:  			info.op_type = IRDMA_OP_TYPE_INV_STAG; +			info.local_fence = info.read_fence;  			info.op.inv_local_stag.target_stag = ib_wr->ex.invalidate_rkey;  			err = irdma_uk_stag_local_invalidate(ukqp, &info, true);  			break;  | 
