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.cb/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>