diff options
author | Greg Ungerer <gerg@snapgear.com> | 2007-07-30 16:29:09 +1000 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-30 10:52:09 -0700 |
commit | cb84d6e7ad10bd679df1787a1fc9624432a73317 (patch) | |
tree | e2282ebc5410c61895c6e3b10df106bdee031fff /drivers/net/fec.c | |
parent | f0d3464f5cd1002ad5c1f1116cc84a8815c41476 (diff) | |
download | linux-cb84d6e7ad10bd679df1787a1fc9624432a73317.tar.gz linux-cb84d6e7ad10bd679df1787a1fc9624432a73317.tar.bz2 linux-cb84d6e7ad10bd679df1787a1fc9624432a73317.zip |
fix work queues in FEC driver
Fix the work queue code in the FEC driver.
Signed-off-by: Greg Ungerer <gerg@uclinux.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/net/fec.c')
-rw-r--r-- | drivers/net/fec.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/drivers/net/fec.c b/drivers/net/fec.c index 52a6f945c001..91daf0785ee8 100644 --- a/drivers/net/fec.c +++ b/drivers/net/fec.c @@ -190,6 +190,8 @@ struct fec_enet_private { /* Hardware registers of the FEC device */ volatile fec_t *hwp; + struct net_device *netdev; + /* The saved address of a sent-in-place packet/buffer, for skfree(). */ unsigned char *tx_bounce[TX_RING_SIZE]; struct sk_buff* tx_skbuff[TX_RING_SIZE]; @@ -1939,9 +1941,10 @@ static void mii_display_status(struct net_device *dev) printk(".\n"); } -static void mii_display_config(struct net_device *dev) +static void mii_display_config(struct work_struct *work) { - struct fec_enet_private *fep = netdev_priv(dev); + struct fec_enet_private *fep = container_of(work, struct fec_enet_private, phy_task); + struct net_device *dev = fep->netdev; uint status = fep->phy_status; /* @@ -1975,9 +1978,10 @@ static void mii_display_config(struct net_device *dev) fep->sequence_done = 1; } -static void mii_relink(struct net_device *dev) +static void mii_relink(struct work_struct *work) { - struct fec_enet_private *fep = netdev_priv(dev); + struct fec_enet_private *fep = container_of(work, struct fec_enet_private, phy_task); + struct net_device *dev = fep->netdev; int duplex; /* @@ -2021,7 +2025,7 @@ static void mii_queue_relink(uint mii_reg, struct net_device *dev) return; fep->mii_phy_task_queued = 1; - INIT_WORK(&fep->phy_task, (void*)mii_relink, dev); + INIT_WORK(&fep->phy_task, mii_relink); schedule_work(&fep->phy_task); } @@ -2034,7 +2038,7 @@ static void mii_queue_config(uint mii_reg, struct net_device *dev) return; fep->mii_phy_task_queued = 1; - INIT_WORK(&fep->phy_task, (void*)mii_display_config, dev); + INIT_WORK(&fep->phy_task, mii_display_config); schedule_work(&fep->phy_task); } @@ -2329,6 +2333,7 @@ int __init fec_enet_init(struct net_device *dev) fep->index = index; fep->hwp = fecp; + fep->netdev = dev; /* Whack a reset. We should wait for this. */ |