|
@@ -544,21 +544,8 @@ void e1000_down(struct e1000_adapter *adapter)
|
|
|
e1000_clean_all_rx_rings(adapter);
|
|
|
}
|
|
|
|
|
|
-static void e1000_reinit_safe(struct e1000_adapter *adapter)
|
|
|
-{
|
|
|
- while (test_and_set_bit(__E1000_RESETTING, &adapter->flags))
|
|
|
- msleep(1);
|
|
|
- mutex_lock(&adapter->mutex);
|
|
|
- e1000_down(adapter);
|
|
|
- e1000_up(adapter);
|
|
|
- mutex_unlock(&adapter->mutex);
|
|
|
- clear_bit(__E1000_RESETTING, &adapter->flags);
|
|
|
-}
|
|
|
-
|
|
|
void e1000_reinit_locked(struct e1000_adapter *adapter)
|
|
|
{
|
|
|
- /* if rtnl_lock is not held the call path is bogus */
|
|
|
- ASSERT_RTNL();
|
|
|
WARN_ON(in_interrupt());
|
|
|
while (test_and_set_bit(__E1000_RESETTING, &adapter->flags))
|
|
|
msleep(1);
|
|
@@ -1316,7 +1303,6 @@ static int e1000_sw_init(struct e1000_adapter *adapter)
|
|
|
e1000_irq_disable(adapter);
|
|
|
|
|
|
spin_lock_init(&adapter->stats_lock);
|
|
|
- mutex_init(&adapter->mutex);
|
|
|
|
|
|
set_bit(__E1000_DOWN, &adapter->flags);
|
|
|
|
|
@@ -2329,11 +2315,8 @@ static void e1000_update_phy_info_task(struct work_struct *work)
|
|
|
struct e1000_adapter *adapter = container_of(work,
|
|
|
struct e1000_adapter,
|
|
|
phy_info_task.work);
|
|
|
- if (test_bit(__E1000_DOWN, &adapter->flags))
|
|
|
- return;
|
|
|
- mutex_lock(&adapter->mutex);
|
|
|
+
|
|
|
e1000_phy_get_info(&adapter->hw, &adapter->phy_info);
|
|
|
- mutex_unlock(&adapter->mutex);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -2349,9 +2332,6 @@ static void e1000_82547_tx_fifo_stall_task(struct work_struct *work)
|
|
|
struct net_device *netdev = adapter->netdev;
|
|
|
u32 tctl;
|
|
|
|
|
|
- if (test_bit(__E1000_DOWN, &adapter->flags))
|
|
|
- return;
|
|
|
- mutex_lock(&adapter->mutex);
|
|
|
if (atomic_read(&adapter->tx_fifo_stall)) {
|
|
|
if ((er32(TDT) == er32(TDH)) &&
|
|
|
(er32(TDFT) == er32(TDFH)) &&
|
|
@@ -2372,7 +2352,6 @@ static void e1000_82547_tx_fifo_stall_task(struct work_struct *work)
|
|
|
schedule_delayed_work(&adapter->fifo_stall_task, 1);
|
|
|
}
|
|
|
}
|
|
|
- mutex_unlock(&adapter->mutex);
|
|
|
}
|
|
|
|
|
|
bool e1000_has_link(struct e1000_adapter *adapter)
|
|
@@ -2426,10 +2405,6 @@ static void e1000_watchdog(struct work_struct *work)
|
|
|
struct e1000_tx_ring *txdr = adapter->tx_ring;
|
|
|
u32 link, tctl;
|
|
|
|
|
|
- if (test_bit(__E1000_DOWN, &adapter->flags))
|
|
|
- return;
|
|
|
-
|
|
|
- mutex_lock(&adapter->mutex);
|
|
|
link = e1000_has_link(adapter);
|
|
|
if ((netif_carrier_ok(netdev)) && link)
|
|
|
goto link_up;
|
|
@@ -2520,7 +2495,7 @@ link_up:
|
|
|
adapter->tx_timeout_count++;
|
|
|
schedule_work(&adapter->reset_task);
|
|
|
/* exit immediately since reset is imminent */
|
|
|
- goto unlock;
|
|
|
+ return;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -2548,9 +2523,6 @@ link_up:
|
|
|
/* Reschedule the task */
|
|
|
if (!test_bit(__E1000_DOWN, &adapter->flags))
|
|
|
schedule_delayed_work(&adapter->watchdog_task, 2 * HZ);
|
|
|
-
|
|
|
-unlock:
|
|
|
- mutex_unlock(&adapter->mutex);
|
|
|
}
|
|
|
|
|
|
enum latency_range {
|
|
@@ -3499,10 +3471,8 @@ static void e1000_reset_task(struct work_struct *work)
|
|
|
struct e1000_adapter *adapter =
|
|
|
container_of(work, struct e1000_adapter, reset_task);
|
|
|
|
|
|
- if (test_bit(__E1000_DOWN, &adapter->flags))
|
|
|
- return;
|
|
|
e_err(drv, "Reset adapter\n");
|
|
|
- e1000_reinit_safe(adapter);
|
|
|
+ e1000_reinit_locked(adapter);
|
|
|
}
|
|
|
|
|
|
/**
|