When responder processed an Atomic requeset and got a NAK, the opcode field in BTH should be ATOMIC Acknowledge instead of Acknowledge. Signed-off-by: Xiao Yang <yangx.jy@xxxxxxxxxxx> --- drivers/infiniband/sw/rxe/rxe_resp.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c b/drivers/infiniband/sw/rxe/rxe_resp.c index 265e46fe050f..592d73c37d48 100644 --- a/drivers/infiniband/sw/rxe/rxe_resp.c +++ b/drivers/infiniband/sw/rxe/rxe_resp.c @@ -1080,10 +1080,10 @@ static enum resp_states acknowledge(struct rxe_qp *qp, if (qp_type(qp) != IB_QPT_RC) return RESPST_CLEANUP; - if (qp->resp.aeth_syndrome != AETH_ACK_UNLIMITED) + if (pkt->mask & RXE_ATOMIC_MASK) + send_atomic_ack(qp, qp->resp.aeth_syndrome, pkt->psn); + else if (qp->resp.aeth_syndrome != AETH_ACK_UNLIMITED) send_ack(qp, qp->resp.aeth_syndrome, pkt->psn); - else if (pkt->mask & RXE_ATOMIC_MASK) - send_atomic_ack(qp, AETH_ACK_UNLIMITED, pkt->psn); else if (bth_ack(pkt)) send_ack(qp, AETH_ACK_UNLIMITED, pkt->psn); -- 2.34.1