mirror of https://gitee.com/openkylin/linux.git
IB/rdmavt, IB/hfi1, IB/qib: Correct ack count for passive (RTR) QPs
The send complete for RC QPs mismanages the ack count when the responder side is only in RTR. A QP in that state cannot send requests, but it can be the target for operations that elicit responses. Adjust the RC completion logic to correct the count maintenance by reflecting RECV_OK in a new state test. Reviewed-by: Kaike Wan <kaike.wan@intel.com> Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
3fc4a0906f
commit
f9215b5e53
|
@ -990,7 +990,7 @@ void hfi1_rc_send_complete(struct rvt_qp *qp, struct ib_header *hdr)
|
|||
u32 psn;
|
||||
|
||||
lockdep_assert_held(&qp->s_lock);
|
||||
if (!(ib_rvt_state_ops[qp->state] & RVT_PROCESS_OR_FLUSH_SEND))
|
||||
if (!(ib_rvt_state_ops[qp->state] & RVT_SEND_OR_FLUSH_OR_RECV_OK))
|
||||
return;
|
||||
|
||||
/* Find out where the BTH is */
|
||||
|
|
|
@ -895,7 +895,7 @@ void qib_rc_send_complete(struct rvt_qp *qp, struct ib_header *hdr)
|
|||
u32 opcode;
|
||||
u32 psn;
|
||||
|
||||
if (!(ib_rvt_state_ops[qp->state] & RVT_PROCESS_OR_FLUSH_SEND))
|
||||
if (!(ib_rvt_state_ops[qp->state] & RVT_SEND_OR_FLUSH_OR_RECV_OK))
|
||||
return;
|
||||
|
||||
/* Find out where the BTH is */
|
||||
|
|
|
@ -144,6 +144,8 @@
|
|||
#define RVT_FLUSH_RECV 0x40
|
||||
#define RVT_PROCESS_OR_FLUSH_SEND \
|
||||
(RVT_PROCESS_SEND_OK | RVT_FLUSH_SEND)
|
||||
#define RVT_SEND_OR_FLUSH_OR_RECV_OK \
|
||||
(RVT_PROCESS_SEND_OK | RVT_FLUSH_SEND | RVT_PROCESS_RECV_OK)
|
||||
|
||||
/*
|
||||
* Internal send flags
|
||||
|
|
Loading…
Reference in New Issue