All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 2.6.0-test5][NETROM] timer code cleanup
@ 2003-09-21 12:02 Vinay K Nallamothu
  2003-09-22  1:07 ` David S. Miller
  0 siblings, 1 reply; 2+ messages in thread
From: Vinay K Nallamothu @ 2003-09-21 12:02 UTC (permalink / raw)
  To: netdev; +Cc: LKML

Compiles fine. Untested.

1. move timer initialization into nr_init_timers so that we can use mod_timer
2. remove skb queue purge in af_netrom as its already done by nr_clear_queues
3. Use del_timer_sync in nr_loopback_clear



 af_netrom.c   |   18 +++-------------
 nr_loopback.c |   31 +++++++----------------------
 nr_timer.c    |   62 ++++++++++++++++++++++++++--------------------------------
 3 files changed, 40 insertions(+), 71 deletions(-)


diff -urN linux-2.6.0-test5/net/netrom/af_netrom.c linux-2.6.0-test5-nvk/net/netrom/af_netrom.c
--- linux-2.6.0-test5/net/netrom/af_netrom.c	2003-09-09 11:12:08.000000000 +0530
+++ linux-2.6.0-test5-nvk/net/netrom/af_netrom.c	2003-09-21 16:36:12.000000000 +0530
@@ -62,6 +62,7 @@
 static spinlock_t nr_list_lock = SPIN_LOCK_UNLOCKED;
 
 static struct proto_ops nr_proto_ops;
+void nr_init_timers(struct sock *sk);
 
 static struct sock *nr_alloc_sock(void)
 {
@@ -279,17 +280,12 @@
 
 		kfree_skb(skb);
 	}
-	while ((skb = skb_dequeue(&sk->sk_write_queue)) != NULL) {
-		kfree_skb(skb);
-	}
 
 	if (atomic_read(&sk->sk_wmem_alloc) ||
 	    atomic_read(&sk->sk_rmem_alloc)) {
 		/* Defer: outstanding buffers */
-		init_timer(&sk->sk_timer);
-		sk->sk_timer.expires  = jiffies + 2 * HZ;
 		sk->sk_timer.function = nr_destroy_timer;
-		sk->sk_timer.data     = (unsigned long)sk;
+		sk->sk_timer.expires  = jiffies + 2 * HZ;
 		add_timer(&sk->sk_timer);
 	} else
 		sock_put(sk);
@@ -442,10 +438,7 @@
 	skb_queue_head_init(&nr->reseq_queue);
 	skb_queue_head_init(&nr->frag_queue);
 
-	init_timer(&nr->t1timer);
-	init_timer(&nr->t2timer);
-	init_timer(&nr->t4timer);
-	init_timer(&nr->idletimer);
+	nr_init_timers(sk);
 
 	nr->t1     = sysctl_netrom_transport_timeout;
 	nr->t2     = sysctl_netrom_transport_acknowledge_delay;
@@ -491,10 +484,7 @@
 	skb_queue_head_init(&nr->reseq_queue);
 	skb_queue_head_init(&nr->frag_queue);
 
-	init_timer(&nr->t1timer);
-	init_timer(&nr->t2timer);
-	init_timer(&nr->t4timer);
-	init_timer(&nr->idletimer);
+	nr_init_timers(sk);
 
 	onr = nr_sk(osk);
 
diff -urN linux-2.6.0-test5/net/netrom/nr_loopback.c linux-2.6.0-test5-nvk/net/netrom/nr_loopback.c
--- linux-2.6.0-test5/net/netrom/nr_loopback.c	2003-09-09 11:12:08.000000000 +0530
+++ linux-2.6.0-test5-nvk/net/netrom/nr_loopback.c	2003-09-21 13:36:05.000000000 +0530
@@ -14,19 +14,17 @@
 #include <net/netrom.h>
 #include <linux/init.h>
 
-static struct sk_buff_head loopback_queue;
-static struct timer_list loopback_timer;
+static void nr_loopback_timer(unsigned long);
 
-static void nr_set_loopback_timer(void);
+static struct sk_buff_head loopback_queue;
+static struct timer_list loopback_timer = TIMER_INITIALIZER(nr_loopback_timer, 0, 0);
 
-void nr_loopback_init(void)
+void __init nr_loopback_init(void)
 {
 	skb_queue_head_init(&loopback_queue);
-
-	init_timer(&loopback_timer);
 }
 
-static int nr_loopback_running(void)
+static inline int nr_loopback_running(void)
 {
 	return timer_pending(&loopback_timer);
 }
@@ -42,26 +40,13 @@
 		skb_queue_tail(&loopback_queue, skbn);
 
 		if (!nr_loopback_running())
-			nr_set_loopback_timer();
+			mod_timer(&loopback_timer, jiffies + 10);
 	}
 
 	kfree_skb(skb);
 	return 1;
 }
 
-static void nr_loopback_timer(unsigned long);
-
-static void nr_set_loopback_timer(void)
-{
-	del_timer(&loopback_timer);
-
-	loopback_timer.data     = 0;
-	loopback_timer.function = &nr_loopback_timer;
-	loopback_timer.expires  = jiffies + 10;
-
-	add_timer(&loopback_timer);
-}
-
 static void nr_loopback_timer(unsigned long param)
 {
 	struct sk_buff *skb;
@@ -80,12 +65,12 @@
 			dev_put(dev);
 
 		if (!skb_queue_empty(&loopback_queue) && !nr_loopback_running())
-			nr_set_loopback_timer();
+			mod_timer(&loopback_timer, jiffies + 10);
 	}
 }
 
 void __exit nr_loopback_clear(void)
 {
-	del_timer(&loopback_timer);
+	del_timer_sync(&loopback_timer);
 	skb_queue_purge(&loopback_queue);
 }
diff -urN linux-2.6.0-test5/net/netrom/nr_timer.c linux-2.6.0-test5-nvk/net/netrom/nr_timer.c
--- linux-2.6.0-test5/net/netrom/nr_timer.c	2003-09-09 11:12:08.000000000 +0530
+++ linux-2.6.0-test5-nvk/net/netrom/nr_timer.c	2003-09-21 15:23:46.000000000 +0530
@@ -36,69 +36,63 @@
 static void nr_t4timer_expiry(unsigned long);
 static void nr_idletimer_expiry(unsigned long);
 
-void nr_start_t1timer(struct sock *sk)
+void nr_init_timers(struct sock *sk)
 {
 	nr_cb *nr = nr_sk(sk);
 
-	del_timer(&nr->t1timer);
-
+	init_timer(&nr->t1timer);
 	nr->t1timer.data     = (unsigned long)sk;
 	nr->t1timer.function = &nr_t1timer_expiry;
-	nr->t1timer.expires  = jiffies + nr->t1;
+	
+	init_timer(&nr->t2timer);
+	nr->t2timer.data     = (unsigned long)sk;
+	nr->t2timer.function = &nr_t2timer_expiry;
+
+	init_timer(&nr->t4timer);
+	nr->t4timer.data     = (unsigned long)sk;
+	nr->t4timer.function = &nr_t4timer_expiry;
+
+	init_timer(&nr->idletimer);
+	nr->idletimer.data     = (unsigned long)sk;
+	nr->idletimer.function = &nr_idletimer_expiry;
 
-	add_timer(&nr->t1timer);
+	/* initialized by sock_init_data */
+	sk->sk_timer.data     = (unsigned long)sk;
+	sk->sk_timer.function = &nr_heartbeat_expiry;
 }
 
-void nr_start_t2timer(struct sock *sk)
+void nr_start_t1timer(struct sock *sk)
 {
 	nr_cb *nr = nr_sk(sk);
 
-	del_timer(&nr->t2timer);
+	mod_timer(&nr->t1timer, jiffies + nr->t1);
+}
 
-	nr->t2timer.data     = (unsigned long)sk;
-	nr->t2timer.function = &nr_t2timer_expiry;
-	nr->t2timer.expires  = jiffies + nr->t2;
+void nr_start_t2timer(struct sock *sk)
+{
+	nr_cb *nr = nr_sk(sk);
 
-	add_timer(&nr->t2timer);
+	mod_timer(&nr->t2timer, jiffies + nr->t2);
 }
 
 void nr_start_t4timer(struct sock *sk)
 {
 	nr_cb *nr = nr_sk(sk);
 
-	del_timer(&nr->t4timer);
-
-	nr->t4timer.data     = (unsigned long)sk;
-	nr->t4timer.function = &nr_t4timer_expiry;
-	nr->t4timer.expires  = jiffies + nr->t4;
-
-	add_timer(&nr->t4timer);
+	mod_timer(&nr->t4timer, jiffies + nr->t4);
 }
 
 void nr_start_idletimer(struct sock *sk)
 {
 	nr_cb *nr = nr_sk(sk);
 
-	del_timer(&nr->idletimer);
-
-	if (nr->idle > 0) {
-		nr->idletimer.data     = (unsigned long)sk;
-		nr->idletimer.function = &nr_idletimer_expiry;
-		nr->idletimer.expires  = jiffies + nr->idle;
-
-		add_timer(&nr->idletimer);
-	}
+	if (nr->idle > 0)
+		mod_timer(&nr->idletimer, jiffies + nr->idle);
 }
 
 void nr_start_heartbeat(struct sock *sk)
 {
-	del_timer(&sk->sk_timer);
-
-	sk->sk_timer.data     = (unsigned long)sk;
-	sk->sk_timer.function = &nr_heartbeat_expiry;
-	sk->sk_timer.expires  = jiffies + 5 * HZ;
-
-	add_timer(&sk->sk_timer);
+	mod_timer(&sk->sk_timer, jiffies + 5 * HZ);
 }
 
 void nr_stop_t1timer(struct sock *sk)



^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH 2.6.0-test5][NETROM] timer code cleanup
  2003-09-21 12:02 [PATCH 2.6.0-test5][NETROM] timer code cleanup Vinay K Nallamothu
@ 2003-09-22  1:07 ` David S. Miller
  0 siblings, 0 replies; 2+ messages in thread
From: David S. Miller @ 2003-09-22  1:07 UTC (permalink / raw)
  To: Vinay K Nallamothu; +Cc: netdev, linux-kernel

On Sun, 21 Sep 2003 17:32:19 +0530
Vinay K Nallamothu <vinay.nallamothu@gsecone.com> wrote:

> 1. move timer initialization into nr_init_timers so that we can use mod_timer
> 2. remove skb queue purge in af_netrom as its already done by nr_clear_queues
> 3. Use del_timer_sync in nr_loopback_clear

Looks good, applied.

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2003-09-22  1:20 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-09-21 12:02 [PATCH 2.6.0-test5][NETROM] timer code cleanup Vinay K Nallamothu
2003-09-22  1:07 ` David S. Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.