Skip to content

Commit 615b32a

Browse files
jbrandebJeff Kirsher
authored andcommitted
e1000e: check down flag in tasks
This change is part of a fix to avoid any tasks running while the driver is exiting and deinitializing resources. Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com> Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
1 parent 6d90e8f commit 615b32a

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

drivers/net/e1000e/netdev.c

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -937,6 +937,9 @@ static void e1000_print_hw_hang(struct work_struct *work)
937937
u16 phy_status, phy_1000t_status, phy_ext_status;
938938
u16 pci_status;
939939

940+
if (test_bit(__E1000_DOWN, &adapter->state))
941+
return;
942+
940943
e1e_rphy(hw, PHY_STATUS, &phy_status);
941944
e1e_rphy(hw, PHY_1000T_STATUS, &phy_1000t_status);
942945
e1e_rphy(hw, PHY_EXT_STATUS, &phy_ext_status);
@@ -1506,6 +1509,9 @@ static void e1000e_downshift_workaround(struct work_struct *work)
15061509
struct e1000_adapter *adapter = container_of(work,
15071510
struct e1000_adapter, downshift_task);
15081511

1512+
if (test_bit(__E1000_DOWN, &adapter->state))
1513+
return;
1514+
15091515
e1000e_gig_downshift_workaround_ich8lan(&adapter->hw);
15101516
}
15111517

@@ -3765,6 +3771,10 @@ static void e1000e_update_phy_task(struct work_struct *work)
37653771
{
37663772
struct e1000_adapter *adapter = container_of(work,
37673773
struct e1000_adapter, update_phy_task);
3774+
3775+
if (test_bit(__E1000_DOWN, &adapter->state))
3776+
return;
3777+
37683778
e1000_get_phy_info(&adapter->hw);
37693779
}
37703780

@@ -3775,6 +3785,10 @@ static void e1000e_update_phy_task(struct work_struct *work)
37753785
static void e1000_update_phy_info(unsigned long data)
37763786
{
37773787
struct e1000_adapter *adapter = (struct e1000_adapter *) data;
3788+
3789+
if (test_bit(__E1000_DOWN, &adapter->state))
3790+
return;
3791+
37783792
schedule_work(&adapter->update_phy_task);
37793793
}
37803794

@@ -4149,6 +4163,9 @@ static void e1000_watchdog_task(struct work_struct *work)
41494163
u32 link, tctl;
41504164
int tx_pending = 0;
41514165

4166+
if (test_bit(__E1000_DOWN, &adapter->state))
4167+
return;
4168+
41524169
link = e1000e_has_link(adapter);
41534170
if ((netif_carrier_ok(netdev)) && link) {
41544171
/* Cancel scheduled suspend requests. */
@@ -4887,6 +4904,10 @@ static void e1000_reset_task(struct work_struct *work)
48874904
struct e1000_adapter *adapter;
48884905
adapter = container_of(work, struct e1000_adapter, reset_task);
48894906

4907+
/* don't run the task if already down */
4908+
if (test_bit(__E1000_DOWN, &adapter->state))
4909+
return;
4910+
48904911
if (!((adapter->flags & FLAG_RX_NEEDS_RESTART) &&
48914912
(adapter->flags & FLAG_RX_RESTART_NOW))) {
48924913
e1000e_dump(adapter);

0 commit comments

Comments
 (0)