From: <darinzon@amazon.com>
To: David Miller <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>, <netdev@vger.kernel.org>
Cc: David Arinzon <darinzon@amazon.com>,
"Woodhouse, David" <dwmw@amazon.com>,
"Machulsky, Zorik" <zorik@amazon.com>,
"Matushevsky, Alexander" <matua@amazon.com>,
Saeed Bshara <saeedb@amazon.com>, "Wilson, Matt" <msw@amazon.com>,
"Liguori, Anthony" <aliguori@amazon.com>,
"Bshara, Nafea" <nafea@amazon.com>,
"Belgazal, Netanel" <netanel@amazon.com>,
"Saidi, Ali" <alisaidi@amazon.com>,
"Herrenschmidt, Benjamin" <benh@amazon.com>,
"Kiyanovski, Arthur" <akiyano@amazon.com>,
"Dagan, Noam" <ndagan@amazon.com>,
"Agroskin, Shay" <shayagr@amazon.com>,
"Itzko, Shahar" <itzko@amazon.com>,
"Abboud, Osama" <osamaabb@amazon.com>,
"Ostrovsky, Evgeny" <evostrov@amazon.com>,
"Tabachnik, Ofir" <ofirt@amazon.com>
Subject: [PATCH v2 net-next 07/11] net: ena: Refactor napi functions
Date: Mon, 1 Jan 2024 19:08:51 +0000 [thread overview]
Message-ID: <20240101190855.18739-8-darinzon@amazon.com> (raw)
In-Reply-To: <20240101190855.18739-1-darinzon@amazon.com>
From: David Arinzon <darinzon@amazon.com>
This patch focuses on changes to the XDP part of the napi
polling routine.
1. Update the `napi_comp` stat only when napi is actually
complete.
2. Simplify the code by using a function pointer to the right
napi routine (XDP vs non-XDP path)
3. Remove unnecessary local variables.
4. Adjust a debug print to show the processed XDP frame index
rather than the pointer.
Signed-off-by: David Arinzon <darinzon@amazon.com>
---
drivers/net/ethernet/amazon/ena/ena_netdev.c | 18 +++++++---
drivers/net/ethernet/amazon/ena/ena_xdp.c | 35 +++++++++-----------
2 files changed, 30 insertions(+), 23 deletions(-)
diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c
index 6ababac..d65ee64 100644
--- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
+++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
@@ -1754,18 +1754,28 @@ static void ena_del_napi_in_range(struct ena_adapter *adapter,
static void ena_init_napi_in_range(struct ena_adapter *adapter,
int first_index, int count)
{
+ int (*napi_handler)(struct napi_struct *napi, int budget);
int i;
for (i = first_index; i < first_index + count; i++) {
struct ena_napi *napi = &adapter->ena_napi[i];
+ struct ena_ring *rx_ring, *tx_ring;
- netif_napi_add(adapter->netdev, &napi->napi,
- ENA_IS_XDP_INDEX(adapter, i) ? ena_xdp_io_poll : ena_io_poll);
+ memset(napi, 0, sizeof(*napi));
+
+ rx_ring = &adapter->rx_ring[i];
+ tx_ring = &adapter->tx_ring[i];
+
+ napi_handler = ena_io_poll;
+ if (ENA_IS_XDP_INDEX(adapter, i))
+ napi_handler = ena_xdp_io_poll;
+
+ netif_napi_add(adapter->netdev, &napi->napi, napi_handler);
if (!ENA_IS_XDP_INDEX(adapter, i))
- napi->rx_ring = &adapter->rx_ring[i];
+ napi->rx_ring = rx_ring;
- napi->tx_ring = &adapter->tx_ring[i];
+ napi->tx_ring = tx_ring;
napi->qid = i;
}
}
diff --git a/drivers/net/ethernet/amazon/ena/ena_xdp.c b/drivers/net/ethernet/amazon/ena/ena_xdp.c
index 363e361..dd01b41 100644
--- a/drivers/net/ethernet/amazon/ena/ena_xdp.c
+++ b/drivers/net/ethernet/amazon/ena/ena_xdp.c
@@ -385,23 +385,22 @@ static int ena_clean_xdp_irq(struct ena_ring *tx_ring, u32 budget)
break;
tx_info = &tx_ring->tx_buffer_info[req_id];
- xdpf = tx_info->xdpf;
- tx_info->xdpf = NULL;
tx_info->last_jiffies = 0;
- ena_unmap_tx_buff(tx_ring, tx_info);
- netif_dbg(tx_ring->adapter, tx_done, tx_ring->netdev,
- "tx_poll: q %d skb %p completed\n", tx_ring->qid,
- xdpf);
+ xdpf = tx_info->xdpf;
+ tx_info->xdpf = NULL;
+ ena_unmap_tx_buff(tx_ring, tx_info);
+ xdp_return_frame(xdpf);
tx_pkts++;
total_done += tx_info->tx_descs;
-
- xdp_return_frame(xdpf);
tx_ring->free_ids[next_to_clean] = req_id;
next_to_clean = ENA_TX_RING_IDX_NEXT(next_to_clean,
tx_ring->ring_size);
+
+ netif_dbg(tx_ring->adapter, tx_done, tx_ring->netdev,
+ "tx_poll: q %d pkt #%d req_id %d\n", tx_ring->qid, tx_pkts, req_id);
}
tx_ring->next_to_clean = next_to_clean;
@@ -421,22 +420,19 @@ static int ena_clean_xdp_irq(struct ena_ring *tx_ring, u32 budget)
int ena_xdp_io_poll(struct napi_struct *napi, int budget)
{
struct ena_napi *ena_napi = container_of(napi, struct ena_napi, napi);
- u32 xdp_work_done, xdp_budget;
struct ena_ring *tx_ring;
- int napi_comp_call = 0;
+ u32 work_done;
int ret;
tx_ring = ena_napi->tx_ring;
- xdp_budget = budget;
-
if (!test_bit(ENA_FLAG_DEV_UP, &tx_ring->adapter->flags) ||
test_bit(ENA_FLAG_TRIGGER_RESET, &tx_ring->adapter->flags)) {
napi_complete_done(napi, 0);
return 0;
}
- xdp_work_done = ena_clean_xdp_irq(tx_ring, xdp_budget);
+ work_done = ena_clean_xdp_irq(tx_ring, budget);
/* If the device is about to reset or down, avoid unmask
* the interrupt and return 0 so NAPI won't reschedule
@@ -444,18 +440,19 @@ int ena_xdp_io_poll(struct napi_struct *napi, int budget)
if (unlikely(!test_bit(ENA_FLAG_DEV_UP, &tx_ring->adapter->flags))) {
napi_complete_done(napi, 0);
ret = 0;
- } else if (xdp_budget > xdp_work_done) {
- napi_comp_call = 1;
- if (napi_complete_done(napi, xdp_work_done))
+ } else if (budget > work_done) {
+ ena_increase_stat(&tx_ring->tx_stats.napi_comp, 1,
+ &tx_ring->syncp);
+ if (napi_complete_done(napi, work_done))
ena_unmask_interrupt(tx_ring, NULL);
+
ena_update_ring_numa_node(tx_ring, NULL);
- ret = xdp_work_done;
+ ret = work_done;
} else {
- ret = xdp_budget;
+ ret = budget;
}
u64_stats_update_begin(&tx_ring->syncp);
- tx_ring->tx_stats.napi_comp += napi_comp_call;
tx_ring->tx_stats.tx_poll++;
u64_stats_update_end(&tx_ring->syncp);
tx_ring->tx_stats.last_napi_jiffies = jiffies;
--
2.40.1
next prev parent reply other threads:[~2024-01-01 19:09 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-01 19:08 [PATCH v2 net-next 00/11] ENA driver XDP changes darinzon
2024-01-01 19:08 ` [PATCH v2 net-next 01/11] net: ena: Move XDP code to its new files darinzon
2024-01-01 19:08 ` [PATCH v2 net-next 02/11] net: ena: Pass ena_adapter instead of net_device to ena_xmit_common() darinzon
2024-01-01 19:08 ` [PATCH v2 net-next 03/11] net: ena: Put orthogonal fields in ena_tx_buffer in a union darinzon
2024-01-01 19:08 ` [PATCH v2 net-next 04/11] net: ena: Introduce total_tx_size field in ena_tx_buffer struct darinzon
2024-01-01 19:08 ` [PATCH v2 net-next 05/11] net: ena: Use tx_ring instead of xdp_ring for XDP channel TX darinzon
2024-01-01 19:08 ` [PATCH v2 net-next 06/11] net: ena: Don't check if XDP program is loaded in ena_xdp_execute() darinzon
2024-01-01 19:08 ` darinzon [this message]
2024-01-04 2:00 ` [PATCH v2 net-next 07/11] net: ena: Refactor napi functions Jakub Kicinski
2024-01-04 6:49 ` Arinzon, David
2024-01-01 19:08 ` [PATCH v2 net-next 08/11] net: ena: Add more debug prints to XDP related function darinzon
2024-01-01 19:08 ` [PATCH v2 net-next 09/11] net: ena: Always register RX queue info darinzon
2024-01-01 19:08 ` [PATCH v2 net-next 10/11] net: ena: Make queue stats code cleaner by removing the if block darinzon
2024-01-01 19:08 ` [PATCH v2 net-next 11/11] net: ena: Take xdp packets stats into account in ena_get_stats64() darinzon
2024-01-02 18:08 ` [PATCH v2 net-next 00/11] ENA driver XDP changes Jakub Kicinski
2024-01-03 7:08 ` Arinzon, David
2024-01-03 22:18 ` Jakub Kicinski
2024-01-04 2:10 ` patchwork-bot+netdevbpf
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=20240101190855.18739-8-darinzon@amazon.com \
--to=darinzon@amazon.com \
--cc=akiyano@amazon.com \
--cc=aliguori@amazon.com \
--cc=alisaidi@amazon.com \
--cc=benh@amazon.com \
--cc=davem@davemloft.net \
--cc=dwmw@amazon.com \
--cc=evostrov@amazon.com \
--cc=itzko@amazon.com \
--cc=kuba@kernel.org \
--cc=matua@amazon.com \
--cc=msw@amazon.com \
--cc=nafea@amazon.com \
--cc=ndagan@amazon.com \
--cc=netanel@amazon.com \
--cc=netdev@vger.kernel.org \
--cc=ofirt@amazon.com \
--cc=osamaabb@amazon.com \
--cc=saeedb@amazon.com \
--cc=shayagr@amazon.com \
--cc=zorik@amazon.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.