RDMA/rxe: Add a responder state for atomic reply
Add a responder state for atomic reply similar to read reply and rename process_atomic() rxe_atomic_reply(). In preparation for merging the normal and retry atomic responder flows. Link: https://lore.kernel.org/r/20220606143836.3323-3-rpearsonhpe@gmail.com Signed-off-by: Bob Pearson <rpearsonhpe@gmail.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
parent
24f0ab0102
commit
0ed5493e43
@ -21,6 +21,7 @@ enum resp_states {
|
||||
RESPST_CHK_RKEY,
|
||||
RESPST_EXECUTE,
|
||||
RESPST_READ_REPLY,
|
||||
RESPST_ATOMIC_REPLY,
|
||||
RESPST_COMPLETE,
|
||||
RESPST_ACKNOWLEDGE,
|
||||
RESPST_CLEANUP,
|
||||
@ -55,6 +56,7 @@ static char *resp_state_name[] = {
|
||||
[RESPST_CHK_RKEY] = "CHK_RKEY",
|
||||
[RESPST_EXECUTE] = "EXECUTE",
|
||||
[RESPST_READ_REPLY] = "READ_REPLY",
|
||||
[RESPST_ATOMIC_REPLY] = "ATOMIC_REPLY",
|
||||
[RESPST_COMPLETE] = "COMPLETE",
|
||||
[RESPST_ACKNOWLEDGE] = "ACKNOWLEDGE",
|
||||
[RESPST_CLEANUP] = "CLEANUP",
|
||||
@ -552,8 +554,8 @@ out:
|
||||
/* Guarantee atomicity of atomic operations at the machine level. */
|
||||
static DEFINE_SPINLOCK(atomic_ops_lock);
|
||||
|
||||
static enum resp_states process_atomic(struct rxe_qp *qp,
|
||||
struct rxe_pkt_info *pkt)
|
||||
static enum resp_states rxe_atomic_reply(struct rxe_qp *qp,
|
||||
struct rxe_pkt_info *pkt)
|
||||
{
|
||||
u64 *vaddr;
|
||||
enum resp_states ret;
|
||||
@ -585,7 +587,16 @@ static enum resp_states process_atomic(struct rxe_qp *qp,
|
||||
|
||||
spin_unlock_bh(&atomic_ops_lock);
|
||||
|
||||
ret = RESPST_NONE;
|
||||
qp->resp.msn++;
|
||||
|
||||
/* next expected psn, read handles this separately */
|
||||
qp->resp.psn = (pkt->psn + 1) & BTH_PSN_MASK;
|
||||
qp->resp.ack_psn = qp->resp.psn;
|
||||
|
||||
qp->resp.opcode = pkt->opcode;
|
||||
qp->resp.status = IB_WC_SUCCESS;
|
||||
|
||||
ret = RESPST_ACKNOWLEDGE;
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
@ -857,9 +868,7 @@ static enum resp_states execute(struct rxe_qp *qp, struct rxe_pkt_info *pkt)
|
||||
qp->resp.msn++;
|
||||
return RESPST_READ_REPLY;
|
||||
} else if (pkt->mask & RXE_ATOMIC_MASK) {
|
||||
err = process_atomic(qp, pkt);
|
||||
if (err)
|
||||
return err;
|
||||
return RESPST_ATOMIC_REPLY;
|
||||
} else {
|
||||
/* Unreachable */
|
||||
WARN_ON_ONCE(1);
|
||||
@ -1323,6 +1332,9 @@ int rxe_responder(void *arg)
|
||||
case RESPST_READ_REPLY:
|
||||
state = read_reply(qp, pkt);
|
||||
break;
|
||||
case RESPST_ATOMIC_REPLY:
|
||||
state = rxe_atomic_reply(qp, pkt);
|
||||
break;
|
||||
case RESPST_ACKNOWLEDGE:
|
||||
state = acknowledge(qp, pkt);
|
||||
break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user