From 370c99b4ecacdb588d59204e5c4f92c8de35916b Mon Sep 17 00:00:00 2001 From: Markus Stockhausen Date: Mon, 23 Feb 2026 18:44:29 +0100 Subject: [PATCH] realtek: eth: simplify napi handler rteth_hw_receive() already has a loop that checks how much work may be done. No need to repeat that in the caller too. While we are here adapt the function prefix. Signed-off-by: Markus Stockhausen Link: https://github.com/openwrt/openwrt/pull/22156 Signed-off-by: Robert Marko --- .../drivers/net/ethernet/rtl838x_eth.c | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c b/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c index 779aa6fac6..95ec33d25b 100644 --- a/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c +++ b/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c @@ -1085,21 +1085,13 @@ static int rteth_hw_receive(struct net_device *dev, int ring, int budget) return work_done; } -static int rtl838x_poll_rx(struct napi_struct *napi, int budget) +static int rteth_poll_rx(struct napi_struct *napi, int budget) { struct rtl838x_rx_q *rx_q = container_of(napi, struct rtl838x_rx_q, napi); struct rteth_ctrl *ctrl = rx_q->ctrl; - int ring = rx_q->id; - int work_done = 0; - - while (work_done < budget) { - int work = rteth_hw_receive(ctrl->netdev, ring, budget - work_done); - - if (!work) - break; - work_done += work; - } + int work_done, ring = rx_q->id; + work_done = rteth_hw_receive(ctrl->netdev, ring, budget); if (work_done < budget && napi_complete_done(napi, work_done)) rteth_reenable_irq(ctrl, ring); @@ -1707,7 +1699,7 @@ static int rtl838x_eth_probe(struct platform_device *pdev) for (int i = 0; i < RTETH_RX_RINGS; i++) { ctrl->rx_qs[i].id = i; ctrl->rx_qs[i].ctrl = ctrl; - netif_napi_add(dev, &ctrl->rx_qs[i].napi, rtl838x_poll_rx); + netif_napi_add(dev, &ctrl->rx_qs[i].napi, rteth_poll_rx); } platform_set_drvdata(pdev, dev);