timer: fix lag delay
authorKarmarkar Suyash <skarmarkar@sonusnet.com>
Wed, 21 Sep 2016 20:54:27 +0000 (16:54 -0400)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Wed, 5 Oct 2016 10:02:53 +0000 (12:02 +0200)
For periodic timers, if the lag gets introduced, the current code
added additional delay when the next peridoc timer was initialized
by not taking into account the delay added, with this fix the code
would start the next occurrence of timer keeping in account the
lag added. Corrected the behavior.

Fixes: 9b15ba89 ("timer: use a skip list")

Signed-off-by: Karmarkar Suyash <skarmarkar@sonusnet.com>
Acked-by: Robert Sanford <rsanford@akamai.com>
lib/librte_timer/rte_timer.c

index 43da836..18782fa 100644 (file)
@@ -613,7 +613,7 @@ void rte_timer_manage(void)
                        status.owner = (int16_t)lcore_id;
                        rte_wmb();
                        tim->status.u32 = status.u32;
-                       __rte_timer_reset(tim, cur_time + tim->period,
+                       __rte_timer_reset(tim, tim->expire + tim->period,
                                tim->period, lcore_id, tim->f, tim->arg, 1);
                        rte_spinlock_unlock(&priv_timer[lcore_id].list_lock);
                }