From: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
To: Kurt Kanzenbach <kurt@linutronix.de>
Cc: Tony Nguyen <anthony.l.nguyen@intel.com>,
Przemek Kitszel <przemyslaw.kitszel@intel.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>,
"Paolo Abeni" <pabeni@redhat.com>,
Alexei Starovoitov <ast@kernel.org>,
"Daniel Borkmann" <daniel@iogearbox.net>,
Jesper Dangaard Brouer <hawk@kernel.org>,
John Fastabend <john.fastabend@gmail.com>,
Richard Cochran <richardcochran@gmail.com>,
Sriram Yagnaraman <sriram.yagnaraman@ericsson.com>,
Benjamin Steinke <benjamin.steinke@woks-audio.com>,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
<intel-wired-lan@lists.osuosl.org>, <netdev@vger.kernel.org>,
<bpf@vger.kernel.org>
Subject: Re: [PATCH iwl-next v8 4/6] igb: Add XDP finalize and stats update functions
Date: Tue, 15 Oct 2024 14:05:20 +0200 [thread overview]
Message-ID: <Zw5agKXFRJ84u1c8@boxer> (raw)
In-Reply-To: <20241011-b4-igb_zero_copy-v8-4-83862f726a9e@linutronix.de>
On Fri, Oct 11, 2024 at 11:01:02AM +0200, Kurt Kanzenbach wrote:
> Move XDP finalize and Rx statistics update into separate functions. This
> way, they can be reused by the XDP and XDP/ZC code later.
>
> Signed-off-by: Kurt Kanzenbach <kurt@linutronix.de>
Acked-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
> ---
> drivers/net/ethernet/intel/igb/igb.h | 3 ++
> drivers/net/ethernet/intel/igb/igb_main.c | 54 ++++++++++++++++++++-----------
> 2 files changed, 38 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/igb/igb.h b/drivers/net/ethernet/intel/igb/igb.h
> index c30d6f9708f8..1e65b41a48d8 100644
> --- a/drivers/net/ethernet/intel/igb/igb.h
> +++ b/drivers/net/ethernet/intel/igb/igb.h
> @@ -740,6 +740,9 @@ void igb_clean_tx_ring(struct igb_ring *tx_ring);
> void igb_clean_rx_ring(struct igb_ring *rx_ring);
> void igb_configure_tx_ring(struct igb_adapter *, struct igb_ring *);
> void igb_configure_rx_ring(struct igb_adapter *, struct igb_ring *);
> +void igb_finalize_xdp(struct igb_adapter *adapter, unsigned int status);
> +void igb_update_rx_stats(struct igb_q_vector *q_vector, unsigned int packets,
> + unsigned int bytes);
> void igb_setup_tctl(struct igb_adapter *);
> void igb_setup_rctl(struct igb_adapter *);
> void igb_setup_srrctl(struct igb_adapter *, struct igb_ring *);
> diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
> index 341b83e39019..4d3aed6cd848 100644
> --- a/drivers/net/ethernet/intel/igb/igb_main.c
> +++ b/drivers/net/ethernet/intel/igb/igb_main.c
> @@ -8852,6 +8852,38 @@ static void igb_put_rx_buffer(struct igb_ring *rx_ring,
> rx_buffer->page = NULL;
> }
>
> +void igb_finalize_xdp(struct igb_adapter *adapter, unsigned int status)
> +{
> + int cpu = smp_processor_id();
> + struct netdev_queue *nq;
> +
> + if (status & IGB_XDP_REDIR)
> + xdp_do_flush();
> +
> + if (status & IGB_XDP_TX) {
> + struct igb_ring *tx_ring = igb_xdp_tx_queue_mapping(adapter);
> +
> + nq = txring_txq(tx_ring);
> + __netif_tx_lock(nq, cpu);
> + igb_xdp_ring_update_tail(tx_ring);
> + __netif_tx_unlock(nq);
> + }
> +}
> +
> +void igb_update_rx_stats(struct igb_q_vector *q_vector, unsigned int packets,
> + unsigned int bytes)
> +{
> + struct igb_ring *ring = q_vector->rx.ring;
> +
> + u64_stats_update_begin(&ring->rx_syncp);
> + ring->rx_stats.packets += packets;
> + ring->rx_stats.bytes += bytes;
> + u64_stats_update_end(&ring->rx_syncp);
> +
> + q_vector->rx.total_packets += packets;
> + q_vector->rx.total_bytes += bytes;
> +}
> +
> static int igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget)
> {
> unsigned int total_bytes = 0, total_packets = 0;
> @@ -8859,9 +8891,7 @@ static int igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget)
> struct igb_ring *rx_ring = q_vector->rx.ring;
> u16 cleaned_count = igb_desc_unused(rx_ring);
> struct sk_buff *skb = rx_ring->skb;
> - int cpu = smp_processor_id();
> unsigned int xdp_xmit = 0;
> - struct netdev_queue *nq;
> struct xdp_buff xdp;
> u32 frame_sz = 0;
> int rx_buf_pgcnt;
> @@ -8983,24 +9013,10 @@ static int igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget)
> /* place incomplete frames back on ring for completion */
> rx_ring->skb = skb;
>
> - if (xdp_xmit & IGB_XDP_REDIR)
> - xdp_do_flush();
> -
> - if (xdp_xmit & IGB_XDP_TX) {
> - struct igb_ring *tx_ring = igb_xdp_tx_queue_mapping(adapter);
> -
> - nq = txring_txq(tx_ring);
> - __netif_tx_lock(nq, cpu);
> - igb_xdp_ring_update_tail(tx_ring);
> - __netif_tx_unlock(nq);
> - }
> + if (xdp_xmit)
> + igb_finalize_xdp(adapter, xdp_xmit);
>
> - u64_stats_update_begin(&rx_ring->rx_syncp);
> - rx_ring->rx_stats.packets += total_packets;
> - rx_ring->rx_stats.bytes += total_bytes;
> - u64_stats_update_end(&rx_ring->rx_syncp);
> - q_vector->rx.total_packets += total_packets;
> - q_vector->rx.total_bytes += total_bytes;
> + igb_update_rx_stats(q_vector, total_packets, total_bytes);
>
> if (cleaned_count)
> igb_alloc_rx_buffers(rx_ring, cleaned_count);
>
> --
> 2.39.5
>
WARNING: multiple messages have this Message-ID (diff)
From: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
To: Kurt Kanzenbach <kurt@linutronix.de>
Cc: Jesper Dangaard Brouer <hawk@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Przemek Kitszel <przemyslaw.kitszel@intel.com>,
Richard Cochran <richardcochran@gmail.com>,
John Fastabend <john.fastabend@gmail.com>,
Alexei Starovoitov <ast@kernel.org>,
Sriram Yagnaraman <sriram.yagnaraman@ericsson.com>,
Benjamin Steinke <benjamin.steinke@woks-audio.com>,
Eric Dumazet <edumazet@google.com>,
netdev@vger.kernel.org, Tony Nguyen <anthony.l.nguyen@intel.com>,
intel-wired-lan@lists.osuosl.org,
Jakub Kicinski <kuba@kernel.org>,
bpf@vger.kernel.org, Paolo Abeni <pabeni@redhat.com>,
"David S. Miller" <davem@davemloft.net>,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Subject: Re: [Intel-wired-lan] [PATCH iwl-next v8 4/6] igb: Add XDP finalize and stats update functions
Date: Tue, 15 Oct 2024 14:05:20 +0200 [thread overview]
Message-ID: <Zw5agKXFRJ84u1c8@boxer> (raw)
In-Reply-To: <20241011-b4-igb_zero_copy-v8-4-83862f726a9e@linutronix.de>
On Fri, Oct 11, 2024 at 11:01:02AM +0200, Kurt Kanzenbach wrote:
> Move XDP finalize and Rx statistics update into separate functions. This
> way, they can be reused by the XDP and XDP/ZC code later.
>
> Signed-off-by: Kurt Kanzenbach <kurt@linutronix.de>
Acked-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
> ---
> drivers/net/ethernet/intel/igb/igb.h | 3 ++
> drivers/net/ethernet/intel/igb/igb_main.c | 54 ++++++++++++++++++++-----------
> 2 files changed, 38 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/igb/igb.h b/drivers/net/ethernet/intel/igb/igb.h
> index c30d6f9708f8..1e65b41a48d8 100644
> --- a/drivers/net/ethernet/intel/igb/igb.h
> +++ b/drivers/net/ethernet/intel/igb/igb.h
> @@ -740,6 +740,9 @@ void igb_clean_tx_ring(struct igb_ring *tx_ring);
> void igb_clean_rx_ring(struct igb_ring *rx_ring);
> void igb_configure_tx_ring(struct igb_adapter *, struct igb_ring *);
> void igb_configure_rx_ring(struct igb_adapter *, struct igb_ring *);
> +void igb_finalize_xdp(struct igb_adapter *adapter, unsigned int status);
> +void igb_update_rx_stats(struct igb_q_vector *q_vector, unsigned int packets,
> + unsigned int bytes);
> void igb_setup_tctl(struct igb_adapter *);
> void igb_setup_rctl(struct igb_adapter *);
> void igb_setup_srrctl(struct igb_adapter *, struct igb_ring *);
> diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
> index 341b83e39019..4d3aed6cd848 100644
> --- a/drivers/net/ethernet/intel/igb/igb_main.c
> +++ b/drivers/net/ethernet/intel/igb/igb_main.c
> @@ -8852,6 +8852,38 @@ static void igb_put_rx_buffer(struct igb_ring *rx_ring,
> rx_buffer->page = NULL;
> }
>
> +void igb_finalize_xdp(struct igb_adapter *adapter, unsigned int status)
> +{
> + int cpu = smp_processor_id();
> + struct netdev_queue *nq;
> +
> + if (status & IGB_XDP_REDIR)
> + xdp_do_flush();
> +
> + if (status & IGB_XDP_TX) {
> + struct igb_ring *tx_ring = igb_xdp_tx_queue_mapping(adapter);
> +
> + nq = txring_txq(tx_ring);
> + __netif_tx_lock(nq, cpu);
> + igb_xdp_ring_update_tail(tx_ring);
> + __netif_tx_unlock(nq);
> + }
> +}
> +
> +void igb_update_rx_stats(struct igb_q_vector *q_vector, unsigned int packets,
> + unsigned int bytes)
> +{
> + struct igb_ring *ring = q_vector->rx.ring;
> +
> + u64_stats_update_begin(&ring->rx_syncp);
> + ring->rx_stats.packets += packets;
> + ring->rx_stats.bytes += bytes;
> + u64_stats_update_end(&ring->rx_syncp);
> +
> + q_vector->rx.total_packets += packets;
> + q_vector->rx.total_bytes += bytes;
> +}
> +
> static int igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget)
> {
> unsigned int total_bytes = 0, total_packets = 0;
> @@ -8859,9 +8891,7 @@ static int igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget)
> struct igb_ring *rx_ring = q_vector->rx.ring;
> u16 cleaned_count = igb_desc_unused(rx_ring);
> struct sk_buff *skb = rx_ring->skb;
> - int cpu = smp_processor_id();
> unsigned int xdp_xmit = 0;
> - struct netdev_queue *nq;
> struct xdp_buff xdp;
> u32 frame_sz = 0;
> int rx_buf_pgcnt;
> @@ -8983,24 +9013,10 @@ static int igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget)
> /* place incomplete frames back on ring for completion */
> rx_ring->skb = skb;
>
> - if (xdp_xmit & IGB_XDP_REDIR)
> - xdp_do_flush();
> -
> - if (xdp_xmit & IGB_XDP_TX) {
> - struct igb_ring *tx_ring = igb_xdp_tx_queue_mapping(adapter);
> -
> - nq = txring_txq(tx_ring);
> - __netif_tx_lock(nq, cpu);
> - igb_xdp_ring_update_tail(tx_ring);
> - __netif_tx_unlock(nq);
> - }
> + if (xdp_xmit)
> + igb_finalize_xdp(adapter, xdp_xmit);
>
> - u64_stats_update_begin(&rx_ring->rx_syncp);
> - rx_ring->rx_stats.packets += total_packets;
> - rx_ring->rx_stats.bytes += total_bytes;
> - u64_stats_update_end(&rx_ring->rx_syncp);
> - q_vector->rx.total_packets += total_packets;
> - q_vector->rx.total_bytes += total_bytes;
> + igb_update_rx_stats(q_vector, total_packets, total_bytes);
>
> if (cleaned_count)
> igb_alloc_rx_buffers(rx_ring, cleaned_count);
>
> --
> 2.39.5
>
next prev parent reply other threads:[~2024-10-15 12:05 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-11 9:00 [PATCH iwl-next v8 0/6] igb: Add support for AF_XDP zero-copy Kurt Kanzenbach
2024-10-11 9:00 ` [Intel-wired-lan] " Kurt Kanzenbach
2024-10-11 9:00 ` [PATCH iwl-next v8 1/6] igb: Remove static qualifiers Kurt Kanzenbach
2024-10-11 9:00 ` [Intel-wired-lan] " Kurt Kanzenbach
2024-10-11 9:01 ` [PATCH iwl-next v8 2/6] igb: Introduce igb_xdp_is_enabled() Kurt Kanzenbach
2024-10-11 9:01 ` [Intel-wired-lan] " Kurt Kanzenbach
2024-10-11 9:01 ` [PATCH iwl-next v8 3/6] igb: Introduce XSK data structures and helpers Kurt Kanzenbach
2024-10-11 9:01 ` [Intel-wired-lan] " Kurt Kanzenbach
2024-10-11 9:01 ` [PATCH iwl-next v8 4/6] igb: Add XDP finalize and stats update functions Kurt Kanzenbach
2024-10-11 9:01 ` [Intel-wired-lan] " Kurt Kanzenbach
2024-10-15 12:05 ` Maciej Fijalkowski [this message]
2024-10-15 12:05 ` Maciej Fijalkowski
2024-10-11 9:01 ` [PATCH iwl-next v8 5/6] igb: Add AF_XDP zero-copy Rx support Kurt Kanzenbach
2024-10-11 9:01 ` [Intel-wired-lan] " Kurt Kanzenbach
2024-10-15 12:15 ` Maciej Fijalkowski
2024-10-15 12:15 ` [Intel-wired-lan] " Maciej Fijalkowski
2024-10-11 9:01 ` [PATCH iwl-next v8 6/6] igb: Add AF_XDP zero-copy Tx support Kurt Kanzenbach
2024-10-11 9:01 ` [Intel-wired-lan] " Kurt Kanzenbach
2024-10-15 13:28 ` Maciej Fijalkowski
2024-10-15 13:28 ` [Intel-wired-lan] " Maciej Fijalkowski
2024-10-15 17:16 ` Kurt Kanzenbach
2024-10-15 17:16 ` [Intel-wired-lan] " Kurt Kanzenbach
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=Zw5agKXFRJ84u1c8@boxer \
--to=maciej.fijalkowski@intel.com \
--cc=anthony.l.nguyen@intel.com \
--cc=ast@kernel.org \
--cc=benjamin.steinke@woks-audio.com \
--cc=bigeasy@linutronix.de \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=hawk@kernel.org \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=john.fastabend@gmail.com \
--cc=kuba@kernel.org \
--cc=kurt@linutronix.de \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=przemyslaw.kitszel@intel.com \
--cc=richardcochran@gmail.com \
--cc=sriram.yagnaraman@ericsson.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.