Commit 82644115 authored by Bob Pearson's avatar Bob Pearson Committed by Jason Gunthorpe
Browse files

RDMA/rxe: Move atomic original value to res

Move the saved original value to the atomic responder resource.  This
replaces saving it in the qp. In preparation for merging the normal and
retry atomic responder flows.

Link: https://lore.kernel.org/r/20220606143836.3323-5-rpearsonhpe@gmail.com


Signed-off-by: default avatarBob Pearson <rpearsonhpe@gmail.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
parent 220e8428
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -579,6 +579,7 @@ static enum resp_states rxe_atomic_reply(struct rxe_qp *qp,
	enum resp_states ret;
	struct rxe_mr *mr = qp->resp.mr;
	struct resp_res *res = qp->resp.res;
	u64 value;

	if (!res) {
		res = rxe_prepare_atomic_res(qp, pkt);
@@ -599,16 +600,16 @@ static enum resp_states rxe_atomic_reply(struct rxe_qp *qp,
	}

	spin_lock_bh(&atomic_ops_lock);

	qp->resp.atomic_orig = *vaddr;
	res->atomic.orig_val = value = *vaddr;

	if (pkt->opcode == IB_OPCODE_RC_COMPARE_SWAP) {
		if (*vaddr == atmeth_comp(pkt))
			*vaddr = atmeth_swap_add(pkt);
		if (value == atmeth_comp(pkt))
			value = atmeth_swap_add(pkt);
	} else {
		*vaddr += atmeth_swap_add(pkt);
		value += atmeth_swap_add(pkt);
	}

	*vaddr = value;
	spin_unlock_bh(&atomic_ops_lock);

	qp->resp.msn++;
@@ -663,7 +664,7 @@ static struct sk_buff *prepare_ack_packet(struct rxe_qp *qp,
	}

	if (ack->mask & RXE_ATMACK_MASK)
		atmack_set_orig(ack, qp->resp.atomic_orig);
		atmack_set_orig(ack, qp->resp.res->atomic.orig_val);

	err = rxe_prepare(&qp->pri_av, ack, skb);
	if (err) {
+1 −1
Original line number Diff line number Diff line
@@ -156,6 +156,7 @@ struct resp_res {
	union {
		struct {
			struct sk_buff	*skb;
			u64		orig_val;
		} atomic;
		struct {
			u64		va_org;
@@ -189,7 +190,6 @@ struct rxe_resp_info {
	u32			resid;
	u32			rkey;
	u32			length;
	u64			atomic_orig;

	/* SRQ only */
	struct {