RDMA/vmw_pvrdma: Patches for 4.14
Subsystems (2)
cover RDMA/vmw_pvrdma: Patches for 4.14
Hi Doug,
Here are a couple more patches for the VMware PVRDMA driver for 4.14. These are based on your for-next branch.
Thanks,
Adit
---
Adit Ranadive (1):
RDMA/vmw_pvrdma: Fix a signedness
Aditya Sarwade (1):
RDMA/vmw_pvrdma: Report network header type in WC
drivers/infiniband/hw/vmw_pvrdma/pvrdma.h | 6 ++++++ drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c | 4 +++- include/uapi/rdma/vmw_pvrdma-abi.h | 13 +++++++++++-- 3 files changed, 20 insertions(+), 3 deletions(-)
Signature · 6 lines
2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): cover.1503965717.git.aditr-pghWNbHTmq7QT0dZR+AlfA@public.gmane.org
PATCH 1/2 RDMA/vmw_pvrdma: Report network header type in WC
From: Aditya Sarwade <[email protected]>
We should report the network header type in the work completion so that the kernel can infer the right RoCE type headers.
--- drivers/infiniband/hw/vmw_pvrdma/pvrdma.h | 6 ++++++ drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c | 2 ++ include/uapi/rdma/vmw_pvrdma-abi.h | 13 +++++++++++-- 3 files changed, 19 insertions(+), 2 deletions(-)
drivers/infiniband/hw/vmw_pvrdma/pvrdma.h +6 -0
@@ -426,6 +426,12 @@ static inline int pvrdma_wc_flags_to_ib(int flags)return flags; } +static inline enum rdma_network_type pvrdma_wc_network_hdr_to_ib ( +enum pvrdma_network_type type) +{ +return (enum rdma_network_type )type; +} +static inline int ib_send_flags_to_pvrdma (int flags) {return flags &PVRDMA_MASK (PVRDMA_SEND_FLAGS_MAX );
drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c +2 -0
@@ -389,6 +389,8 @@ static int pvrdma_poll_one(struct pvrdma_cq *cq, struct pvrdma_qp **cur_qp, wc->dlid_path_bits = cqe->dlid_path_bits; wc->port_num = cqe->port_num; wc->vendor_err = cqe->vendor_err; + wc->network_hdr_type = +pvrdma_wc_network_hdr_to_ib (cqe->network_hdr_type);/* Update shared ring state */ pvrdma_idx_ring_inc (&cq->ring_state->rx.cons_head, cq->ibcq.cqe);
include/uapi/rdma/vmw_pvrdma-abi.h +11 -2
@@ -58,6 +58,13 @@#define PVRDMA_UAR_CQ_ARM BIT(30)/* Arm bit. */ #define PVRDMA_UAR_CQ_POLL BIT(31)/* Poll bit. */ +enum pvrdma_network_type { +PVRDMA_NETWORK_IB , +PVRDMA_NETWORK_ROCE_V1 =PVRDMA_NETWORK_IB , +PVRDMA_NETWORK_IPV4 , +PVRDMA_NETWORK_IPV6 +}; +enum pvrdma_wr_opcode {PVRDMA_WR_RDMA_WRITE ,PVRDMA_WR_RDMA_WRITE_WITH_IMM ,
@@ -125,7 +132,8 @@ enum pvrdma_wc_flags {PVRDMA_WC_IP_CSUM_OK =1 <<3 ,PVRDMA_WC_WITH_SMAC =1 <<4 ,PVRDMA_WC_WITH_VLAN =1 <<5 , - PVRDMA_WC_FLAGS_MAX = PVRDMA_WC_WITH_VLAN, +PVRDMA_WC_WITH_NETWORK_HDR_TYPE =1 <<6 , + PVRDMA_WC_FLAGS_MAX = PVRDMA_WC_WITH_NETWORK_HDR_TYPE, }; struct pvrdma_alloc_ucontext_resp {
@@ -283,7 +291,8 @@ struct pvrdma_cqe {__u8 dlid_path_bits;__u8 port_num;__u8 smac[6 ]; - __u8 reserved2[7]; /* Pad to next power of 2 (64). */ +__u8 network_hdr_type; + __u8 reserved2[6]; /* Pad to next power of 2 (64). */ };#endif /* __VMW_PVRDMA_ABI_H__ */
Signature · 6 lines
2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 521f5e2169789e31a7e91dab691cd155f0100090.1503965717.git.aditr-pghWNbHTmq7QT0dZR+AlfA@public.gmane.org
Re: [PATCH for-next 1/2] RDMA/vmw_pvrdma: Report network header type in WC
Quoted 49 lines · Adit Ranadive
From: Aditya Sarwade <[email protected]>
We should report the network header type in the work completion so that the kernel can infer the right RoCE type headers.
Reviewed-by Bryan Tan <[email protected]>Signed-off-by Aditya Sarwade <[email protected]>Signed-off-by Adit Ranadive <[email protected]>--- drivers/infiniband/hw/vmw_pvrdma/pvrdma.h | 6 ++++++ drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c | 2 ++ include/uapi/rdma/vmw_pvrdma-abi.h | 13 +++++++++++-- 3 files changed, 19 insertions(+), 2 deletions(-)drivers/infiniband/hw/vmw_pvrdma/pvrdma.h +6
-0@@ -426,6 +426,12 @@ static inline int pvrdma_wc_flags_to_ib(int flags)return flags; } +static inline enum rdma_network_type pvrdma_wc_network_hdr_to_ib ( +enum pvrdma_network_type type) +{ +return (enum rdma_network_type )type; +} +static inline int ib_send_flags_to_pvrdma (int flags) {return flags &PVRDMA_MASK (PVRDMA_SEND_FLAGS_MAX );drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c +2
-0@@ -389,6 +389,8 @@ static int pvrdma_poll_one(struct pvrdma_cq *cq, struct pvrdma_qp **cur_qp, wc->dlid_path_bits = cqe->dlid_path_bits; wc->port_num = cqe->port_num; wc->vendor_err = cqe->vendor_err; + wc->network_hdr_type = +pvrdma_wc_network_hdr_to_ib (cqe->network_hdr_type);/* Update shared ring state */ pvrdma_idx_ring_inc (&cq->ring_state->rx.cons_head, cq->ibcq.cqe);include/uapi/rdma/vmw_pvrdma-abi.h +0
-0
include/uapi/rdma/vmw_pvrdma-abi.h line 66
Quoted 9 lines
include/uapi/rdma/vmw_pvrdma-abi.h +6
-0@@ -58,6 +58,13 @@#define PVRDMA_UAR_CQ_ARM BIT(30)/* Arm bit. */ #define PVRDMA_UAR_CQ_POLL BIT(31)/* Poll bit. */ +enum pvrdma_network_type { +PVRDMA_NETWORK_IB , +PVRDMA_NETWORK_ROCE_V1 =PVRDMA_NETWORK_IB , +PVRDMA_NETWORK_IPV4 , +PVRDMA_NETWORK_IPV6 +};
Doug,
I see that you are already merged this patch, but it is problematic patch.
They defined in uapi file, the new enum which is equal to already existed
128 enum rdma_network_type {
129 RDMA_NETWORK_IB, 130 RDMA_NETWORK_ROCE_V1 = RDMA_NETWORK_IB, 131 RDMA_NETWORK_IPV4, 132 RDMA_NETWORK_IPV6
133 };
And the more important they are doing direct casting from rdma_network_type to pvrdma_network_type as is in the same patch.
The proper way to do it is to return rdma_network_type directly without obfuscation and without creating new supported forever UAPI enum.
Quoted 31 lines
include/uapi/rdma/vmw_pvrdma-abi.h +5
-3+enum pvrdma_wr_opcode {PVRDMA_WR_RDMA_WRITE ,PVRDMA_WR_RDMA_WRITE_WITH_IMM ,@@ -125,7 +132,8 @@ enum pvrdma_wc_flags {PVRDMA_WC_IP_CSUM_OK =1 <<3 ,PVRDMA_WC_WITH_SMAC =1 <<4 ,PVRDMA_WC_WITH_VLAN =1 <<5 , - PVRDMA_WC_FLAGS_MAX = PVRDMA_WC_WITH_VLAN, +PVRDMA_WC_WITH_NETWORK_HDR_TYPE =1 <<6 , + PVRDMA_WC_FLAGS_MAX = PVRDMA_WC_WITH_NETWORK_HDR_TYPE, }; struct pvrdma_alloc_ucontext_resp {@@ -283,7 +291,8 @@ struct pvrdma_cqe {__u8 dlid_path_bits;__u8 port_num;__u8 smac[6 ]; -__u8 reserved2[7 ];/* Pad to next power of 2 (64). */ +__u8 network_hdr_type; + __u8 reserved2[6]; /* Pad to next power of 2 (64). */ };#endif /* __VMW_PVRDMA_ABI_H__ */ --2.7.4
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20170829054533.GH23726-U/[email protected]
Re: [PATCH for-next 1/2] RDMA/vmw_pvrdma: Report network header type in WC
Quoted 73 lines · Leon Romanovsky
Quoted 63 lines · Adit Ranadive
From: Aditya Sarwade <[email protected]>
We should report the network header type in the work completion so that
the kernel can infer the right RoCE type headers.Reviewed-by Bryan Tan <[email protected]>Signed-off-by Aditya Sarwade <[email protected]>Signed-off-by Adit Ranadive <[email protected]>--- drivers/infiniband/hw/vmw_pvrdma/pvrdma.h | 6 ++++++ drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c | 2 ++ include/uapi/rdma/vmw_pvrdma-abi.h | 13 +++++++++++-- 3 files changed, 19 insertions(+), 2 deletions(-)drivers/infiniband/hw/vmw_pvrdma/pvrdma.h +6
-0@@ -426,6 +426,12 @@ static inline int pvrdma_wc_flags_to_ib(int flags)return flags; } +static inline enum rdma_network_type pvrdma_wc_network_hdr_to_ib ( +enum pvrdma_network_type type) +{ +return (enum rdma_network_type )type; +} +static inline int ib_send_flags_to_pvrdma (int flags){
drivers/infiniband/hw/vmw_pvrdma/pvrdma.h +0
-0return flags &PVRDMA_MASK (PVRDMA_SEND_FLAGS_MAX );drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c +2
-0@@ -389,6 +389,8 @@ static int pvrdma_poll_one(struct pvrdma_cq *cq, struct pvrdma_qp **cur_qp, wc->dlid_path_bits = cqe->dlid_path_bits; wc->port_num = cqe->port_num; wc->vendor_err = cqe->vendor_err; + wc->network_hdr_type = +pvrdma_wc_network_hdr_to_ib (cqe- >network_hdr_type);drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c +0
-0/* Update shared ring state */ pvrdma_idx_ring_inc(&cq->ring_state->rx.cons_head, cq-Quoted 1 line
ibcq.cqe);
include/uapi/rdma/vmw_pvrdma-abi.h +0
-0@@ -58,6 +58,13 @@#define PVRDMA_UAR_CQ_ARM BIT(30)/* Arm bit. */
#definePVRDMA_UAR_CQ_POLLBIT(31) /
* Poll bit. */include/uapi/rdma/vmw_pvrdma-abi.h line 66
Quoted 6 lines
include/uapi/rdma/vmw_pvrdma-abi.h +6
-0+enum pvrdma_network_type { +PVRDMA_NETWORK_IB , +PVRDMA_NETWORK_ROCE_V1 =PVRDMA_NETWORK_IB , +PVRDMA_NETWORK_IPV4 , +PVRDMA_NETWORK_IPV6 +};Doug,
Quoted 2 lines
I see that you are already merged this patch, but it is problematic patch.
It's only gone to github, so it's not set in stone.
Quoted 9 lines
They defined in uapi file, the new enum which is equal to already existed
128 enumrdma_network_type{129 RDMA_NETWORK_IB, 130 RDMA_NETWORK_ROCE_V1 = RDMA_NETWORK_IB, 131 RDMA_NETWORK_IPV4, 132 RDMA_NETWORK_IPV6133 };
Quoted 7 lines
And the more important they are doing direct casting from
rdma_network_typetopvrdma_network_typeas is in the same patch.The proper way to do it is to return
rdma_network_typedirectly without obfuscation
and without creating new supported forever UAPI enum.
Generally, I would agree with you. I guess that's what I get for trying to get everything done and working late last night :-/.
Adit, is there a reason for the duplicate enum and silly casting in this patch? If there isn't a specific reason for it, then it would be best to re-write it without this silliness.
Signature · 8 lines
Doug Ledford <[email protected]> GPG KeyID: B826A3330E572FDD Key fingerprint = AE6B 1BDA 122B 23B4 265B 1274 B826 A333 0E57 2FDD -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 1504014883.52034.33.camel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Re: [PATCH for-next 1/2] RDMA/vmw_pvrdma: Report network header type in WC
Quoted 96 lines · Doug Ledford
Quoted 73 lines · Leon Romanovsky
Quoted 63 lines · Adit Ranadive
From: Aditya Sarwade <[email protected]>
We should report the network header type in the work completion so that
the kernel can infer the right RoCE type headers.Reviewed-by Bryan Tan <[email protected]>Signed-off-by Aditya Sarwade <[email protected]>Signed-off-by Adit Ranadive <[email protected]>--- drivers/infiniband/hw/vmw_pvrdma/pvrdma.h | 6 ++++++ drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c | 2 ++ include/uapi/rdma/vmw_pvrdma-abi.h | 13 +++++++++++-- 3 files changed, 19 insertions(+), 2 deletions(-)drivers/infiniband/hw/vmw_pvrdma/pvrdma.h +6
-0@@ -426,6 +426,12 @@ static inline int pvrdma_wc_flags_to_ib(int flags)return flags; } +static inline enum rdma_network_type pvrdma_wc_network_hdr_to_ib ( +enum pvrdma_network_type type) +{ +return (enum rdma_network_type )type; +} +static inline int ib_send_flags_to_pvrdma (int flags){
drivers/infiniband/hw/vmw_pvrdma/pvrdma.h +0
-0return flags &PVRDMA_MASK (PVRDMA_SEND_FLAGS_MAX );drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c +2
-0@@ -389,6 +389,8 @@ static int pvrdma_poll_one(struct pvrdma_cq *cq, struct pvrdma_qp **cur_qp, wc->dlid_path_bits = cqe->dlid_path_bits; wc->port_num = cqe->port_num; wc->vendor_err = cqe->vendor_err; + wc->network_hdr_type = +pvrdma_wc_network_hdr_to_ib (cqe- > network_hdr_type);drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c +0
-0/* Update shared ring state */ pvrdma_idx_ring_inc(&cq->ring_state->rx.cons_head, cq-Quoted 1 line
ibcq.cqe);
include/uapi/rdma/vmw_pvrdma-abi.h +0
-0@@ -58,6 +58,13 @@#define PVRDMA_UAR_CQ_ARM BIT(30)/* Arm bit. */
#definePVRDMA_UAR_CQ_POLLBIT(31) /
* Poll bit. */include/uapi/rdma/vmw_pvrdma-abi.h line 66
Quoted 6 lines
include/uapi/rdma/vmw_pvrdma-abi.h +6
-0+enum pvrdma_network_type { +PVRDMA_NETWORK_IB , +PVRDMA_NETWORK_ROCE_V1 =PVRDMA_NETWORK_IB , +PVRDMA_NETWORK_IPV4 , +PVRDMA_NETWORK_IPV6 +};Doug,
Quoted 2 lines
I see that you are already merged this patch, but it is problematic patch.
It's only gone to github, so it's not set in stone.
Quoted 9 lines
They defined in uapi file, the new enum which is equal to already existed
128 enumrdma_network_type{129 RDMA_NETWORK_IB, 130 RDMA_NETWORK_ROCE_V1 = RDMA_NETWORK_IB, 131 RDMA_NETWORK_IPV4, 132 RDMA_NETWORK_IPV6133 };
Quoted 7 lines
And the more important they are doing direct casting from
rdma_network_typetopvrdma_network_typeas is in the same patch.The proper way to do it is to return
rdma_network_typedirectly without obfuscation
and without creating new supported forever UAPI enum.
Quoted 6 lines
Generally, I would agree with you. I guess that's what I get for trying to get everything done and working late last night :-/.
Adit, is there a reason for the duplicate enum and silly casting in this patch? If there isn't a specific reason for it, then it would be best to re-write it without this silliness.
Thanks Leon, Doug. Well, we were only keeping it consistent with what we do for our other device <-> driver interactions. We can probably remove the enum and directly assign the network_hdr_type from our cqe to the IB stack's WC.
Doug, let me know if you prefer a v1 of this patch series or a patch that just removes the enum.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH for-next 1/2] RDMA/vmw_pvrdma: Report network header type in WC
In reply to a message not in the archiveQuoted 96 lines · Doug Ledford
Quoted 73 lines · Leon Romanovsky
Quoted 63 lines · Adit Ranadive
From: Aditya Sarwade <[email protected]>
We should report the network header type in the work completion so that
the kernel can infer the right RoCE type headers.Reviewed-by Bryan Tan <[email protected]>Signed-off-by Aditya Sarwade <[email protected]>Signed-off-by Adit Ranadive <[email protected]>--- drivers/infiniband/hw/vmw_pvrdma/pvrdma.h | 6 ++++++ drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c | 2 ++ include/uapi/rdma/vmw_pvrdma-abi.h | 13 +++++++++++-- 3 files changed, 19 insertions(+), 2 deletions(-)drivers/infiniband/hw/vmw_pvrdma/pvrdma.h +6
-0@@ -426,6 +426,12 @@ static inline int pvrdma_wc_flags_to_ib(int flags)return flags; } +static inline enum rdma_network_type pvrdma_wc_network_hdr_to_ib ( +enum pvrdma_network_type type) +{ +return (enum rdma_network_type )type; +} +static inline int ib_send_flags_to_pvrdma (int flags){
drivers/infiniband/hw/vmw_pvrdma/pvrdma.h +0
-0return flags &PVRDMA_MASK (PVRDMA_SEND_FLAGS_MAX );drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c +2
-0@@ -389,6 +389,8 @@ static int pvrdma_poll_one(struct pvrdma_cq *cq, struct pvrdma_qp **cur_qp, wc->dlid_path_bits = cqe->dlid_path_bits; wc->port_num = cqe->port_num; wc->vendor_err = cqe->vendor_err; + wc->network_hdr_type = +pvrdma_wc_network_hdr_to_ib (cqe- > network_hdr_type);drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c +0
-0/* Update shared ring state */ pvrdma_idx_ring_inc(&cq->ring_state->rx.cons_head, cq-Quoted 1 line
ibcq.cqe);
include/uapi/rdma/vmw_pvrdma-abi.h +0
-0@@ -58,6 +58,13 @@#define PVRDMA_UAR_CQ_ARM BIT(30)/* Arm bit. */
#definePVRDMA_UAR_CQ_POLLBIT(31) /
* Poll bit. */include/uapi/rdma/vmw_pvrdma-abi.h line 66
Quoted 6 lines
include/uapi/rdma/vmw_pvrdma-abi.h +6
-0+enum pvrdma_network_type { +PVRDMA_NETWORK_IB , +PVRDMA_NETWORK_ROCE_V1 =PVRDMA_NETWORK_IB , +PVRDMA_NETWORK_IPV4 , +PVRDMA_NETWORK_IPV6 +};Doug,
Quoted 2 lines
I see that you are already merged this patch, but it is problematic patch.
It's only gone to github, so it's not set in stone.
Quoted 9 lines
They defined in uapi file, the new enum which is equal to already existed
128 enumrdma_network_type{129 RDMA_NETWORK_IB, 130 RDMA_NETWORK_ROCE_V1 = RDMA_NETWORK_IB, 131 RDMA_NETWORK_IPV4, 132 RDMA_NETWORK_IPV6133 };
Quoted 7 lines
And the more important they are doing direct casting from
rdma_network_typetopvrdma_network_typeas is in the same patch.The proper way to do it is to return
rdma_network_typedirectly without obfuscation
and without creating new supported forever UAPI enum.
Quoted 6 lines
Generally, I would agree with you. I guess that's what I get for trying to get everything done and working late last night :-/.
Adit, is there a reason for the duplicate enum and silly casting in this patch? If there isn't a specific reason for it, then it would be best to re-write it without this silliness.
Doug, sorry to go back and forth on this. We had an internal discussion on this. Jorgen pointed out that having the enum is to isolate our device from future changes to rdma_network_type. Our enum reflects the device value independent of the RDMA stack and does need to be converted (even though the values are the same and we don't return the rdma_network_type enum from our device anyways).
Instead of dropping this enum we would like to just drop the casting and move to a switch case to make the conversion clearer.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 1164391a-01e3-f067-10c8-61d70bd22b2e-pghWNbHTmq7QT0dZR+AlfA@public.gmane.org
Re: [PATCH for-next 1/2] RDMA/vmw_pvrdma: Report network header type in WC
Quoted 100 lines · Adit Ranadive
Quoted 99 lines · Doug Ledford
Quoted 73 lines · Leon Romanovsky
Quoted 63 lines · Adit Ranadive
From: Aditya Sarwade <[email protected]>
We should report the network header type in the work completion so that
the kernel can infer the right RoCE type headers.Reviewed-by Bryan Tan <[email protected]>Signed-off-by Aditya Sarwade <[email protected]>Signed-off-by Adit Ranadive <[email protected]>--- drivers/infiniband/hw/vmw_pvrdma/pvrdma.h | 6 ++++++ drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c | 2 ++ include/uapi/rdma/vmw_pvrdma-abi.h | 13 +++++++++++-- 3 files changed, 19 insertions(+), 2 deletions(-)drivers/infiniband/hw/vmw_pvrdma/pvrdma.h +6
-0@@ -426,6 +426,12 @@ static inline int pvrdma_wc_flags_to_ib(int flags)return flags; } +static inline enum rdma_network_type pvrdma_wc_network_hdr_to_ib ( +enum pvrdma_network_type type) +{ +return (enum rdma_network_type )type; +} +static inline int ib_send_flags_to_pvrdma (int flags){
drivers/infiniband/hw/vmw_pvrdma/pvrdma.h +0
-0return flags &PVRDMA_MASK (PVRDMA_SEND_FLAGS_MAX );drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c +2
-0@@ -389,6 +389,8 @@ static int pvrdma_poll_one(struct pvrdma_cq *cq, struct pvrdma_qp **cur_qp, wc->dlid_path_bits = cqe->dlid_path_bits; wc->port_num = cqe->port_num; wc->vendor_err = cqe->vendor_err; + wc->network_hdr_type = +pvrdma_wc_network_hdr_to_ib (cqe- > network_hdr_type);drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c +0
-0/* Update shared ring state */ pvrdma_idx_ring_inc(&cq->ring_state->rx.cons_head, cq-Quoted 1 line
ibcq.cqe);
include/uapi/rdma/vmw_pvrdma-abi.h +0
-0@@ -58,6 +58,13 @@#define PVRDMA_UAR_CQ_ARM BIT(30)/* Arm bit. */
#definePVRDMA_UAR_CQ_POLLBIT(31) /
* Poll bit. */include/uapi/rdma/vmw_pvrdma-abi.h
Quoted 6 lines
include/uapi/rdma/vmw_pvrdma-abi.h +6
-0+enum pvrdma_network_type { +PVRDMA_NETWORK_IB , +PVRDMA_NETWORK_ROCE_V1 =PVRDMA_NETWORK_IB , +PVRDMA_NETWORK_IPV4 , +PVRDMA_NETWORK_IPV6 +};Doug,
Quoted 2 lines
I see that you are already merged this patch, but it is problematic patch.
It's only gone to github, so it's not set in stone.
Quoted 9 lines
They defined in uapi file, the new enum which is equal to already existed
128 enumrdma_network_type{129 RDMA_NETWORK_IB, 130 RDMA_NETWORK_ROCE_V1 = RDMA_NETWORK_IB, 131 RDMA_NETWORK_IPV4, 132 RDMA_NETWORK_IPV6133 };
Quoted 7 lines
And the more important they are doing direct casting from
rdma_network_typetopvrdma_network_typeas is in the same patch.The proper way to do it is to return
rdma_network_typedirectly without obfuscation
and without creating new supported forever UAPI enum.Generally, I would agree with you. I guess that's what I get for trying to get everything done and working late last night :-/.
Quoted 7 lines
Quoted 3 lines
Adit, is there a reason for the duplicate enum and silly casting in this patch? If there isn't a specific reason for it, then it would be best to re-write it without this silliness.
Doug, sorry to go back and forth on this. We had an internal discussion on this. Jorgen pointed out that having the enum is to isolate our device from future changes to
rdma_network_type.
The rdma_network_type is not going to change. It might get extended, but not changed.
Quoted 6 lines
Our enum reflects the device value independent of
the RDMA stack and does need to be converted (even though the values are the same and we don't return therdma_network_typeenum from our device anyways).Instead of dropping this enum we would like to just drop the casting and move to a switch case to make the conversion clearer.
As long as you guys are returning the same thing, you can just use the enum as it is. If the enum gets updated and you don't want your driver to reflect that update, then that would be the appropriate time to create a switch or a different enum with a conversion or whatever. You would have to update your driver in that case even if you do a switch right now because you can't put in the option for the extension in your conversion function before the extension exists, so there is no savings or safety in adding a conversion that doesn't actually convert at this time.
Signature · 3 lines
Doug Ledford <[email protected]> GPG Key ID: B826A3330E572FDD Key fingerprint = AE6B 1BDA 122B 23B4 265B 1274 B826 A333 0E57 2FDD
A message that is not in the archive (sent off-list or not yet received): 7174aeee-087e-c938-e15f-f3641e170dc9-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Re: [PATCH for-next 1/2] RDMA/vmw_pvrdma: Report network header type in WC
Quoted 119 lines · Doug Ledford
Quoted 100 lines · Adit Ranadive
Quoted 99 lines · Doug Ledford
Quoted 73 lines · Leon Romanovsky
Quoted 63 lines · Adit Ranadive
From: Aditya Sarwade <[email protected]>
We should report the network header type in the work completion so that
the kernel can infer the right RoCE type headers.Reviewed-by Bryan Tan <[email protected]>Signed-off-by Aditya Sarwade <[email protected]>Signed-off-by Adit Ranadive <[email protected]>--- drivers/infiniband/hw/vmw_pvrdma/pvrdma.h | 6 ++++++ drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c | 2 ++ include/uapi/rdma/vmw_pvrdma-abi.h | 13 +++++++++++-- 3 files changed, 19 insertions(+), 2 deletions(-)drivers/infiniband/hw/vmw_pvrdma/pvrdma.h +6
-0@@ -426,6 +426,12 @@ static inline int pvrdma_wc_flags_to_ib(int flags)return flags; } +static inline enum rdma_network_type pvrdma_wc_network_hdr_to_ib ( +enum pvrdma_network_type type) +{ +return (enum rdma_network_type )type; +} +static inline int ib_send_flags_to_pvrdma (int flags){
drivers/infiniband/hw/vmw_pvrdma/pvrdma.h +0
-0return flags &PVRDMA_MASK (PVRDMA_SEND_FLAGS_MAX );drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c +2
-0@@ -389,6 +389,8 @@ static int pvrdma_poll_one(struct pvrdma_cq *cq, struct pvrdma_qp **cur_qp, wc->dlid_path_bits = cqe->dlid_path_bits; wc->port_num = cqe->port_num; wc->vendor_err = cqe->vendor_err; + wc->network_hdr_type = +pvrdma_wc_network_hdr_to_ib (cqe- > network_hdr_type);drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c +0
-0/* Update shared ring state */ pvrdma_idx_ring_inc(&cq->ring_state->rx.cons_head, cq-Quoted 1 line
ibcq.cqe);
include/uapi/rdma/vmw_pvrdma-abi.h +0
-0@@ -58,6 +58,13 @@#define PVRDMA_UAR_CQ_ARM BIT(30)/* Arm bit. */
#definePVRDMA_UAR_CQ_POLLBIT(31) /
* Poll bit. */include/uapi/rdma/vmw_pvrdma-abi.h
Quoted 6 lines
include/uapi/rdma/vmw_pvrdma-abi.h +6
-0+enum pvrdma_network_type { +PVRDMA_NETWORK_IB , +PVRDMA_NETWORK_ROCE_V1 =PVRDMA_NETWORK_IB , +PVRDMA_NETWORK_IPV4 , +PVRDMA_NETWORK_IPV6 +};Doug,
Quoted 2 lines
I see that you are already merged this patch, but it is problematic patch.
It's only gone to github, so it's not set in stone.
Quoted 9 lines
They defined in uapi file, the new enum which is equal to already existed
128 enumrdma_network_type{129 RDMA_NETWORK_IB, 130 RDMA_NETWORK_ROCE_V1 = RDMA_NETWORK_IB, 131 RDMA_NETWORK_IPV4, 132 RDMA_NETWORK_IPV6133 };
Quoted 7 lines
And the more important they are doing direct casting from
rdma_network_typetopvrdma_network_typeas is in the same patch.The proper way to do it is to return
rdma_network_typedirectly without obfuscation
and without creating new supported forever UAPI enum.Generally, I would agree with you. I guess that's what I get for trying to get everything done and working late last night :-/.
Quoted 7 lines
Quoted 3 lines
Adit, is there a reason for the duplicate enum and silly casting in this patch? If there isn't a specific reason for it, then it would be best to re-write it without this silliness.
Doug, sorry to go back and forth on this. We had an internal discussion on this. Jorgen pointed out that having the enum is to isolate our device from future changes to
rdma_network_type.The
rdma_network_typeis not going to change. It might get extended, but not changed.Quoted 6 lines
Our enum reflects the device value independent of
the RDMA stack and does need to be converted (even though the values are the same and we don't return therdma_network_typeenum from our device anyways).Instead of dropping this enum we would like to just drop the casting and move to a switch case to make the conversion clearer.
Quoted 8 lines
As long as you guys are returning the same thing, you can just use the enum as it is. If the enum gets updated and you don't want your driver to reflect that update, then that would be the appropriate time to create a switch or a different enum with a conversion or whatever. You would have to update your driver in that case even if you do a switch right now because you can't put in the option for the extension in your conversion function before the extension exists, so there is no savings or safety in adding a conversion that doesn't actually convert at this time.
I didn't quite understand why that would be case since we would only have to extend the conversion function if we add support for the extension in the device. Otherwise, we simply wouldn't report the rdma network type extension.
I guess we can just drop the enum for now and re-add if and when you guys decide to extend the rdma_network_type.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 2/2 RDMA/vmw_pvrdma: Fix a signedness
In reply to a message not in the archive--- drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c +1 -1
@@ -299,7 +299,7 @@ static inline struct pvrdma_cqe *get_cqe(struct pvrdma_cq *cq, int i)void _pvrdma_flush_cqe (struct pvrdma_qp *qp,struct pvrdma_cq *cq) { -int head; +unsigned int head;int has_data;if (!cq->is_kernel)
Signature · 6 lines
2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Doug Ledford
AppliedQuoted 4 lines · Adit Ranadive
Hi Doug,
Here are a couple more patches for the VMware PVRDMA driver for 4.14. These are based on your for-next branch.
Thanks, applied.
Signature · 8 lines
Doug Ledford <[email protected]> GPG KeyID: B826A3330E572FDD Key fingerprint = AE6B 1BDA 122B 23B4 265B 1274 B826 A333 0E57 2FDD -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html