diff options
author | Chas Williams <chas@cmf.nrl.navy.mil> | 2006-09-29 17:15:59 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2006-09-29 17:15:59 -0700 |
commit | 987e46bdf314c55e060570ff46723d770e461f0e (patch) | |
tree | c544f11f72d0e12f5862b8dda9e650227525b8f1 /net | |
parent | edbc9b014fda4b13466b2e2ac53b940337548ab4 (diff) | |
download | linux-987e46bdf314c55e060570ff46723d770e461f0e.tar.gz linux-987e46bdf314c55e060570ff46723d770e461f0e.tar.bz2 linux-987e46bdf314c55e060570ff46723d770e461f0e.zip |
[ATM]: [lec] use work queue instead of timer for lec arp expiry
Signed-off-by: Chas Williams <chas@cmf.nrl.navy.mil>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/atm/lec.c | 17 | ||||
-rw-r--r-- | net/atm/lec.h | 2 |
2 files changed, 8 insertions, 11 deletions
diff --git a/net/atm/lec.c b/net/atm/lec.c index eb94e94bffa9..29acfb0e6d04 100644 --- a/net/atm/lec.c +++ b/net/atm/lec.c @@ -1442,7 +1442,7 @@ static void lane2_associate_ind(struct net_device *dev, u8 *mac_addr, #define LEC_ARP_REFRESH_INTERVAL (3*HZ) -static void lec_arp_check_expire(unsigned long data); +static void lec_arp_check_expire(void *data); static void lec_arp_expire_arp(unsigned long data); /* @@ -1465,11 +1465,8 @@ static void lec_arp_init(struct lec_priv *priv) INIT_HLIST_HEAD(&priv->lec_no_forward); INIT_HLIST_HEAD(&priv->mcast_fwds); spin_lock_init(&priv->lec_arp_lock); - init_timer(&priv->lec_arp_timer); - priv->lec_arp_timer.expires = jiffies + LEC_ARP_REFRESH_INTERVAL; - priv->lec_arp_timer.data = (unsigned long)priv; - priv->lec_arp_timer.function = lec_arp_check_expire; - add_timer(&priv->lec_arp_timer); + INIT_WORK(&priv->lec_arp_work, lec_arp_check_expire, priv); + schedule_delayed_work(&priv->lec_arp_work, LEC_ARP_REFRESH_INTERVAL); } static void lec_arp_clear_vccs(struct lec_arp_table *entry) @@ -1719,7 +1716,7 @@ static void lec_arp_destroy(struct lec_priv *priv) struct lec_arp_table *entry; int i; - del_timer_sync(&priv->lec_arp_timer); + cancel_rearming_delayed_work(&priv->lec_arp_work); /* * Remove all entries @@ -1865,10 +1862,10 @@ static void lec_arp_expire_vcc(unsigned long data) * to ESI_FORWARD_DIRECT. This causes the flush period to end * regardless of the progress of the flush protocol. */ -static void lec_arp_check_expire(unsigned long data) +static void lec_arp_check_expire(void *data) { unsigned long flags; - struct lec_priv *priv = (struct lec_priv *)data; + struct lec_priv *priv = data; struct hlist_node *node, *next; struct lec_arp_table *entry; unsigned long now; @@ -1930,7 +1927,7 @@ static void lec_arp_check_expire(unsigned long data) } spin_unlock_irqrestore(&priv->lec_arp_lock, flags); - mod_timer(&priv->lec_arp_timer, jiffies + LEC_ARP_REFRESH_INTERVAL); + schedule_delayed_work(&priv->lec_arp_work, LEC_ARP_REFRESH_INTERVAL); } /* diff --git a/net/atm/lec.h b/net/atm/lec.h index 8052641b2ec0..8ac6b7321635 100644 --- a/net/atm/lec.h +++ b/net/atm/lec.h @@ -93,7 +93,7 @@ struct lec_priv { spinlock_t lec_arp_lock; struct atm_vcc *mcast_vcc; /* Default Multicast Send VCC */ struct atm_vcc *lecd; - struct timer_list lec_arp_timer; /* C10 */ + struct work_struct lec_arp_work; /* C10 */ unsigned int maximum_unknown_frame_count; /* * Within the period of time defined by this variable, the client will send |