lkml.org 
[lkml]   [2022]   [Aug]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.19 0753/1157] RDMA/rxe: Add a responder state for atomic reply
    Date
    From: Bob Pearson <rpearsonhpe@gmail.com>

    [ Upstream commit 0ed5493e430a1d887eb62b45c75dd5d6bb2dcf48 ]

    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>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/infiniband/sw/rxe/rxe_resp.c | 24 ++++++++++++++++++------
    1 file changed, 18 insertions(+), 6 deletions(-)

    diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c b/drivers/infiniband/sw/rxe/rxe_resp.c
    index f4f6ee5d81fe..e38bf958ab48 100644
    --- a/drivers/infiniband/sw/rxe/rxe_resp.c
    +++ b/drivers/infiniband/sw/rxe/rxe_resp.c
    @@ -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 @@ static enum resp_states write_data_in(struct rxe_qp *qp,
    /* 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;
    }
    @@ -858,9 +869,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);
    @@ -1316,6 +1325,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;
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-08-16 02:23    [W:3.761 / U:0.372 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site