On 2014-08-22 06:52, Savolainen, Petri (NSN - FI/Espoo) wrote:
>
>
> > -----Original Message-----
> > From: ext Anders Roxell [mailto:[email protected]]
> > Sent: Friday, August 22, 2014 1:16 AM
> > To: Petri Savolainen
> > Cc: [email protected]
> > Subject: Re: [lng-odp] [PATCH] Timer bug corrections
> >
> > On 2014-08-21 14:58, Petri Savolainen wrote:
> > > - Start POSIX timer in odp_timer_create
> > > - return correct value int odp_timeout_tick
> > >
> > > Signed-off-by: Petri Savolainen <[email protected]>
> > > ---
> > > platform/linux-generic/odp_timer.c | 127 ++++++++++++++++++++++++---
> > ----------
> > > 1 file changed, 83 insertions(+), 44 deletions(-)
> > >
> > > diff --git a/platform/linux-generic/odp_timer.c b/platform/linux-
> > generic/odp_timer.c
> > > index 73a690b..1bf37f9 100644
> > > --- a/platform/linux-generic/odp_timer.c
> > > +++ b/platform/linux-generic/odp_timer.c
> > > @@ -29,9 +29,11 @@ typedef struct {
> > > } tick_t;
> > >
> > > typedef struct {
> > > + int allocated;
> > > volatile int active;
> > > volatile uint64_t cur_tick;
> > > timer_t timerid;
> > > + odp_timer_t timer_hdl;
> > > odp_buffer_pool_t pool;
> > > uint64_t resolution_ns;
> > > uint64_t max_ticks;
> > > @@ -40,8 +42,10 @@ typedef struct {
> > > } timer_ring_t;
> > >
> > > typedef struct {
> > > - timer_ring_t timer[NUM_TIMERS];
> > > - odp_atomic_int_t num_timers;
> > > + odp_spinlock_t lock;
> > > + int num_timers;
> > > + timer_ring_t timer[NUM_TIMERS];
> > > +
> > > } timer_global_t;
> >
> > [...]
>
> Added lock.
>
> >
> > >
> > > - odp_timer.timer[id].pool = pool;
> > > - odp_timer.timer[id].resolution_ns = RESOLUTION_NS;
> > > - odp_timer.timer[id].max_ticks = MAX_TICKS;
> > > + timer = &odp_timer.timer[id];
> > > + timer->allocated = 1;
> > > + odp_timer.num_timers++;
> > > +
> > > + odp_spinlock_unlock(&odp_timer.lock);
> > > +
> > > + timer_hdl = id + 1;
> > > +
> > > + timer->timer_hdl = timer_hdl;
> > > + timer->pool = pool;
> >
> > pool change to pool_hdl
>
> No need to highlight that odp_buffer_pool_t is a handle, because
> it's always that outside of the buffer pool implementation. Timer handle vs.
> index needs highlighting since this file uses both (implements it).
ok.
>
> >
> > > + timer->resolution_ns = RESOLUTION_NS;
> > > + timer->max_ticks = MAX_TICKS;
> > > +
> > > + for (i = 0; i < MAX_TICKS; i++) {
> > > + odp_spinlock_init(&timer->tick[i].lock);
> > > + timer->tick[i].list = NULL;
> > > + }
> > >
> > > + timer->active = 1;
> > > odp_sync_stores();
> > >
> > > - odp_timer.timer[id].active = 1;
> > > + timer_start(timer);
> > >
> > > - return id + 1;
> > > + return timer_hdl;
> > > }
> > >
> > > -odp_timer_tmo_t odp_timer_absolute_tmo(odp_timer_t timer, uint64_t
> > tmo_tick,
> > > +odp_timer_tmo_t odp_timer_absolute_tmo(odp_timer_t timer_hdl,
> > uint64_t tmo_tick,
> > > odp_queue_t queue, odp_buffer_t buf)
> > > {
> > > int id;
> > > @@ -269,10 +306,12 @@ odp_timer_tmo_t
> > odp_timer_absolute_tmo(odp_timer_t timer, uint64_t tmo_tick,
> > > timeout_t *new_tmo;
> > > odp_buffer_t tmo_buf;
> > > odp_timeout_hdr_t *tmo_hdr;
> > > + timer_ring_t *timer;
> > >
> > > - id = timer - 1;
> > > + id = timer_hdl - 1;
> >
> > I got confused here, whats the difference between timerid and id and
> > timer_hdl?
>
> Timerid comes from POSIX API. It's used only for referencing the POSIX timer.
urgh, I read id as index... I'm sorry.
>
> -Petri
>
> > Cheers,
> > Anders
_______________________________________________
lng-odp mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/lng-odp