[PATCH 2.5] : IrDA timer fix

From: Jean Tourrilhes (jt@bougret.hpl.hp.com)
Date: Thu Feb 20 2003 - 19:10:34 EST


ir253_timer_mod.diff :
--------------------
        o [FEATURE] Make IrDA timers use mod_timer instead of add+del_timer

diff -u -p linux/net/irda/timer.d5.c linux/net/irda/timer.c
--- linux/net/irda/timer.d5.c Thu Jan 9 13:36:15 2003
+++ linux/net/irda/timer.c Thu Jan 9 13:51:03 2003
@@ -39,8 +39,8 @@ static void irlap_query_timer_expired(vo
 static void irlap_final_timer_expired(void* data);
 static void irlap_wd_timer_expired(void* data);
 static void irlap_backoff_timer_expired(void* data);
-
 static void irlap_media_busy_expired(void* data);
+
 /*
  * Function irda_start_timer (timer, timeout)
  *
@@ -50,19 +50,18 @@ static void irlap_media_busy_expired(voi
 void irda_start_timer(struct timer_list *ptimer, int timeout, void *data,
                       TIMER_CALLBACK callback)
 {
- del_timer(ptimer);
-
- ptimer->data = (unsigned long) data;
-
         /*
          * For most architectures void * is the same as unsigned long, but
          * at least we try to use void * as long as possible. Since the
          * timer functions use unsigned long, we cast the function here
          */
         ptimer->function = (void (*)(unsigned long)) callback;
- ptimer->expires = jiffies + timeout;
+ ptimer->data = (unsigned long) data;
         
- add_timer(ptimer);
+ /* Set new value for timer (update or add timer).
+ * We use mod_timer() because it's more efficient and also
+ * safer with respect to race conditions - Jean II */
+ mod_timer(ptimer, jiffies + timeout);
 }
 
 void irlap_start_slot_timer(struct irlap_cb *self, int timeout)
@@ -136,8 +135,7 @@ void irlmp_start_idle_timer(struct lap_c
 void irlmp_stop_idle_timer(struct lap_cb *self)
 {
         /* If timer is activated, kill it! */
- if(timer_pending(&self->idle_timer))
- del_timer(&self->idle_timer);
+ del_timer(&self->idle_timer);
 }
 
 /*
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sun Feb 23 2003 - 22:00:32 EST