[TG3]: Flush tg3_reset_task()
authorMichael Chan <mchan@broadcom.com>
Fri, 3 Feb 2006 01:29:28 +0000 (17:29 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 3 Feb 2006 01:29:28 +0000 (17:29 -0800)
commit7faa006f94fda56a587242b2a22fa19abf840222
treeb1354b391829bc3f1d83fd3121167318f8472147
parent3f330317ab4973178423aba750d6d0ca5ce0024a
[TG3]: Flush tg3_reset_task()

Make sure tg3_reset_task() is flushed in the close and suspend paths
as noted by Jeff Garzik.

In the close path, calling flush_scheduled_work() may cause deadlock
if linkwatch_event() is on the workqueue. linkwatch_event() will try
to get the rtnl_lock() which is already held by tg3_close(). So
instead, we set a flag in tg3_reset_task() and tg3_close() polls
the flag until it is cleared.

Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/tg3.c
drivers/net/tg3.h