Thread (3 messages) 3 messages, 3 authors, 2023-06-16

RE: [PATCH] net: mana: Batch ringing RX queue doorbell on receiving packets

From: Haiyang Zhang <haiyangz@microsoft.com>
Date: 2023-06-16 16:49:21
Also in: linux-hyperv, linux-rdma, lkml, stable

quoted hunk ↗ jump to hunk
-----Original Message-----
From: longli@linuxonhyperv.com <redacted>
Sent: Thursday, June 15, 2023 7:28 PM
To: KY Srinivasan <kys@microsoft.com>; Haiyang Zhang
[off-list ref]; Wei Liu [off-list ref]; Dexuan Cui
[off-list ref]; David S. Miller [off-list ref]; Eric
Dumazet [off-list ref]; Jakub Kicinski [off-list ref]; Paolo
Abeni [off-list ref]; Leon Romanovsky [off-list ref]; Shradha
Gupta [off-list ref]; Ajay Sharma
[off-list ref]; Shachar Raindel [off-list ref];
Stephen Hemminger [off-list ref]; linux-
hyperv@vger.kernel.org; netdev@vger.kernel.org; linux-
kernel@vger.kernel.org
Cc: linux-rdma@vger.kernel.org; Long Li <longli@microsoft.com>;
stable@vger.kernel.org
Subject: [PATCH] net: mana: Batch ringing RX queue doorbell on receiving
packets

From: Long Li <longli@microsoft.com>

It's inefficient to ring the doorbell page every time a WQE is posted to
the received queue.

Move the code for ringing doorbell page to where after we have posted all
WQEs to the receive queue during a callback from napi_poll().

Tests showed no regression in network latency benchmarks.

Cc: stable@vger.kernel.org
Fixes: ca9c54d2d6a5 ("net: mana: Add a driver for Microsoft Azure Network
Adapter (MANA)")
Signed-off-by: Long Li <longli@microsoft.com>
---
 drivers/net/ethernet/microsoft/mana/mana_en.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/microsoft/mana/mana_en.c
b/drivers/net/ethernet/microsoft/mana/mana_en.c
index cd4d5ceb9f2d..ef1f0ce8e44d 100644
--- a/drivers/net/ethernet/microsoft/mana/mana_en.c
+++ b/drivers/net/ethernet/microsoft/mana/mana_en.c
@@ -1383,8 +1383,8 @@ static void mana_post_pkt_rxq(struct mana_rxq
*rxq)

 	recv_buf_oob = &rxq->rx_oobs[curr_index];

-	err = mana_gd_post_and_ring(rxq->gdma_rq, &recv_buf_oob-
quoted
wqe_req,
-				    &recv_buf_oob->wqe_inf);
+	err = mana_gd_post_work_request(rxq->gdma_rq, &recv_buf_oob-
quoted
wqe_req,
+					&recv_buf_oob->wqe_inf);
 	if (WARN_ON_ONCE(err))
 		return;
@@ -1654,6 +1654,12 @@ static void mana_poll_rx_cq(struct mana_cq *cq)
 		mana_process_rx_cqe(rxq, cq, &comp[i]);
 	}

+	if (comp_read) {
+		struct gdma_context *gc = rxq->gdma_rq->gdma_dev-
quoted
gdma_context;
+
+		mana_gd_wq_ring_doorbell(gc, rxq->gdma_rq);
+	}
+
Thank you!

Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help