mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-29 13:53:33 +00:00
RDMA/rxe: Fix extra copies in build_rdma_network_hdr
build_rdma_network_hdr() in rxe_resp.c does more copying than is
needed. Remove this subroutine and eliminate the extra copies for IPV6 and
reduce the extra copying for IPV4.
Fixes: e404f945a6
("IB/rxe: improved debug prints & code cleanup")
Link: https://lore.kernel.org/r/20210618045742.204195-4-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
230bb836ee
commit
1993cbed65
1 changed files with 12 additions and 17 deletions
|
@ -785,18 +785,6 @@ static enum resp_states read_reply(struct rxe_qp *qp,
|
|||
return state;
|
||||
}
|
||||
|
||||
static void build_rdma_network_hdr(union rdma_network_hdr *hdr,
|
||||
struct rxe_pkt_info *pkt)
|
||||
{
|
||||
struct sk_buff *skb = PKT_TO_SKB(pkt);
|
||||
|
||||
memset(hdr, 0, sizeof(*hdr));
|
||||
if (skb->protocol == htons(ETH_P_IP))
|
||||
memcpy(&hdr->roce4grh, ip_hdr(skb), sizeof(hdr->roce4grh));
|
||||
else if (skb->protocol == htons(ETH_P_IPV6))
|
||||
memcpy(&hdr->ibgrh, ipv6_hdr(skb), sizeof(hdr->ibgrh));
|
||||
}
|
||||
|
||||
static int invalidate_rkey(struct rxe_qp *qp, u32 rkey)
|
||||
{
|
||||
if (rkey_is_mw(rkey))
|
||||
|
@ -811,16 +799,23 @@ static int invalidate_rkey(struct rxe_qp *qp, u32 rkey)
|
|||
static enum resp_states execute(struct rxe_qp *qp, struct rxe_pkt_info *pkt)
|
||||
{
|
||||
enum resp_states err;
|
||||
struct sk_buff *skb = PKT_TO_SKB(pkt);
|
||||
union rdma_network_hdr hdr;
|
||||
|
||||
if (pkt->mask & RXE_SEND_MASK) {
|
||||
if (qp_type(qp) == IB_QPT_UD ||
|
||||
qp_type(qp) == IB_QPT_SMI ||
|
||||
qp_type(qp) == IB_QPT_GSI) {
|
||||
union rdma_network_hdr hdr;
|
||||
|
||||
build_rdma_network_hdr(&hdr, pkt);
|
||||
|
||||
err = send_data_in(qp, &hdr, sizeof(hdr));
|
||||
if (skb->protocol == htons(ETH_P_IP)) {
|
||||
memset(&hdr.reserved, 0,
|
||||
sizeof(hdr.reserved));
|
||||
memcpy(&hdr.roce4grh, ip_hdr(skb),
|
||||
sizeof(hdr.roce4grh));
|
||||
err = send_data_in(qp, &hdr, sizeof(hdr));
|
||||
} else {
|
||||
err = send_data_in(qp, ipv6_hdr(skb),
|
||||
sizeof(hdr));
|
||||
}
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue