mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-23 20:24:12 +08:00
RDMA/vmw_pvrdma: Fix network_hdr_type reported in WC
The PVRDMA device HW interface defines network_hdr_type according to an
old definition of the internal kernel rdma_network_type enum that has
since changed, resulting in the wrong rdma_network_type being reported.
Fix this by explicitly defining the enum used by the PVRDMA device and
adding a function to convert the pvrdma_network_type to rdma_network_type
enum.
Cc: stable@vger.kernel.org # 5.10+
Fixes: 1c15b4f2a4
("RDMA/core: Modify enum ib_gid_type and enum rdma_network_type")
Link: https://lore.kernel.org/r/1611026189-17943-1-git-send-email-bryantan@vmware.com
Reviewed-by: Adit Ranadive <aditr@vmware.com>
Signed-off-by: Bryan Tan <bryantan@vmware.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
parent
a372173bf3
commit
9f206f7398
@ -509,6 +509,20 @@ static inline int ib_send_flags_to_pvrdma(int flags)
|
||||
return flags & PVRDMA_MASK(PVRDMA_SEND_FLAGS_MAX);
|
||||
}
|
||||
|
||||
static inline int pvrdma_network_type_to_ib(enum pvrdma_network_type type)
|
||||
{
|
||||
switch (type) {
|
||||
case PVRDMA_NETWORK_ROCE_V1:
|
||||
return RDMA_NETWORK_ROCE_V1;
|
||||
case PVRDMA_NETWORK_IPV4:
|
||||
return RDMA_NETWORK_IPV4;
|
||||
case PVRDMA_NETWORK_IPV6:
|
||||
return RDMA_NETWORK_IPV6;
|
||||
default:
|
||||
return RDMA_NETWORK_IPV6;
|
||||
}
|
||||
}
|
||||
|
||||
void pvrdma_qp_cap_to_ib(struct ib_qp_cap *dst,
|
||||
const struct pvrdma_qp_cap *src);
|
||||
void ib_qp_cap_to_pvrdma(struct pvrdma_qp_cap *dst,
|
||||
|
@ -367,7 +367,7 @@ retry:
|
||||
wc->dlid_path_bits = cqe->dlid_path_bits;
|
||||
wc->port_num = cqe->port_num;
|
||||
wc->vendor_err = cqe->vendor_err;
|
||||
wc->network_hdr_type = cqe->network_hdr_type;
|
||||
wc->network_hdr_type = pvrdma_network_type_to_ib(cqe->network_hdr_type);
|
||||
|
||||
/* Update shared ring state */
|
||||
pvrdma_idx_ring_inc(&cq->ring_state->rx.cons_head, cq->ibcq.cqe);
|
||||
|
@ -133,6 +133,13 @@ enum pvrdma_wc_flags {
|
||||
PVRDMA_WC_FLAGS_MAX = PVRDMA_WC_WITH_NETWORK_HDR_TYPE,
|
||||
};
|
||||
|
||||
enum pvrdma_network_type {
|
||||
PVRDMA_NETWORK_IB,
|
||||
PVRDMA_NETWORK_ROCE_V1 = PVRDMA_NETWORK_IB,
|
||||
PVRDMA_NETWORK_IPV4,
|
||||
PVRDMA_NETWORK_IPV6
|
||||
};
|
||||
|
||||
struct pvrdma_alloc_ucontext_resp {
|
||||
__u32 qp_tab_size;
|
||||
__u32 reserved;
|
||||
|
Loading…
Reference in New Issue
Block a user