Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 19703
b: refs/heads/master
c: 7faa006
h: refs/heads/master
i:
  19701: 1fd9900
  19699: af20c0d
  19695: 1ab356c
v: v3
  • Loading branch information
Michael Chan authored and David S. Miller committed Feb 3, 2006
1 parent 45c5689 commit 151ea2a
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 3f330317ab4973178423aba750d6d0ca5ce0024a
refs/heads/master: 7faa006f94fda56a587242b2a22fa19abf840222
26 changes: 24 additions & 2 deletions trunk/drivers/net/tg3.c
Original file line number Diff line number Diff line change
Expand Up @@ -3482,6 +3482,17 @@ static void tg3_reset_task(void *_data)
struct tg3 *tp = _data;
unsigned int restart_timer;

tg3_full_lock(tp, 0);
tp->tg3_flags |= TG3_FLAG_IN_RESET_TASK;

if (!netif_running(tp->dev)) {
tp->tg3_flags &= ~TG3_FLAG_IN_RESET_TASK;
tg3_full_unlock(tp);
return;
}

tg3_full_unlock(tp);

tg3_netif_stop(tp);

tg3_full_lock(tp, 1);
Expand All @@ -3494,10 +3505,12 @@ static void tg3_reset_task(void *_data)

tg3_netif_start(tp);

tg3_full_unlock(tp);

if (restart_timer)
mod_timer(&tp->timer, jiffies + 1);

tp->tg3_flags &= ~TG3_FLAG_IN_RESET_TASK;

tg3_full_unlock(tp);
}

static void tg3_tx_timeout(struct net_device *dev)
Expand Down Expand Up @@ -6786,6 +6799,13 @@ static int tg3_close(struct net_device *dev)
{
struct tg3 *tp = netdev_priv(dev);

/* Calling flush_scheduled_work() may deadlock because
* linkwatch_event() may be on the workqueue and it will try to get
* the rtnl_lock which we are holding.
*/
while (tp->tg3_flags & TG3_FLAG_IN_RESET_TASK)
msleep(1);

netif_stop_queue(dev);

del_timer_sync(&tp->timer);
Expand Down Expand Up @@ -10880,6 +10900,7 @@ static void __devexit tg3_remove_one(struct pci_dev *pdev)
if (dev) {
struct tg3 *tp = netdev_priv(dev);

flush_scheduled_work();
unregister_netdev(dev);
if (tp->regs) {
iounmap(tp->regs);
Expand All @@ -10901,6 +10922,7 @@ static int tg3_suspend(struct pci_dev *pdev, pm_message_t state)
if (!netif_running(dev))
return 0;

flush_scheduled_work();
tg3_netif_stop(tp);

del_timer_sync(&tp->timer);
Expand Down
1 change: 1 addition & 0 deletions trunk/drivers/net/tg3.h
Original file line number Diff line number Diff line change
Expand Up @@ -2162,6 +2162,7 @@ struct tg3 {
#define TG3_FLAG_JUMBO_RING_ENABLE 0x00800000
#define TG3_FLAG_10_100_ONLY 0x01000000
#define TG3_FLAG_PAUSE_AUTONEG 0x02000000
#define TG3_FLAG_IN_RESET_TASK 0x04000000
#define TG3_FLAG_BROKEN_CHECKSUMS 0x10000000
#define TG3_FLAG_GOT_SERDES_FLOWCTL 0x20000000
#define TG3_FLAG_SPLIT_MODE 0x40000000
Expand Down

0 comments on commit 151ea2a

Please sign in to comment.