From: longli@linuxonhyperv.com
To: Ferruh Yigit <ferruh.yigit@amd.com>
Cc: dev@dpdk.org, Ajay Sharma <sharmaajay@microsoft.com>,
Long Li <longli@microsoft.com>,
stable@dpdk.org
Subject: [PATCH 1/2] net/mana: avoid unnecessary assignments in data path
Date: Fri, 17 Mar 2023 16:32:43 -0700 [thread overview]
Message-ID: <1679095964-18532-1-git-send-email-longli@linuxonhyperv.com> (raw)
From: Long Li <longli@microsoft.com>
Unnecessary assignments involve memset and waste CPU cycles.
Removing them to reduce CPU usage.
Fixes: 517ed6e2d590 ("net/mana: add basic driver with build environment")
Cc: stable@dpdk.org
Signed-off-by: Long Li <longli@microsoft.com>
---
drivers/net/mana/gdma.c | 11 ++---------
drivers/net/mana/mana.h | 2 +-
drivers/net/mana/rx.c | 9 ++++-----
drivers/net/mana/tx.c | 17 ++++++++++-------
4 files changed, 17 insertions(+), 22 deletions(-)
diff --git a/drivers/net/mana/gdma.c b/drivers/net/mana/gdma.c
index 3d4039014f..0922463ef9 100644
--- a/drivers/net/mana/gdma.c
+++ b/drivers/net/mana/gdma.c
@@ -123,7 +123,7 @@ write_scatter_gather_list(uint8_t *work_queue_head_pointer,
int
gdma_post_work_request(struct mana_gdma_queue *queue,
struct gdma_work_request *work_req,
- struct gdma_posted_wqe_info *wqe_info)
+ uint32_t *wqe_size_in_bu)
{
uint32_t client_oob_size =
work_req->inline_oob_size_in_bytes >
@@ -149,14 +149,7 @@ gdma_post_work_request(struct mana_gdma_queue *queue,
DRV_LOG(DEBUG, "client_oob_size %u sgl_data_size %u wqe_size %u",
client_oob_size, sgl_data_size, wqe_size);
- if (wqe_info) {
- wqe_info->wqe_index =
- ((queue->head * GDMA_WQE_ALIGNMENT_UNIT_SIZE) &
- (queue->size - 1)) / GDMA_WQE_ALIGNMENT_UNIT_SIZE;
- wqe_info->unmasked_queue_offset = queue->head;
- wqe_info->wqe_size_in_bu =
- wqe_size / GDMA_WQE_ALIGNMENT_UNIT_SIZE;
- }
+ *wqe_size_in_bu = wqe_size / GDMA_WQE_ALIGNMENT_UNIT_SIZE;
wq_buffer_pointer = gdma_get_wqe_pointer(queue);
wq_buffer_pointer += write_dma_client_oob(wq_buffer_pointer, work_req,
diff --git a/drivers/net/mana/mana.h b/drivers/net/mana/mana.h
index 4a05238a96..d4a1ba8492 100644
--- a/drivers/net/mana/mana.h
+++ b/drivers/net/mana/mana.h
@@ -459,7 +459,7 @@ int mana_rq_ring_doorbell(struct mana_rxq *rxq, uint8_t arm);
int gdma_post_work_request(struct mana_gdma_queue *queue,
struct gdma_work_request *work_req,
- struct gdma_posted_wqe_info *wqe_info);
+ uint32_t *wqe_size_in_bu);
uint8_t *gdma_get_wqe_pointer(struct mana_gdma_queue *queue);
uint16_t mana_rx_burst(void *dpdk_rxq, struct rte_mbuf **rx_pkts,
diff --git a/drivers/net/mana/rx.c b/drivers/net/mana/rx.c
index 55247889c1..bdbd11c5f9 100644
--- a/drivers/net/mana/rx.c
+++ b/drivers/net/mana/rx.c
@@ -52,8 +52,8 @@ mana_alloc_and_post_rx_wqe(struct mana_rxq *rxq)
{
struct rte_mbuf *mbuf = NULL;
struct gdma_sgl_element sgl[1];
- struct gdma_work_request request = {0};
- struct gdma_posted_wqe_info wqe_info = {0};
+ struct gdma_work_request request;
+ uint32_t wqe_size_in_bu;
struct mana_priv *priv = rxq->priv;
int ret;
struct mana_mr_cache *mr;
@@ -72,7 +72,6 @@ mana_alloc_and_post_rx_wqe(struct mana_rxq *rxq)
}
request.gdma_header.struct_size = sizeof(request);
- wqe_info.gdma_header.struct_size = sizeof(wqe_info);
sgl[0].address = rte_cpu_to_le_64(rte_pktmbuf_mtod(mbuf, uint64_t));
sgl[0].memory_key = mr->lkey;
@@ -87,14 +86,14 @@ mana_alloc_and_post_rx_wqe(struct mana_rxq *rxq)
request.flags = 0;
request.client_data_unit = NOT_USING_CLIENT_DATA_UNIT;
- ret = gdma_post_work_request(&rxq->gdma_rq, &request, &wqe_info);
+ ret = gdma_post_work_request(&rxq->gdma_rq, &request, &wqe_size_in_bu);
if (!ret) {
struct mana_rxq_desc *desc =
&rxq->desc_ring[rxq->desc_ring_head];
/* update queue for tracking pending packets */
desc->pkt = mbuf;
- desc->wqe_size_in_bu = wqe_info.wqe_size_in_bu;
+ desc->wqe_size_in_bu = wqe_size_in_bu;
rxq->desc_ring_head = (rxq->desc_ring_head + 1) % rxq->num_desc;
} else {
DRV_LOG(ERR, "failed to post recv ret %d", ret);
diff --git a/drivers/net/mana/tx.c b/drivers/net/mana/tx.c
index 300bf27cc1..a7ee47c582 100644
--- a/drivers/net/mana/tx.c
+++ b/drivers/net/mana/tx.c
@@ -208,8 +208,8 @@ mana_tx_burst(void *dpdk_txq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
for (uint16_t pkt_idx = 0; pkt_idx < nb_pkts; pkt_idx++) {
struct rte_mbuf *m_pkt = tx_pkts[pkt_idx];
struct rte_mbuf *m_seg = m_pkt;
- struct transmit_oob_v2 tx_oob = {0};
- struct one_sgl sgl = {0};
+ struct transmit_oob_v2 tx_oob;
+ struct one_sgl sgl;
uint16_t seg_idx;
/* Drop the packet if it exceeds max segments */
@@ -263,6 +263,8 @@ mana_tx_burst(void *dpdk_txq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
tx_oob.short_oob.tx_compute_TCP_checksum = 1;
tx_oob.short_oob.tx_transport_header_offset =
m_pkt->l2_len + m_pkt->l3_len;
+ } else {
+ tx_oob.short_oob.tx_compute_TCP_checksum = 0;
}
if ((m_pkt->ol_flags & RTE_MBUF_F_TX_L4_MASK) ==
@@ -301,6 +303,8 @@ mana_tx_burst(void *dpdk_txq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
}
tx_oob.short_oob.tx_compute_UDP_checksum = 1;
+ } else {
+ tx_oob.short_oob.tx_compute_UDP_checksum = 0;
}
tx_oob.short_oob.suppress_tx_CQE_generation = 0;
@@ -355,11 +359,10 @@ mana_tx_burst(void *dpdk_txq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
if (seg_idx != m_pkt->nb_segs)
continue;
- struct gdma_work_request work_req = {0};
- struct gdma_posted_wqe_info wqe_info = {0};
+ struct gdma_work_request work_req;
+ uint32_t wqe_size_in_bu;
work_req.gdma_header.struct_size = sizeof(work_req);
- wqe_info.gdma_header.struct_size = sizeof(wqe_info);
work_req.sgl = sgl.gdma_sgl;
work_req.num_sgl_elements = m_pkt->nb_segs;
@@ -370,14 +373,14 @@ mana_tx_burst(void *dpdk_txq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
work_req.client_data_unit = NOT_USING_CLIENT_DATA_UNIT;
ret = gdma_post_work_request(&txq->gdma_sq, &work_req,
- &wqe_info);
+ &wqe_size_in_bu);
if (!ret) {
struct mana_txq_desc *desc =
&txq->desc_ring[txq->desc_ring_head];
/* Update queue for tracking pending requests */
desc->pkt = m_pkt;
- desc->wqe_size_in_bu = wqe_info.wqe_size_in_bu;
+ desc->wqe_size_in_bu = wqe_size_in_bu;
txq->desc_ring_head =
(txq->desc_ring_head + 1) % txq->num_desc;
--
2.32.0
next reply other threads:[~2023-03-17 23:32 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-17 23:32 longli [this message]
2023-03-17 23:32 ` [PATCH 2/2] net/mana: optimize completion queue polling by processing a batch at a time longli
2023-05-02 18:23 ` Ferruh Yigit
2023-03-21 11:48 ` [PATCH 1/2] net/mana: avoid unnecessary assignments in data path Ferruh Yigit
2023-03-21 16:31 ` Long Li
2023-05-02 18:32 ` Ferruh Yigit
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1679095964-18532-1-git-send-email-longli@linuxonhyperv.com \
--to=longli@linuxonhyperv.com \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@amd.com \
--cc=longli@microsoft.com \
--cc=sharmaajay@microsoft.com \
--cc=stable@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).