Hi Vadim, On 05/16/2014 12:15 PM, Vadim Suraev wrote: > Description: while running a periodic timer's callback, if another > timer is manipulated, the updated flag is raised > preventing the periodic timer to reload. > Fix: move > updated flag from priv_timer to rte_timer stucture (one > per core) > > Signed-off-by: Vadim Suraev <vadim.suraev at gmail.com> > > [...] > > --- a/lib/librte_timer/rte_timer.h > +++ b/lib/librte_timer/rte_timer.h > @@ -129,6 +129,10 @@ struct rte_timer > uint64_t period; /**< Period of timer (0 if not periodic). */ > rte_timer_cb_t *f; /**< Callback function. */ > void *arg; /**< Argument to callback function. */ > + /** per-core variable that true if a timer was updated on this > + * core since last reset of the variable */ > + int updated[RTE_MAX_LCORE]; > + > };
I don't think that adding a quite large table in the rte_timer structure is a good idea. Instead, I suggest to add a new field in the per-core structure priv_timer: struct rte_timer *cur_timer; This timer pointer is set before invoking the callback of the timer. Then, you could do this in rte_timer_reset() and rte_timer_stop(): if (tim == priv_timer[lcore_id].cur_timer) priv_timer[lcore_id].updated = 1; I think it will also fix the problem you are describing (which is a real problem), in a more simple way. Regards, Olivier