mirror of
https://github.com/torvalds/linux.git
synced 2026-09-11 20:13:02 +02:00
net: ethernet: cortina: Count dropped frames as NAPI work
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: 4d5ae32f5e ("net: ethernet: Add a driver for Gemini gigabit ethernet")
Assisted-by: LLM
Signed-off-by: Linus Walleij <linusw@kernel.org>
Link: https://patch.msgid.link/20260903-gemini-ethernet-fixes-v2-3-2bbbd598ca6e@kernel.org
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
baa26841cb
commit
b856c552f5
|
|
@ -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;
|
||||
|
||||
err_drop:
|
||||
if (skb) {
|
||||
|
|
@ -1562,6 +1560,13 @@ static unsigned int gmac_rx(struct net_device *netdev, unsigned int budget)
|
|||
put_page(page);
|
||||
|
||||
port->stats.rx_dropped++;
|
||||
|
||||
next_desc:
|
||||
/* Final or single-descriptor fragment, advance things */
|
||||
if (word3.bits32 & EOF_BIT) {
|
||||
budget--;
|
||||
received++;
|
||||
}
|
||||
}
|
||||
|
||||
port->rx_skb = skb;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user