RDMA mlx5 driver updates rdma-next-2017-10-19
Subsystems (3)
cover RDMA mlx5 driver updates rdma-next-2017-10-19
This patch set adds two local to mlx5 features.
The first feature comes from Guy, who updated the mlx5 driver to support CQE compression for 128B-sized CQEs in addition to already supported 64B-sized CQEs: commit 1cbe6fc86ccf ("IB/mlx5: Add support for CQE compressing").
The second feature comes from Maor, this feature enables receive stateless offloading support for incoming tunneling traffic for raw ethernet QP.
The patches are available in the git repository at:
git.kernel.org/pub/scm/linux/kernel/git/leon/linux-rdma.git tags/rdma-next-2017-10-19-1
Thanks
---------------------------------------
Guy Levi (3):
IB/mlx5: Add 128B CQE compression and padding HW bits IB/mlx5: Support 128B CQE compression feature IB/mlx5: Support padded 128B CQE feature
Maor Gottlieb (3):
IB/mlx5: Update tunnel offloads bits IB/mlx5: Add tunneling offloads support IB/mlx5: Add support for RSS on the inner packet
drivers/infiniband/hw/mlx5/cq.c | 33 +++++++++++++++++++----- drivers/infiniband/hw/mlx5/main.c | 26 +++++++++++++++++-- drivers/infiniband/hw/mlx5/mlx5_ib.h | 7 +++++ drivers/infiniband/hw/mlx5/qp.c | 50 ++++++++++++++++++++++++++++++++---- include/linux/mlx5/cq.h | 6 +++-- include/linux/mlx5/mlx5_ifc.h | 8 ++++-- include/uapi/rdma/mlx5-abi.h | 29 ++++++++++++++++++--- 7 files changed, 138 insertions(+), 21 deletions(-)
--
2.14.2
--
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): 20171019052556.8514-1-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
PATCH 1/6 IB/mlx5: Add 128B CQE compression and padding HW bits
From: Guy Levi <guyle-VPRAkNaXOzVWk0Htik3J/[email protected]>
Adding new bits in mlx5_ifc_cmd_hca_cap to get the hardware capabilities for:
- compression_128: Support 128B CQE compression
- cqe_128_always: Support 128B CQE padding
--- include/linux/mlx5/mlx5_ifc.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
include/linux/mlx5/mlx5_ifc.h +3 -1
@@ -1047,7 +1047,9 @@ struct mlx5_ifc_cmd_hca_cap_bits {u8 num_of_uars_per_page[0x20 ];u8 reserved_at_540[0x40 ]; -u8 reserved_at_580[0x3f ]; +u8 reserved_at_580[0x3d ]; +u8 cqe_128_always[0x1 ]; +u8 cqe_compression_128[0x1 ];u8 cqe_compression[0x1 ];u8 cqe_compression_timeout[0x10 ];
Signature · 6 lines
2.14.2 -- 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/6 IB/mlx5: Support 128B CQE compression feature
In reply to a message not in the archiveFrom: Guy Levi <guyle-VPRAkNaXOzVWk0Htik3J/[email protected]>
In commit 1cbe6fc86ccf ("IB/mlx5: Add support for CQE compressing") the concept of CQE compression was introduced and added a support for 64B CQE size. This change update the code to support 128B CQE size as well.
--- drivers/infiniband/hw/mlx5/cq.c | 6 ++++-- drivers/infiniband/hw/mlx5/main.c | 8 ++++++-- include/uapi/rdma/mlx5-abi.h | 7 ++++++- 3 files changed, 16 insertions(+), 5 deletions(-)
drivers/infiniband/hw/mlx5/cq.c +4 -2
@@ -804,8 +804,10 @@ static int create_cq_user(struct mlx5_ib_dev *dev, struct ib_udata *udata, *index =to_mucontext (context)->bfregi.sys_pages[0 ];if (ucmd.cqe_comp_en ==1 ) { -if (unlikely ((*cqe_size !=64 ) || - !MLX5_CAP_GEN (dev->mdev, cqe_compression))) { +if (!((*cqe_size ==128 && +MLX5_CAP_GEN (dev->mdev, cqe_compression_128)) || + (*cqe_size ==64 && +MLX5_CAP_GEN (dev->mdev, cqe_compression)))) { err = -EOPNOTSUPP ;mlx5_ib_warn (dev,"CQE compression is not supported for size %d!\n" , *cqe_size);
drivers/infiniband/hw/mlx5/main.c +6 -2
@@ -827,8 +827,12 @@ static int mlx5_ib_query_device(struct ib_device *ibdev,sizeof (resp.mlx5_ib_support_multi_pkt_send_wqes); } -if (field_avail (typeof (resp), reserved, uhw->outlen)) - resp.response_length +=sizeof (resp.reserved); +if (field_avail (typeof (resp), flags, uhw->outlen)) { + resp.response_length +=sizeof (resp.flags); +if (MLX5_CAP_GEN (mdev, cqe_compression_128)) + resp.flags |= +MLX5_IB_QUERY_DEV_RESP_FLAGS_CQE_128B_COMP ; + }if (field_avail (typeof (resp), sw_parsing_caps, uhw->outlen)) {
include/uapi/rdma/mlx5-abi.h +6 -1
@@ -203,6 +203,11 @@ struct mlx5_ib_striding_rq_caps {__u32 supported_qpts; }; +enum mlx5_ib_query_dev_resp_flags { +/* Support 128B CQE compression */ +MLX5_IB_QUERY_DEV_RESP_FLAGS_CQE_128B_COMP =1 <<0 , +}; +struct mlx5_ib_query_device_resp {__u32 comp_mask;__u32 response_length;
@@ -211,7 +216,7 @@ struct mlx5_ib_query_device_resp {struct mlx5_ib_cqe_comp_caps cqe_comp_caps;struct mlx5_packet_pacing_caps packet_pacing_caps;__u32 mlx5_ib_support_multi_pkt_send_wqes; -__u32 reserved; +__u32 flags;/* Use enum mlx5_ib_query_dev_resp_flags */ struct mlx5_ib_sw_parsing_caps sw_parsing_caps;struct mlx5_ib_striding_rq_caps striding_rq_caps; };
Signature · 6 lines
2.14.2 -- 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 3/6 IB/mlx5: Support padded 128B CQE feature
In reply to a message not in the archiveFrom: Guy Levi <guyle-VPRAkNaXOzVWk0Htik3J/[email protected]>
In some benchmarks and some CPU architectures, writing the CQE on a full cache line size improves performance by saving memory access operations (read-modify-write) relative to partial cache line change. This patch lets the user to configure the device to pad the CQE up to 128B in case its content is less than 128B. Currently the driver supports only padding for a CQE size of 128B.
--- drivers/infiniband/hw/mlx5/cq.c | 27 +++++++++++++++++++++++---- drivers/infiniband/hw/mlx5/main.c | 4 ++++ drivers/infiniband/hw/mlx5/mlx5_ib.h | 5 +++++ include/linux/mlx5/cq.h | 6 ++++-- include/uapi/rdma/mlx5-abi.h | 7 ++++++- 5 files changed, 42 insertions(+), 7 deletions(-)
drivers/infiniband/hw/mlx5/cq.c +23 -4
@@ -754,13 +754,13 @@ static int create_cq_user(struct mlx5_ib_dev *dev, struct ib_udata *udata,int err; ucmdlen = udata->inlen <sizeof (ucmd) ? - (sizeof (ucmd) -sizeof (ucmd.reserved)) :sizeof (ucmd); + (sizeof (ucmd) -sizeof (ucmd.flags)) :sizeof (ucmd);if (ib_copy_from_udata (&ucmd, udata, ucmdlen))return -EFAULT ;if (ucmdlen ==sizeof (ucmd) && - ucmd.reserved !=0 ) + (ucmd.flags & ~(MLX5_IB_CREATE_CQ_FLAGS_CQE_128B_PAD )))return -EINVAL ;if (ucmd.cqe_size !=64 && ucmd.cqe_size !=128 )
@@ -830,6 +830,19 @@ static int create_cq_user(struct mlx5_ib_dev *dev, struct ib_udata *udata, ilog2(ucmd.cqe_comp_res_format)); } +if (ucmd.flags &MLX5_IB_CREATE_CQ_FLAGS_CQE_128B_PAD ) { +if (*cqe_size !=128 || + !MLX5_CAP_GEN (dev->mdev, cqe_128_always)) { + err = -EOPNOTSUPP ; +mlx5_ib_warn (dev, +"CQE padding is not supported for CQE size of %dB!\n" , + *cqe_size); + goto err_cqb; + } + + cq->private_flags |=MLX5_IB_CQ_PR_FLAGS_CQE_128_PAD ; + } +return 0 ; err_cqb:
@@ -989,7 +1002,10 @@ struct ib_cq *mlx5_ib_create_cq(struct ib_device *ibdev, cq->cqe_size = cqe_size; cqc =MLX5_ADDR_OF (create_cq_in, cqb, cq_context); -MLX5_SET (cqc, cqc, cqe_sz,cqe_sz_to_mlx_sz (cqe_size)); +MLX5_SET (cqc, cqc, cqe_sz, +cqe_sz_to_mlx_sz (cqe_size, + cq->private_flags & +MLX5_IB_CQ_PR_FLAGS_CQE_128_PAD ));MLX5_SET (cqc, cqc, log_cq_size,ilog2 (entries));MLX5_SET (cqc, cqc, uar_page, index);MLX5_SET (cqc, cqc, c_eqn, eqn);
@@ -1339,7 +1355,10 @@ int mlx5_ib_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata)MLX5_SET (cqc, cqc, log_page_size, page_shift -MLX5_ADAPTER_PAGE_SHIFT ); -MLX5_SET (cqc, cqc, cqe_sz,cqe_sz_to_mlx_sz (cqe_size)); +MLX5_SET (cqc, cqc, cqe_sz, +cqe_sz_to_mlx_sz (cqe_size, + cq->private_flags & +MLX5_IB_CQ_PR_FLAGS_CQE_128_PAD ));MLX5_SET (cqc, cqc, log_cq_size,ilog2 (entries));MLX5_SET (modify_cq_in, in, op_mod,MLX5_CQ_OPMOD_RESIZE );
drivers/infiniband/hw/mlx5/main.c +4 -0
@@ -829,9 +829,13 @@ static int mlx5_ib_query_device(struct ib_device *ibdev,if (field_avail (typeof (resp), flags, uhw->outlen)) { resp.response_length +=sizeof (resp.flags); +if (MLX5_CAP_GEN (mdev, cqe_compression_128)) resp.flags |=MLX5_IB_QUERY_DEV_RESP_FLAGS_CQE_128B_COMP ; + +if (MLX5_CAP_GEN (mdev, cqe_128_always)) + resp.flags |=MLX5_IB_QUERY_DEV_RESP_FLAGS_CQE_128B_PAD ; } if (field_avail(typeof(resp), sw_parsing_caps,
drivers/infiniband/hw/mlx5/mlx5_ib.h +5 -0
@@ -446,6 +446,10 @@ struct mlx5_shared_mr_info {struct ib_umem *umem; }; +enum mlx5_ib_cq_pr_flags { +MLX5_IB_CQ_PR_FLAGS_CQE_128_PAD =1 <<0 , +}; +struct mlx5_ib_cq {struct ib_cq ibcq;struct mlx5_core_cq mcq;
@@ -468,6 +472,7 @@ struct mlx5_ib_cq {struct list_head wc_list;enum ib_cq_notify_flags notify_flags;struct work_struct notify_work; +u16 private_flags;/* Use mlx5_ib_cq_pr_flags */ };struct mlx5_ib_wc {
include/linux/mlx5/cq.h +4 -2
@@ -125,11 +125,13 @@ struct mlx5_cq_modify_params {enum {CQE_SIZE_64 =0 ,CQE_SIZE_128 =1 , +CQE_SIZE_128_PAD =2 , }; -static inline int cqe_sz_to_mlx_sz (u8 size) +static inline int cqe_sz_to_mlx_sz (u8 size,int padding_128_en) { -return size ==64 ?CQE_SIZE_64 :CQE_SIZE_128 ; +return padding_128_en ?CQE_SIZE_128_PAD : + size ==64 ?CQE_SIZE_64 :CQE_SIZE_128 ; }static inline void mlx5_cq_set_ci (struct mlx5_core_cq *cq)
include/uapi/rdma/mlx5-abi.h +6 -1
@@ -206,6 +206,7 @@ struct mlx5_ib_striding_rq_caps {enum mlx5_ib_query_dev_resp_flags {/* Support 128B CQE compression */ MLX5_IB_QUERY_DEV_RESP_FLAGS_CQE_128B_COMP =1 <<0 , +MLX5_IB_QUERY_DEV_RESP_FLAGS_CQE_128B_PAD =1 <<1 , };struct mlx5_ib_query_device_resp {
@@ -221,13 +222,17 @@ struct mlx5_ib_query_device_resp {struct mlx5_ib_striding_rq_caps striding_rq_caps; }; +enum mlx5_ib_create_cq_flags { +MLX5_IB_CREATE_CQ_FLAGS_CQE_128B_PAD =1 <<0 , +}; +struct mlx5_ib_create_cq {__u64 buf_addr;__u64 db_addr;__u32 cqe_size;__u8 cqe_comp_en;__u8 cqe_comp_res_format; -__u16 reserved;/* explicit padding (optional on i386) */ +__u16 flags; };struct mlx5_ib_create_cq_resp {
Signature · 6 lines
2.14.2 -- 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 4/6 IB/mlx5: Update tunnel offloads bits
In reply to a message not in the archiveFrom: Maor Gottlieb <maorg-VPRAkNaXOzVWk0Htik3J/[email protected]>
This patch updates the mlx5_ifc with the following:
- Fix tunnel_stateless_gre typo.
- max_geneve_opt_len - Maximum geneve options length.
- tunnel_stateless_geneve_rx - If set, receive Stateless Offloads for Geneve tunneled (inner) packets are supported.
--- include/linux/mlx5/mlx5_ifc.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
include/linux/mlx5/mlx5_ifc.h +3 -1
@@ -614,7 +614,9 @@ struct mlx5_ifc_per_protocol_networking_offload_caps_bits {u8 swp[0x1 ];u8 swp_csum[0x1 ];u8 swp_lso[0x1 ]; -u8 reserved_at_23[0x1d ]; +u8 reserved_at_23[0x1b ]; +u8 max_geneve_opt_len[0x1 ]; +u8 tunnel_stateless_geneve_rx[0x1 ];u8 reserved_at_40[0x10 ];u8 lro_min_mss_size[0x10 ];
Signature · 6 lines
2.14.2 -- 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 5/6 IB/mlx5: Add tunneling offloads support
In reply to a message not in the archiveFrom: Maor Gottlieb <maorg-VPRAkNaXOzVWk0Htik3J/[email protected]>
The device can support receive Stateless Offloads for the inner packet's fields only when the packet is processed by TIR which is enabled to support tunneling. Otherwise, the device treats the packet as an ordinary non-tunneling packet and receive offloads can be done only for the outer packet's field.
In order to enable receive Stateless Offloading support for incoming tunneling traffic the TIR should be created with tunneled_offload_en. Tunneling offloads is supported only be raw ethernet QP.
This patch includes:
* New QP creation flag for tunneling offloads.
* Reports device capabilities.
--- drivers/infiniband/hw/mlx5/main.c | 14 +++++++++++++ drivers/infiniband/hw/mlx5/mlx5_ib.h | 2 ++ drivers/infiniband/hw/mlx5/qp.c | 39 +++++++++++++++++++++++++++++++----- include/uapi/rdma/mlx5-abi.h | 11 +++++++++- 4 files changed, 60 insertions(+), 6 deletions(-)
drivers/infiniband/hw/mlx5/main.c +14 -0
@@ -875,6 +875,20 @@ static int mlx5_ib_query_device(struct ib_device *ibdev, } } +if (field_avail (typeof (resp), tunnel_offloads_caps, + uhw->outlen)) { + resp.response_length +=sizeof (resp.tunnel_offloads_caps); +if (MLX5_CAP_ETH (mdev, tunnel_stateless_vxlan)) + resp.tunnel_offloads_caps |= +MLX5_IB_TUNNELED_OFFLOADS_VXLAN ; +if (MLX5_CAP_ETH (mdev, tunnel_stateless_geneve_rx)) + resp.tunnel_offloads_caps |= +MLX5_IB_TUNNELED_OFFLOADS_GENEVE ; +if (MLX5_CAP_ETH (mdev, tunnel_stateless_gre)) + resp.tunnel_offloads_caps |= +MLX5_IB_TUNNELED_OFFLOADS_GRE ; + } +if (uhw->outlen) { err =ib_copy_to_udata (uhw, &resp, resp.response_length);
drivers/infiniband/hw/mlx5/mlx5_ib.h +2 -0
@@ -399,6 +399,7 @@ struct mlx5_ib_qp {struct list_head cq_send_list;u32 rate_limit;u32 underlay_qpn; +bool tunnel_offload_en; };struct mlx5_ib_cq_buf {
@@ -422,6 +423,7 @@ enum mlx5_ib_qp_flags {MLX5_IB_QP_CVLAN_STRIPPING =1 <<9 ,MLX5_IB_QP_UNDERLAY =1 <<10 ,MLX5_IB_QP_SCATTER_END_PADDING =1 <<11 , + MLX5_IB_QP_TUNNEL_OFFLOAD = 1 << 12, }; struct mlx5_umr_wr {
drivers/infiniband/hw/mlx5/qp.c +34 -5
@@ -1204,8 +1204,16 @@ static void destroy_raw_packet_qp_rq(struct mlx5_ib_dev *dev,mlx5_core_destroy_rq_tracked (dev->mdev, &rq->base.mqp); } +static bool tunnel_offload_supported (struct mlx5_core_dev *dev) +{ +return (MLX5_CAP_ETH (dev, tunnel_stateless_vxlan) || +MLX5_CAP_ETH (dev, tunnel_stateless_gre) || +MLX5_CAP_ETH (dev, tunnel_stateless_geneve_rx)); +} +static int create_raw_packet_qp_tir (struct mlx5_ib_dev *dev, -struct mlx5_ib_rq *rq,u32 tdn) +struct mlx5_ib_rq *rq,u32 tdn, +bool tunnel_offload_en) {u32 *in;void *tirc;
@@ -1221,6 +1229,8 @@ static int create_raw_packet_qp_tir(struct mlx5_ib_dev *dev,MLX5_SET (tirc, tirc, disp_type,MLX5_TIRC_DISP_TYPE_DIRECT );MLX5_SET (tirc, tirc, inline_rqn, rq->base.mqp.qpn);MLX5_SET (tirc, tirc, transport_domain, tdn); +if (tunnel_offload_en) +MLX5_SET (tirc, tirc, tunneled_offload_en,1 ); err =mlx5_core_create_tir (dev->mdev, in, inlen, &rq->tirn);
@@ -1273,7 +1283,8 @@ static int create_raw_packet_qp(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp, goto err_destroy_sq; - err =create_raw_packet_qp_tir (dev, rq, tdn); + err =create_raw_packet_qp_tir (dev, rq, tdn, + qp->tunnel_offload_en);if (err) goto err_destroy_rq; }
@@ -1360,7 +1371,7 @@ static int create_rss_raw_qp_tir(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,if (udata->outlen < min_resp_len)return -EINVAL ; - required_cmd_sz = offsetof(typeof (ucmd ), reserved1) +sizeof (ucmd.reserved1); + required_cmd_sz = offsetof(typeof (ucmd ), flags) +sizeof (ucmd.flags);if (udata->inlen < required_cmd_sz) {mlx5_ib_dbg (dev,"invalid inlen\n" );return -EINVAL ;
@@ -1383,8 +1394,14 @@ static int create_rss_raw_qp_tir(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,return -EOPNOTSUPP ; } -if (memchr_inv (ucmd.reserved,0 ,sizeof (ucmd.reserved)) || ucmd.reserved1) { -mlx5_ib_dbg (dev,"invalid reserved\n" ); +if (ucmd.flags & ~MLX5_QP_FLAG_TUNNEL_OFFLOADS ) { +mlx5_ib_dbg (dev,"invalid flags\n" ); +return -EOPNOTSUPP ; + } + +if (ucmd.flags &MLX5_QP_FLAG_TUNNEL_OFFLOADS && + !tunnel_offload_supported (dev->mdev)) { +mlx5_ib_dbg (dev,"tunnel offloads isn't supported\n" );return -EOPNOTSUPP ; }
@@ -1407,6 +1424,10 @@ static int create_rss_raw_qp_tir(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,MLX5_SET (tirc, tirc, transport_domain, tdn); hfso =MLX5_ADDR_OF (tirc, tirc, rx_hash_field_selector_outer); + +if (ucmd.flags &MLX5_QP_FLAG_TUNNEL_OFFLOADS ) +MLX5_SET (tirc, tirc, tunneled_offload_en,1 ); +switch (ucmd.rx_hash_function) {case MLX5_RX_HASH_FUNC_TOEPLITZ : {
@@ -1606,6 +1627,14 @@ static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd, qp->wq_sig = !!(ucmd.flags &MLX5_QP_FLAG_SIGNATURE ); qp->scat_cqe = !!(ucmd.flags &MLX5_QP_FLAG_SCATTER_CQE ); +if (ucmd.flags &MLX5_QP_FLAG_TUNNEL_OFFLOADS ) { +if (init_attr->qp_type !=IB_QPT_RAW_PACKET || + !tunnel_offload_supported (mdev)) { +mlx5_ib_dbg (dev,"Tunnel offload isn't supported\n" ); +return -EOPNOTSUPP ; + } + qp->tunnel_offload_en = true; + }if (init_attr->create_flags &IB_QP_CREATE_SOURCE_QPN ) { if (init_attr->qp_type != IB_QPT_UD ||
include/uapi/rdma/mlx5-abi.h +10 -1
@@ -39,6 +39,7 @@enum {MLX5_QP_FLAG_SIGNATURE =1 <<0 ,MLX5_QP_FLAG_SCATTER_CQE =1 <<1 , +MLX5_QP_FLAG_TUNNEL_OFFLOADS =1 <<2 , };enum {
@@ -209,6 +210,12 @@ enum mlx5_ib_query_dev_resp_flags { MLX5_IB_QUERY_DEV_RESP_FLAGS_CQE_128B_PAD = 1 << 1, }; +enum mlx5_ib_tunnel_offloads { +MLX5_IB_TUNNELED_OFFLOADS_VXLAN =1 <<0 , +MLX5_IB_TUNNELED_OFFLOADS_GRE =1 <<1 , +MLX5_IB_TUNNELED_OFFLOADS_GENEVE =1 <<2 +}; +struct mlx5_ib_query_device_resp {__u32 comp_mask;__u32 response_length;
@@ -220,6 +227,8 @@ struct mlx5_ib_query_device_resp {__u32 flags;/* Use enum mlx5_ib_query_dev_resp_flags */ struct mlx5_ib_sw_parsing_caps sw_parsing_caps;struct mlx5_ib_striding_rq_caps striding_rq_caps; +__u32 tunnel_offloads_caps;/* enum mlx5_ib_tunnel_offloads */ +__u32 reserved; };enum mlx5_ib_create_cq_flags {
@@ -304,7 +313,7 @@ struct mlx5_ib_create_qp_rss {__u8 reserved[6 ];__u8 rx_hash_key[128 ];/* valid only for Toeplitz */ __u32 comp_mask; -__u32 reserved1; +__u32 flags; };struct mlx5_ib_create_qp_resp {
Signature · 6 lines
2.14.2 -- 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 6/6 IB/mlx5: Add support for RSS on the inner packet
In reply to a message not in the archiveFrom: Maor Gottlieb <maorg-VPRAkNaXOzVWk0Htik3J/[email protected]>
Some user space application would like to do RSS on the inner packet fields instead on the outer.
When MLX5_RX_HASH_INNER is set with one or more of the other hash fields, then the RSS will be done using the inner packet.
--- drivers/infiniband/hw/mlx5/qp.c | 11 +++++++++++ include/uapi/rdma/mlx5-abi.h | 4 +++- 2 files changed, 14 insertions(+), 1 deletion(-)
drivers/infiniband/hw/mlx5/qp.c +11 -0
@@ -1405,6 +1405,12 @@ static int create_rss_raw_qp_tir(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,return -EOPNOTSUPP ; } +if (ucmd.rx_hash_fields_mask &MLX5_RX_HASH_INNER && + !(ucmd.flags &MLX5_QP_FLAG_TUNNEL_OFFLOADS )) { +mlx5_ib_dbg (dev,"Tunnel offloads must be set for inner RSS\n" ); +return -EOPNOTSUPP ; + } + err =ib_copy_to_udata (udata, &resp, min_resp_len);if (err) {mlx5_ib_dbg (dev,"copy failed\n" );
@@ -1428,6 +1434,11 @@ static int create_rss_raw_qp_tir(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,if (ucmd.flags &MLX5_QP_FLAG_TUNNEL_OFFLOADS )MLX5_SET (tirc, tirc, tunneled_offload_en,1 ); +if (ucmd.rx_hash_fields_mask &MLX5_RX_HASH_INNER ) + hfso =MLX5_ADDR_OF (tirc, tirc, rx_hash_field_selector_inner); +else + hfso =MLX5_ADDR_OF (tirc, tirc, rx_hash_field_selector_outer); +switch (ucmd.rx_hash_function) {case MLX5_RX_HASH_FUNC_TOEPLITZ : {
include/uapi/rdma/mlx5-abi.h +3 -1
@@ -303,7 +303,9 @@ enum mlx5_rx_hash_fields {MLX5_RX_HASH_SRC_PORT_TCP =1 <<4 ,MLX5_RX_HASH_DST_PORT_TCP =1 <<5 ,MLX5_RX_HASH_SRC_PORT_UDP =1 <<6 , -MLX5_RX_HASH_DST_PORT_UDP =1 <<7 +MLX5_RX_HASH_DST_PORT_UDP =1 <<7 , +/* Save bits for future fields */ +MLX5_RX_HASH_INNER =1 <<31 }; struct mlx5_ib_create_qp_rss {
Signature · 6 lines
2.14.2 -- 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
Quoted 13 lines · Leon Romanovsky
This patch set adds two local to mlx5 features.
The first feature comes from Guy, who updated the mlx5 driver to support
CQE compression for 128B-sized CQEs in addition to already supported 64B-sized CQEs: commit1cbe6fc86ccf("IB/mlx5: Add support for CQE compressing").The second feature comes from Maor, this feature enables receive stateless
offloading support for incoming tunneling traffic for raw ethernet QP.
Quoted 5 lines
The patches are available in the git repository at:
git.kernel.org/pub/scm/linux/kernel/git/leon/linux-rdma.git
tags/rdma-next-2017-10-19-1Thanks
Thanks, series applied (with a fixup because I haven't taken the PCI write pad patch series yet).
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