diff --git a/drivers/net/ethernet/realtek/r8126/r8126.h b/drivers/net/ethernet/realtek/r8126/r8126.h index ef028d11..ab72470a 100644 --- a/drivers/net/ethernet/realtek/r8126/r8126.h +++ b/drivers/net/ethernet/realtek/r8126/r8126.h @@ -2198,6 +2198,7 @@ enum r8126_flag { R8126_FLAG_TASK_ESD_CHECK_PENDING, R8126_FLAG_TASK_LINKCHG_CHECK_PENDING, R8126_FLAG_TASK_LINK_CHECK_PENDING, + R8126_FLAG_SHUTDOWN, R8126_FLAG_MAX }; diff --git a/drivers/net/ethernet/realtek/r8126/r8126_n.c b/drivers/net/ethernet/realtek/r8126/r8126_n.c index 5458c468..079ac4da 100644 --- a/drivers/net/ethernet/realtek/r8126/r8126_n.c +++ b/drivers/net/ethernet/realtek/r8126/r8126_n.c @@ -6175,7 +6175,7 @@ rtl8126_get_ethtool_stats(struct net_device *dev, counters = tp->tally_vaddr; paddr = tp->tally_paddr; - if (!counters) + if (!counters || test_bit(R8126_FLAG_SHUTDOWN, tp->task_flags)) return; rtl8126_dump_tally_counter(tp, paddr); @@ -12686,7 +12686,7 @@ rtl8126_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats) struct rtl8126_counters *counters = tp->tally_vaddr; dma_addr_t paddr = tp->tally_paddr; - if (!counters) + if (!counters || test_bit(R8126_FLAG_SHUTDOWN, tp->task_flags)) return; netdev_stats_to_stats64(stats, &dev->stats); @@ -16379,6 +16379,8 @@ static void rtl8126_shutdown(struct pci_dev *pdev) rtnl_lock(); + set_bit(R8126_FLAG_SHUTDOWN, tp->task_flags); + rtl8126_disable_pci_offset_180(tp); if (s5_keep_curr_mac == 0 && tp->random_mac == 0)