2023-05-14 06:41:20

by Long Li

[permalink] [raw]
Subject: [PATCH v2] RDMA/mana_ib: Use v2 version of cfg_rx_steer_req to enable RX coalescing

From: Long Li <[email protected]>

With RX coalescing, one CQE entry can be used to indicate multiple packets
on the receive queue. This saves processing time and PCI bandwidth over
the CQ.

The MANA Ethernet driver also uses the v2 version of the protocol. It
doesn't use RX coalescing and its behavior is not changed.

Signed-off-by: Long Li <[email protected]>
---

Change log
v2: remove the definition of v1 protocol

drivers/infiniband/hw/mana/qp.c | 5 ++++-
drivers/net/ethernet/microsoft/mana/mana_en.c | 5 ++++-
include/net/mana/mana.h | 4 +++-
3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/infiniband/hw/mana/qp.c b/drivers/infiniband/hw/mana/qp.c
index 54b61930a7fd..4b3b5b274e84 100644
--- a/drivers/infiniband/hw/mana/qp.c
+++ b/drivers/infiniband/hw/mana/qp.c
@@ -13,7 +13,7 @@ static int mana_ib_cfg_vport_steering(struct mana_ib_dev *dev,
u8 *rx_hash_key)
{
struct mana_port_context *mpc = netdev_priv(ndev);
- struct mana_cfg_rx_steer_req *req = NULL;
+ struct mana_cfg_rx_steer_req_v2 *req;
struct mana_cfg_rx_steer_resp resp = {};
mana_handle_t *req_indir_tab;
struct gdma_context *gc;
@@ -33,6 +33,8 @@ static int mana_ib_cfg_vport_steering(struct mana_ib_dev *dev,
mana_gd_init_req_hdr(&req->hdr, MANA_CONFIG_VPORT_RX, req_buf_size,
sizeof(resp));

+ req->hdr.req.msg_version = GDMA_MESSAGE_V2;
+
req->vport = mpc->port_handle;
req->rx_enable = 1;
req->update_default_rxobj = 1;
@@ -46,6 +48,7 @@ static int mana_ib_cfg_vport_steering(struct mana_ib_dev *dev,
req->num_indir_entries = MANA_INDIRECT_TABLE_SIZE;
req->indir_tab_offset = sizeof(*req);
req->update_indir_tab = true;
+ req->cqe_coalescing_enable = 1;

req_indir_tab = (mana_handle_t *)(req + 1);
/* The ind table passed to the hardware must have
diff --git a/drivers/net/ethernet/microsoft/mana/mana_en.c b/drivers/net/ethernet/microsoft/mana/mana_en.c
index 06d6292e09b3..b3fcb767b9ab 100644
--- a/drivers/net/ethernet/microsoft/mana/mana_en.c
+++ b/drivers/net/ethernet/microsoft/mana/mana_en.c
@@ -972,7 +972,7 @@ static int mana_cfg_vport_steering(struct mana_port_context *apc,
bool update_tab)
{
u16 num_entries = MANA_INDIRECT_TABLE_SIZE;
- struct mana_cfg_rx_steer_req *req = NULL;
+ struct mana_cfg_rx_steer_req_v2 *req;
struct mana_cfg_rx_steer_resp resp = {};
struct net_device *ndev = apc->ndev;
mana_handle_t *req_indir_tab;
@@ -987,6 +987,8 @@ static int mana_cfg_vport_steering(struct mana_port_context *apc,
mana_gd_init_req_hdr(&req->hdr, MANA_CONFIG_VPORT_RX, req_buf_size,
sizeof(resp));

+ req->hdr.req.msg_version = GDMA_MESSAGE_V2;
+
req->vport = apc->port_handle;
req->num_indir_entries = num_entries;
req->indir_tab_offset = sizeof(*req);
@@ -996,6 +998,7 @@ static int mana_cfg_vport_steering(struct mana_port_context *apc,
req->update_hashkey = update_key;
req->update_indir_tab = update_tab;
req->default_rxobj = apc->default_rxobj;
+ req->cqe_coalescing_enable = 0;

if (update_key)
memcpy(&req->hashkey, apc->hashkey, MANA_HASH_KEY_SIZE);
diff --git a/include/net/mana/mana.h b/include/net/mana/mana.h
index cd386aa7c7cc..1512bd48df81 100644
--- a/include/net/mana/mana.h
+++ b/include/net/mana/mana.h
@@ -581,7 +581,7 @@ struct mana_fence_rq_resp {
}; /* HW DATA */

/* Configure vPort Rx Steering */
-struct mana_cfg_rx_steer_req {
+struct mana_cfg_rx_steer_req_v2 {
struct gdma_req_hdr hdr;
mana_handle_t vport;
u16 num_indir_entries;
@@ -594,6 +594,8 @@ struct mana_cfg_rx_steer_req {
u8 reserved;
mana_handle_t default_rxobj;
u8 hashkey[MANA_HASH_KEY_SIZE];
+ u8 cqe_coalescing_enable;
+ u8 reserved2[7];
}; /* HW DATA */

struct mana_cfg_rx_steer_resp {
--
2.34.1



2023-05-30 18:14:43

by Long Li

[permalink] [raw]
Subject: RE: [PATCH v2] RDMA/mana_ib: Use v2 version of cfg_rx_steer_req to enable RX coalescing

Hi Leon,

If the v2 version of the patch looks good, can you pick it up for rdma-next?

Thanks,
Long

> -----Original Message-----
> From: [email protected] <[email protected]>
> Sent: Saturday, May 13, 2023 11:18 PM
> To: Jason Gunthorpe <[email protected]>; Leon Romanovsky <[email protected]>;
> Ajay Sharma <[email protected]>; Dexuan Cui
> <[email protected]>; KY Srinivasan <[email protected]>; Haiyang Zhang
> <[email protected]>; Wei Liu <[email protected]>; David S. Miller
> <[email protected]>; Eric Dumazet <[email protected]>; Jakub
> Kicinski <[email protected]>; Paolo Abeni <[email protected]>
> Cc: [email protected]; [email protected];
> [email protected]; [email protected]; Long Li
> <[email protected]>
> Subject: [PATCH v2] RDMA/mana_ib: Use v2 version of cfg_rx_steer_req to
> enable RX coalescing
>
> From: Long Li <[email protected]>
>
> With RX coalescing, one CQE entry can be used to indicate multiple packets on
> the receive queue. This saves processing time and PCI bandwidth over the CQ.
>
> The MANA Ethernet driver also uses the v2 version of the protocol. It doesn't
> use RX coalescing and its behavior is not changed.
>
> Signed-off-by: Long Li <[email protected]>
> ---
>
> Change log
> v2: remove the definition of v1 protocol
>
> drivers/infiniband/hw/mana/qp.c | 5 ++++-
> drivers/net/ethernet/microsoft/mana/mana_en.c | 5 ++++-
> include/net/mana/mana.h | 4 +++-
> 3 files changed, 11 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/infiniband/hw/mana/qp.c
> b/drivers/infiniband/hw/mana/qp.c index 54b61930a7fd..4b3b5b274e84
> 100644
> --- a/drivers/infiniband/hw/mana/qp.c
> +++ b/drivers/infiniband/hw/mana/qp.c
> @@ -13,7 +13,7 @@ static int mana_ib_cfg_vport_steering(struct
> mana_ib_dev *dev,
> u8 *rx_hash_key)
> {
> struct mana_port_context *mpc = netdev_priv(ndev);
> - struct mana_cfg_rx_steer_req *req = NULL;
> + struct mana_cfg_rx_steer_req_v2 *req;
> struct mana_cfg_rx_steer_resp resp = {};
> mana_handle_t *req_indir_tab;
> struct gdma_context *gc;
> @@ -33,6 +33,8 @@ static int mana_ib_cfg_vport_steering(struct
> mana_ib_dev *dev,
> mana_gd_init_req_hdr(&req->hdr, MANA_CONFIG_VPORT_RX,
> req_buf_size,
> sizeof(resp));
>
> + req->hdr.req.msg_version = GDMA_MESSAGE_V2;
> +
> req->vport = mpc->port_handle;
> req->rx_enable = 1;
> req->update_default_rxobj = 1;
> @@ -46,6 +48,7 @@ static int mana_ib_cfg_vport_steering(struct
> mana_ib_dev *dev,
> req->num_indir_entries = MANA_INDIRECT_TABLE_SIZE;
> req->indir_tab_offset = sizeof(*req);
> req->update_indir_tab = true;
> + req->cqe_coalescing_enable = 1;
>
> req_indir_tab = (mana_handle_t *)(req + 1);
> /* The ind table passed to the hardware must have diff --git
> a/drivers/net/ethernet/microsoft/mana/mana_en.c
> b/drivers/net/ethernet/microsoft/mana/mana_en.c
> index 06d6292e09b3..b3fcb767b9ab 100644
> --- a/drivers/net/ethernet/microsoft/mana/mana_en.c
> +++ b/drivers/net/ethernet/microsoft/mana/mana_en.c
> @@ -972,7 +972,7 @@ static int mana_cfg_vport_steering(struct
> mana_port_context *apc,
> bool update_tab)
> {
> u16 num_entries = MANA_INDIRECT_TABLE_SIZE;
> - struct mana_cfg_rx_steer_req *req = NULL;
> + struct mana_cfg_rx_steer_req_v2 *req;
> struct mana_cfg_rx_steer_resp resp = {};
> struct net_device *ndev = apc->ndev;
> mana_handle_t *req_indir_tab;
> @@ -987,6 +987,8 @@ static int mana_cfg_vport_steering(struct
> mana_port_context *apc,
> mana_gd_init_req_hdr(&req->hdr, MANA_CONFIG_VPORT_RX,
> req_buf_size,
> sizeof(resp));
>
> + req->hdr.req.msg_version = GDMA_MESSAGE_V2;
> +
> req->vport = apc->port_handle;
> req->num_indir_entries = num_entries;
> req->indir_tab_offset = sizeof(*req);
> @@ -996,6 +998,7 @@ static int mana_cfg_vport_steering(struct
> mana_port_context *apc,
> req->update_hashkey = update_key;
> req->update_indir_tab = update_tab;
> req->default_rxobj = apc->default_rxobj;
> + req->cqe_coalescing_enable = 0;
>
> if (update_key)
> memcpy(&req->hashkey, apc->hashkey,
> MANA_HASH_KEY_SIZE); diff --git a/include/net/mana/mana.h
> b/include/net/mana/mana.h index cd386aa7c7cc..1512bd48df81 100644
> --- a/include/net/mana/mana.h
> +++ b/include/net/mana/mana.h
> @@ -581,7 +581,7 @@ struct mana_fence_rq_resp { }; /* HW DATA */
>
> /* Configure vPort Rx Steering */
> -struct mana_cfg_rx_steer_req {
> +struct mana_cfg_rx_steer_req_v2 {
> struct gdma_req_hdr hdr;
> mana_handle_t vport;
> u16 num_indir_entries;
> @@ -594,6 +594,8 @@ struct mana_cfg_rx_steer_req {
> u8 reserved;
> mana_handle_t default_rxobj;
> u8 hashkey[MANA_HASH_KEY_SIZE];
> + u8 cqe_coalescing_enable;
> + u8 reserved2[7];
> }; /* HW DATA */
>
> struct mana_cfg_rx_steer_resp {
> --
> 2.34.1


2023-06-01 16:31:50

by Jason Gunthorpe

[permalink] [raw]
Subject: Re: [PATCH v2] RDMA/mana_ib: Use v2 version of cfg_rx_steer_req to enable RX coalescing

On Sat, May 13, 2023 at 11:18:15PM -0700, [email protected] wrote:
> From: Long Li <[email protected]>
>
> With RX coalescing, one CQE entry can be used to indicate multiple packets
> on the receive queue. This saves processing time and PCI bandwidth over
> the CQ.
>
> The MANA Ethernet driver also uses the v2 version of the protocol. It
> doesn't use RX coalescing and its behavior is not changed.
>
> Signed-off-by: Long Li <[email protected]>
> ---
>
> Change log
> v2: remove the definition of v1 protocol
>
> drivers/infiniband/hw/mana/qp.c | 5 ++++-
> drivers/net/ethernet/microsoft/mana/mana_en.c | 5 ++++-
> include/net/mana/mana.h | 4 +++-
> 3 files changed, 11 insertions(+), 3 deletions(-)

Applied to for-next

Thanks,
Jason