RDMA/rxe: Add send_common_ack() helper
Most code in send_ack() and send_atomic_ack() are duplicate, move them to a new helper send_common_ack(). In newer IBA spec, some opcodes require acknowledge with a zero-length read response, with this new helper, we can easily implement it later. Link: https://lore.kernel.org/r/1659335010-2-1-git-send-email-lizhijian@fujitsu.com Signed-off-by: Li Zhijian <lizhijian@fujitsu.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
parent
b300729b77
commit
f994ae0a14
@ -1024,50 +1024,41 @@ finish:
|
||||
return RESPST_CLEANUP;
|
||||
}
|
||||
|
||||
static int send_ack(struct rxe_qp *qp, u8 syndrome, u32 psn)
|
||||
|
||||
static int send_common_ack(struct rxe_qp *qp, u8 syndrome, u32 psn,
|
||||
int opcode, const char *msg)
|
||||
{
|
||||
int err = 0;
|
||||
int err;
|
||||
struct rxe_pkt_info ack_pkt;
|
||||
struct sk_buff *skb;
|
||||
|
||||
skb = prepare_ack_packet(qp, &ack_pkt, IB_OPCODE_RC_ACKNOWLEDGE,
|
||||
0, psn, syndrome);
|
||||
if (!skb) {
|
||||
err = -ENOMEM;
|
||||
goto err1;
|
||||
}
|
||||
skb = prepare_ack_packet(qp, &ack_pkt, opcode, 0, psn, syndrome);
|
||||
if (!skb)
|
||||
return -ENOMEM;
|
||||
|
||||
err = rxe_xmit_packet(qp, &ack_pkt, skb);
|
||||
if (err)
|
||||
pr_err_ratelimited("Failed sending ack\n");
|
||||
pr_err_ratelimited("Failed sending %s\n", msg);
|
||||
|
||||
err1:
|
||||
return err;
|
||||
}
|
||||
|
||||
static int send_ack(struct rxe_qp *qp, u8 syndrome, u32 psn)
|
||||
{
|
||||
return send_common_ack(qp, syndrome, psn,
|
||||
IB_OPCODE_RC_ACKNOWLEDGE, "ACK");
|
||||
}
|
||||
|
||||
static int send_atomic_ack(struct rxe_qp *qp, u8 syndrome, u32 psn)
|
||||
{
|
||||
int err = 0;
|
||||
struct rxe_pkt_info ack_pkt;
|
||||
struct sk_buff *skb;
|
||||
|
||||
skb = prepare_ack_packet(qp, &ack_pkt, IB_OPCODE_RC_ATOMIC_ACKNOWLEDGE,
|
||||
0, psn, syndrome);
|
||||
if (!skb) {
|
||||
err = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
|
||||
err = rxe_xmit_packet(qp, &ack_pkt, skb);
|
||||
if (err)
|
||||
pr_err_ratelimited("Failed sending atomic ack\n");
|
||||
int ret = send_common_ack(qp, syndrome, psn,
|
||||
IB_OPCODE_RC_ATOMIC_ACKNOWLEDGE, "ATOMIC ACK");
|
||||
|
||||
/* have to clear this since it is used to trigger
|
||||
* long read replies
|
||||
*/
|
||||
qp->resp.res = NULL;
|
||||
out:
|
||||
return err;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static enum resp_states acknowledge(struct rxe_qp *qp,
|
||||
|
Loading…
x
Reference in New Issue
Block a user