forked from mirrors/linux
		
	IB/hfi1: Unreserve a reserved request when it is completed
Currently, When a reserved operation is completed, its entry in the send
queue will not be unreserved, which leads to the miscalculation of
qp->s_avail and thus the triggering of a WARN_ON call trace. This patch
fixes the problem by unreserving the reserved operation when it is
completed.
Fixes: 856cc4c237 ("IB/hfi1: Add the capability for reserved operations")
Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Kaike Wan <kaike.wan@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
			
			
This commit is contained in:
		
							parent
							
								
									ff8b67fccd
								
							
						
					
					
						commit
						ca95f802ef
					
				
					 1 changed files with 2 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -1157,6 +1157,7 @@ void hfi1_rc_send_complete(struct rvt_qp *qp, struct hfi1_opa_header *opah)
 | 
			
		|||
		if (cmp_psn(wqe->lpsn, qp->s_sending_psn) >= 0 &&
 | 
			
		||||
		    cmp_psn(qp->s_sending_psn, qp->s_sending_hpsn) <= 0)
 | 
			
		||||
			break;
 | 
			
		||||
		rvt_qp_wqe_unreserve(qp, wqe);
 | 
			
		||||
		s_last = qp->s_last;
 | 
			
		||||
		trace_hfi1_qp_send_completion(qp, wqe, s_last);
 | 
			
		||||
		if (++s_last >= qp->s_size)
 | 
			
		||||
| 
						 | 
				
			
			@ -1209,6 +1210,7 @@ static struct rvt_swqe *do_rc_completion(struct rvt_qp *qp,
 | 
			
		|||
		u32 s_last;
 | 
			
		||||
 | 
			
		||||
		rvt_put_swqe(wqe);
 | 
			
		||||
		rvt_qp_wqe_unreserve(qp, wqe);
 | 
			
		||||
		s_last = qp->s_last;
 | 
			
		||||
		trace_hfi1_qp_send_completion(qp, wqe, s_last);
 | 
			
		||||
		if (++s_last >= qp->s_size)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue