| From 22230e68b2cf1ab6b027be8cf1198164a949c4fa Mon Sep 17 00:00:00 2001 |
| From: Marek Vasut <marex@nabladev.com> |
| Date: Thu, 16 Apr 2026 01:09:45 +0200 |
| Subject: net: ks8851: Avoid excess softirq scheduling |
| |
| From: Marek Vasut <marex@nabladev.com> |
| |
| commit 22230e68b2cf1ab6b027be8cf1198164a949c4fa upstream. |
| |
| The code injects a packet into netif_rx() repeatedly, which will add |
| it to its internal NAPI and schedule a softirq, and process it. It is |
| more efficient to queue multiple packets and process them all at the |
| local_bh_enable() time. |
| |
| Reviewed-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> |
| Fixes: e0863634bf9f ("net: ks8851: Queue RX packets in IRQ handler instead of disabling BHs") |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Marek Vasut <marex@nabladev.com> |
| Link: https://patch.msgid.link/20260415231020.455298-2-marex@nabladev.com |
| Signed-off-by: Jakub Kicinski <kuba@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/ethernet/micrel/ks8851_common.c | 5 ++++- |
| 1 file changed, 4 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/net/ethernet/micrel/ks8851_common.c |
| +++ b/drivers/net/ethernet/micrel/ks8851_common.c |
| @@ -389,9 +389,12 @@ static irqreturn_t ks8851_irq(int irq, v |
| if (status & IRQ_LCI) |
| mii_check_link(&ks->mii); |
| |
| - if (status & IRQ_RXI) |
| + if (status & IRQ_RXI) { |
| + local_bh_disable(); |
| while ((skb = __skb_dequeue(&rxq))) |
| netif_rx(skb); |
| + local_bh_enable(); |
| + } |
| |
| return IRQ_HANDLED; |
| } |