All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joe Damato <joe@dama.to>
To: Linus Walleij <linusw@kernel.org>
Cc: "Hans Ulli Kroll" <ulli.kroll@googlemail.com>,
	"Andrew Lunn" <andrew+netdev@lunn.ch>,
	"David S. Miller" <davem@davemloft.net>,
	"Eric Dumazet" <edumazet@google.com>,
	"Jakub Kicinski" <kuba@kernel.org>,
	"Paolo Abeni" <pabeni@redhat.com>,
	"Michał Mirosław" <mirq-linux@rere.qmqm.pl>,
	netdev@vger.kernel.org
Subject: Re: [PATCH 2/3] net: ethernet: cortina: Count dropped frames as NAPI work
Date: Tue, 1 Sep 2026 15:00:05 -0700	[thread overview]
Message-ID: <apdK5aMmvYssz35F@devvm20253.cco0.facebook.com> (raw)
In-Reply-To: <20260901-gemini-ethernet-fixes-v1-2-ee6b09675876@kernel.org>

On Tue, Sep 01, 2026 at 07:04:56PM +0200, Linus Walleij wrote:
> The RX loop only consumes budget when it successfully delivers a frame.
> Error paths keep consuming descriptors without reducing the budget, so a
> stream of bad frames can process the entire receive ring in one poll.
> 
> Move the budget accounting to a common end-of-frame path. This counts
> each completed frame as NAPI work whether it was delivered or dropped,
> matching the behavior of the vendor driver.
> 
> Fixes: 4d5ae32f5e1e ("net: ethernet: Add a driver for Gemini gigabit ethernet")
> Assisted-by: LLM
> Signed-off-by: Linus Walleij <linusw@kernel.org>
> ---
>  drivers/net/ethernet/cortina/gemini.c | 30 +++++++++++++++++-------------
>  1 file changed, 17 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/net/ethernet/cortina/gemini.c b/drivers/net/ethernet/cortina/gemini.c
> index 1d9824d1716c..699354604b93 100644
> --- a/drivers/net/ethernet/cortina/gemini.c
> +++ b/drivers/net/ethernet/cortina/gemini.c
> @@ -1450,7 +1450,7 @@ static unsigned int gmac_rx(struct net_device *netdev, unsigned int budget)
>  	unsigned int frame_len, frag_len;
>  	struct gmac_rxdesc *rx = NULL;
>  	struct gmac_queue_page *gpage;
> -	unsigned int received = 0;
> +	unsigned int work_done = 0;
>  	union gmac_rxdesc_0 word0;
>  	union gmac_rxdesc_1 word1;
>  	union gmac_rxdesc_3 word3;
> @@ -1501,7 +1501,7 @@ static unsigned int gmac_rx(struct net_device *netdev, unsigned int budget)
>  				skb = NULL;
>  				frag_nr = 0;
>  			}
> -			continue;
> +			goto next_desc;
>  		}
>  		page = gpage->page;
>  
> @@ -1523,7 +1523,7 @@ static unsigned int gmac_rx(struct net_device *netdev, unsigned int budget)
>  
>  		} else if (!skb) {
>  			put_page(page);
> -			continue;
> +			goto next_desc;
>  		}
>  
>  		if (word3.bits32 & EOF_BIT)
> @@ -1546,10 +1546,8 @@ static unsigned int gmac_rx(struct net_device *netdev, unsigned int budget)
>  			napi_gro_frags(&port->napi);
>  			skb = NULL;
>  			frag_nr = 0;
> -			budget--;
> -			received++;
>  		}
> -		continue;
> +		goto next_desc;

if i understand correctly, removing the continue here results in the success
case several blocks above here jumping to next_desc. in that case, is
word3.bits32 & EOF_BIT always true? just asking because it looked like in the
success case the SOF_BIT is set and wanted to check that the budget and
work_done math that is being moved down to next_desc will still be run.

>  
>  err_drop:
>  		if (skb) {
> @@ -1562,12 +1560,18 @@ static unsigned int gmac_rx(struct net_device *netdev, unsigned int budget)
>  			put_page(page);
>  
>  		port->stats.rx_dropped++;
> +
> +next_desc:
> +		if (word3.bits32 & EOF_BIT) {
> +			budget--;
> +			work_done++;
> +		}

idk if it matters but i noted that the commit message says:

  > Move the budget accounting to a common end-of-frame path. This counts
  > each completed frame as NAPI work whether it was delivered or dropped,

but i noted that some of the jumps to next_desc don't seem to increment
port->stats.rx_dropped, but others do.

not sure if that matters for the correctness of the stats

  parent reply	other threads:[~2026-09-01 22:00 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-01 17:04 [PATCH 0/3] net: ethernet: cortina: Fix RX budget accounting Linus Walleij
2026-09-01 17:04 ` [PATCH 1/3] net: ethernet: cortina: Fix " Linus Walleij
2026-09-01 20:20   ` Joe Damato
2026-09-01 17:04 ` [PATCH 2/3] net: ethernet: cortina: Count dropped frames as NAPI work Linus Walleij
2026-09-01 20:09   ` Joe Damato
2026-09-01 22:38     ` Jakub Kicinski
2026-09-01 22:00   ` Joe Damato [this message]
2026-09-01 22:37   ` Jakub Kicinski
2026-09-02  7:53     ` Linus Walleij
2026-09-01 17:04 ` [PATCH 3/3] net: ethernet: cortina: Count RX descriptors for freeq refill Linus Walleij
2026-09-01 22:01   ` Joe Damato

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=apdK5aMmvYssz35F@devvm20253.cco0.facebook.com \
    --to=joe@dama.to \
    --cc=andrew+netdev@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=kuba@kernel.org \
    --cc=linusw@kernel.org \
    --cc=mirq-linux@rere.qmqm.pl \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=ulli.kroll@googlemail.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.