Files
linux-legacy/include/linux
Anton Vorontsov 8e982ef543 phylib: Move workqueue initialization to a proper place
commit 541cd3ee00a4fe975b22fac6a3bc846bacef37f7 ("phylib: Fix deadlock
on resume") caused TI DaVinci EMAC ethernet driver to oops upon resume:

 PM: resume of devices complete after 237.098 msecs
 Restarting tasks ... done.
 kernel BUG at kernel/workqueue.c:354!
 Unable to handle kernel NULL pointer dereference at virtual address 00000000
 [...]
 Backtrace:
 [<c002c598>] (__bug+0x0/0x2c) from [<c0052a54>] (queue_delayed_work_on+0x74/0xf8)
 [<c00529e0>] (queue_delayed_work_on+0x0/0xf8) from [<c0052b30>] (queue_delayed_work+0x2c/0x30)

The oops pops up because TI DaVinci EMAC driver detaches PHY on
suspend and attaches it back on resume. Attaching makes phylib call
phy_start_machine() that initializes a workqueue. On the other hand,
PHY's resume routine will call phy_start_machine() again, and that
will cause the oops since we just destroyed the already scheduled
workqueue.

This patch fixes the issue by moving workqueue initialization to
phy_device_create().

p.s. We don't see this oops with ucc_geth and gianfar drivers because
they perform a fine-grained suspend, i.e. they just stop the PHYs
without detaching.

Reported-by: Sekhar Nori <nsekhar@ti.com>
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
Tested-by: Sekhar Nori <nsekhar@ti.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2010-08-10 11:50:22 -05:00
..
2009-06-18 08:46:47 +10:00
2009-06-30 18:56:00 -07:00
2009-07-12 12:22:34 -07:00
2009-06-17 00:36:36 -04:00
2009-06-30 18:55:58 -07:00
2008-12-03 22:12:38 -08:00
2009-06-01 06:21:13 +00:00
2009-06-11 21:36:09 -04:00
2009-07-29 19:10:35 -07:00
2009-07-12 12:22:34 -07:00
2009-05-29 08:40:01 -07:00
2010-08-10 11:44:23 -05:00
2009-06-11 08:50:57 -07:00
2009-06-11 21:36:06 -04:00
2009-07-12 13:02:10 -07:00
2009-06-22 10:12:30 +01:00
2009-05-18 14:46:26 +01:00
2007-02-09 17:39:36 -05:00
2009-06-17 09:33:49 -07:00
2009-07-08 09:18:05 -07:00
2009-06-24 08:17:04 -04:00
2009-06-30 18:56:00 -07:00
2009-06-15 21:30:25 -07:00
2009-06-30 20:12:24 +02:00
2009-06-18 13:04:05 -07:00
2006-10-02 07:57:12 -07:00
2009-07-12 12:22:34 -07:00
2009-06-03 14:05:10 -04:00
2009-05-19 16:02:02 -07:00
2009-06-29 08:59:10 +10:00
2009-06-02 00:45:24 -07:00
2009-06-18 13:03:57 -07:00
2009-05-18 14:46:26 +01:00
2009-07-31 08:55:48 +02:00
2009-06-18 13:03:56 -07:00
2009-06-15 15:49:23 +02:00
2010-08-10 11:50:18 -05:00
2009-06-23 20:21:39 +01:00
2009-07-30 16:03:45 +09:30
2009-07-28 21:07:09 -04:00
2009-06-16 19:47:57 -07:00
2009-06-16 08:40:20 +02:00
2009-06-11 19:05:32 +02:00
2009-05-25 00:55:45 -07:00
2009-07-08 09:31:56 -07:00
2009-06-18 13:03:57 -07:00
2009-06-11 21:36:02 -04:00
2008-06-06 11:29:12 -07:00
2010-08-10 11:50:18 -05:00
2009-06-11 21:36:01 -04:00
2009-06-17 18:02:11 -07:00
2009-06-17 18:02:11 -07:00
2009-06-17 12:24:34 -07:00
2009-08-12 08:21:39 -07:00
2009-06-17 12:24:34 -07:00
2009-06-17 18:02:11 -07:00
2009-06-15 21:44:43 -07:00
2008-02-14 21:13:33 -08:00
2009-06-29 12:14:51 -07:00
2009-06-30 18:55:59 -07:00
2009-06-18 13:04:04 -07:00
2009-07-29 19:10:36 -07:00
2009-06-11 21:36:12 -04:00
2009-07-12 12:22:34 -07:00
2009-01-31 00:05:59 +05:30
2009-06-24 08:17:06 -04:00
2009-05-09 10:49:41 -04:00
2007-10-16 09:43:17 -07:00
2009-06-11 08:50:58 -07:00
2009-06-24 08:17:06 -04:00
2009-12-08 10:22:01 -08:00
2009-06-15 15:50:49 +02:00
2009-06-16 19:47:48 -07:00
2009-05-12 11:11:48 +02:00
2009-06-23 12:50:05 -07:00
2005-04-16 15:20:36 -07:00
2009-07-06 13:57:03 -07:00
2009-02-18 15:37:53 -08:00
2009-06-11 08:50:59 -07:00
2009-10-05 09:32:34 -07:00
2009-07-12 15:16:39 -07:00