* [PATCH v2] RDMA/mana_ib: Use v2 version of cfg_rx_steer_req to enable RX coalescing
@ 2023-05-14 6:18 longli
2023-05-30 18:01 ` Long Li
2023-06-01 16:09 ` Jason Gunthorpe
0 siblings, 2 replies; 3+ messages in thread
From: longli @ 2023-05-14 6:18 UTC (permalink / raw)
To: Jason Gunthorpe, Leon Romanovsky, Ajay Sharma, Dexuan Cui,
K. Y. Srinivasan, Haiyang Zhang, Wei Liu, David S. Miller,
Eric Dumazet, Jakub Kicinski, Paolo Abeni
Cc: linux-rdma, linux-hyperv, netdev, linux-kernel, Long Li
From: Long Li <longli@microsoft.com>
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 <longli@microsoft.com>
---
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
^ permalink raw reply related [flat|nested] 3+ messages in thread
* RE: [PATCH v2] RDMA/mana_ib: Use v2 version of cfg_rx_steer_req to enable RX coalescing
2023-05-14 6:18 [PATCH v2] RDMA/mana_ib: Use v2 version of cfg_rx_steer_req to enable RX coalescing longli
@ 2023-05-30 18:01 ` Long Li
2023-06-01 16:09 ` Jason Gunthorpe
1 sibling, 0 replies; 3+ messages in thread
From: Long Li @ 2023-05-30 18:01 UTC (permalink / raw)
To: longli@linuxonhyperv.com, Jason Gunthorpe, Leon Romanovsky,
Ajay Sharma, Dexuan Cui, KY Srinivasan, Haiyang Zhang, Wei Liu,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni
Cc: linux-rdma@vger.kernel.org, linux-hyperv@vger.kernel.org,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Hi Leon,
If the v2 version of the patch looks good, can you pick it up for rdma-next?
Thanks,
Long
> -----Original Message-----
> From: longli@linuxonhyperv.com <longli@linuxonhyperv.com>
> Sent: Saturday, May 13, 2023 11:18 PM
> To: Jason Gunthorpe <jgg@ziepe.ca>; Leon Romanovsky <leon@kernel.org>;
> Ajay Sharma <sharmaajay@microsoft.com>; Dexuan Cui
> <decui@microsoft.com>; KY Srinivasan <kys@microsoft.com>; Haiyang Zhang
> <haiyangz@microsoft.com>; Wei Liu <wei.liu@kernel.org>; David S. Miller
> <davem@davemloft.net>; Eric Dumazet <edumazet@google.com>; Jakub
> Kicinski <kuba@kernel.org>; Paolo Abeni <pabeni@redhat.com>
> Cc: linux-rdma@vger.kernel.org; linux-hyperv@vger.kernel.org;
> netdev@vger.kernel.org; linux-kernel@vger.kernel.org; Long Li
> <longli@microsoft.com>
> Subject: [PATCH v2] RDMA/mana_ib: Use v2 version of cfg_rx_steer_req to
> enable RX coalescing
>
> From: Long Li <longli@microsoft.com>
>
> 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 <longli@microsoft.com>
> ---
>
> 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
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v2] RDMA/mana_ib: Use v2 version of cfg_rx_steer_req to enable RX coalescing
2023-05-14 6:18 [PATCH v2] RDMA/mana_ib: Use v2 version of cfg_rx_steer_req to enable RX coalescing longli
2023-05-30 18:01 ` Long Li
@ 2023-06-01 16:09 ` Jason Gunthorpe
1 sibling, 0 replies; 3+ messages in thread
From: Jason Gunthorpe @ 2023-06-01 16:09 UTC (permalink / raw)
To: longli
Cc: Leon Romanovsky, Ajay Sharma, Dexuan Cui, K. Y. Srinivasan,
Haiyang Zhang, Wei Liu, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, linux-rdma, linux-hyperv, netdev,
linux-kernel, Long Li
On Sat, May 13, 2023 at 11:18:15PM -0700, longli@linuxonhyperv.com wrote:
> From: Long Li <longli@microsoft.com>
>
> 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 <longli@microsoft.com>
> ---
>
> 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
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2023-06-01 16:09 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-14 6:18 [PATCH v2] RDMA/mana_ib: Use v2 version of cfg_rx_steer_req to enable RX coalescing longli
2023-05-30 18:01 ` Long Li
2023-06-01 16:09 ` Jason Gunthorpe
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).