summaryrefslogtreecommitdiffstats
path: root/net/atm
diff options
context:
space:
mode:
authorChas Williams <chas@cmf.nrl.navy.mil>2006-09-29 17:15:59 -0700
committerDavid S. Miller <davem@davemloft.net>2006-09-29 17:15:59 -0700
commit987e46bdf314c55e060570ff46723d770e461f0e (patch)
treec544f11f72d0e12f5862b8dda9e650227525b8f1 /net/atm
parentedbc9b014fda4b13466b2e2ac53b940337548ab4 (diff)
downloadlinux-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/atm')
-rw-r--r--net/atm/lec.c17
-rw-r--r--net/atm/lec.h2
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