diff --git a/patches-sonic/driver-arista-net-tg3-napi-enable-called-flag.patch b/patches-sonic/driver-arista-net-tg3-napi-enable-called-flag.patch new file mode 100644 index 000000000..c3f1b64d8 --- /dev/null +++ b/patches-sonic/driver-arista-net-tg3-napi-enable-called-flag.patch @@ -0,0 +1,90 @@ +From 821f6d79ad2773e0ff1537c0bb3c7af93a694709 Mon Sep 17 00:00:00 2001 +From: Yury Murashka +Date: Thu, 8 May 2026 00:00:00 +0000 +Subject: tg3: guard napi_disable and pci_disable_device calls + +Add a napi_enabled flag to struct tg3 to track whether napi_enable has +been called. Guard tg3_napi_disable() against being called before +tg3_napi_enable(), logging an error if that happens. Also guard +pci_disable_device() calls in tg3_remove_one() and tg3_shutdown() with +pci_is_enabled() to avoid disabling an already-disabled device. + +Signed-off-by: Yury Murashka +--- + drivers/net/ethernet/broadcom/tg3.c | 19 +++++++++++++++++-- + drivers/net/ethernet/broadcom/tg3.h | 1 + + 2 files changed, 18 insertions(+), 2 deletions(-) + +diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c +index 52adda7..63f8f44 100644 +--- a/drivers/net/ethernet/broadcom/tg3.c ++++ b/drivers/net/ethernet/broadcom/tg3.c +@@ -7432,6 +7432,17 @@ tx_recovery: + static void tg3_napi_disable(struct tg3 *tp) + { + int i; ++ struct net_device *netdev = tp->dev; ++ ++ if (!tp->napi_enabled) { ++ netdev_err(netdev, "%s() called when napi_enable wasn't " ++ "called before, netif_running=%d, pci_enabled=%d\n", ++ __func__, netif_running(netdev), ++ pci_is_enabled(tp->pdev)); ++ return; ++ } ++ ++ tp->napi_enabled = false; + + for (i = tp->irq_cnt - 1; i >= 0; i--) + napi_disable(&tp->napi[i].napi); +@@ -7441,6 +7452,8 @@ static void tg3_napi_enable(struct tg3 *tp) + { + int i; + ++ tp->napi_enabled = true; ++ + for (i = 0; i < tp->irq_cnt; i++) + napi_enable(&tp->napi[i].napi); + } +@@ -17734,6 +17747,7 @@ static int tg3_init_one(struct pci_dev *pdev, + tp->tx_mode = TG3_DEF_TX_MODE; + tp->irq_sync = 1; + tp->pcierr_recovery = false; ++ tp->napi_enabled = false; + + if (tg3_debug > 0) + tp->msg_enable = tg3_debug; +@@ -18125,7 +18139,8 @@ static void tg3_remove_one(struct pci_dev *pdev) + } + free_netdev(dev); + pci_release_regions(pdev); +- pci_disable_device(pdev); ++ if (pci_is_enabled(pdev)) ++ pci_disable_device(pdev); + } + } + +@@ -18281,7 +18296,8 @@ static void tg3_shutdown(struct pci_dev *pdev, + + rtnl_unlock(); + +- pci_disable_device(pdev); ++ if (pci_is_enabled(pdev)) ++ pci_disable_device(pdev); + } + + /** +diff --git a/drivers/net/ethernet/broadcom/tg3.h b/drivers/net/ethernet/broadcom/tg3.h +index 6017b17..dbbd87b 100644 +--- a/drivers/net/ethernet/broadcom/tg3.h ++++ b/drivers/net/ethernet/broadcom/tg3.h +@@ -3430,6 +3430,7 @@ struct tg3 { + struct device *hwmon_dev; + bool link_up; + bool pcierr_recovery; ++ bool napi_enabled; + + u32 ape_hb; + unsigned long ape_hb_interval; +-- +2.39.0 diff --git a/patches-sonic/series b/patches-sonic/series index b84d84667..58d3722bf 100644 --- a/patches-sonic/series +++ b/patches-sonic/series @@ -7,6 +7,7 @@ driver-arista-net-tg3-dma-mask-4g-sb800.patch driver-arista-net-tg3-disallow-broadcom-default-mac.patch driver-arista-net-tg3-access-regs-indirectly.patch +driver-arista-net-tg3-napi-enable-called-flag.patch driver-arista-pci-reassign-pref-mem.patch driver-arista-mmcblk-not-working-on-AMD-platforms.patch driver-arista-restrict-eMMC-drive-to-50Mhz-from-userland.patch