I originally was going to point out the 'typo' but my first reaction was
that if should be of rather than in.  However, on reflection it seemed that
if was what was intended.  However, I agree that this revised wording is
clearer.


On Wed, Mar 11, 2015 at 10:36 AM, Ola Liljedahl <[email protected]>
wrote:

> Ensure that the timeout user_ptr and timer fields are set when the
> corresponding timer is immediately cancelled.
> https://bugs.linaro.org/show_bug.cgi?id=1313
>
> Signed-off-by: Ola Liljedahl <[email protected]>
>

Reviewed-by: Bill Fischofer <[email protected]>


> ---
> (This document/code contribution attached is provided under the terms of
> agreement LES-LTM-21309)
>
> Passes odp_timer validation with the new odp_timer_cancel() test from
> Petri.
>
> v2:
> Updated some comments in odp_timer.c to make the meaning clearer.
>
>  platform/linux-generic/odp_timer.c | 18 ++++++++++++++----
>  1 file changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/platform/linux-generic/odp_timer.c
> b/platform/linux-generic/odp_timer.c
> index 61a02b6..b7cb04f 100644
> --- a/platform/linux-generic/odp_timer.c
> +++ b/platform/linux-generic/odp_timer.c
> @@ -421,6 +421,16 @@ static bool timer_reset(uint32_t idx,
>  #endif
>         } else {
>                 /* We have a new timeout buffer which replaces any old one
> */
> +               /* Fill in some (constant) header fields for timeout
> events */
> +               if (_odp_buffer_type(*tmo_buf) == ODP_EVENT_TIMEOUT) {
> +                       /* Convert from buffer to timeout hdr */
> +                       odp_timeout_hdr_t *tmo_hdr =
> +                               timeout_hdr_from_buf(*tmo_buf);
> +                       tmo_hdr->timer = tp_idx_to_handle(tp, idx);
> +                       tmo_hdr->user_ptr = tp->timers[idx].user_ptr;
> +                       /* expiration field filled in when timer expires */
> +               }
> +               /* Else ignore buffers of other types */
>                 odp_buffer_t old_buf = ODP_BUFFER_INVALID;
>  #ifdef ODP_ATOMIC_U128
>                 tick_buf_t new, old;
> @@ -556,16 +566,16 @@ static unsigned timer_expire(odp_timer_pool *tp,
> uint32_t idx, uint64_t tick)
>         _odp_atomic_flag_clear(IDX2LOCK(idx));
>  #endif
>         if (odp_likely(tmo_buf != ODP_BUFFER_INVALID)) {
> -               /* Fill in metadata fields in system timeout buffer */
> +               /* Fill in expiration tick for timeout events */
>                 if (_odp_buffer_type(tmo_buf) == ODP_EVENT_TIMEOUT) {
>                         /* Convert from buffer to timeout hdr */
>                         odp_timeout_hdr_t *tmo_hdr =
>                                 timeout_hdr_from_buf(tmo_buf);
> -                       tmo_hdr->timer = tp_idx_to_handle(tp, idx);
>                         tmo_hdr->expiration = exp_tck;
> -                       tmo_hdr->user_ptr = tim->user_ptr;
> +                       /* timer and user_ptr fields filled in when timer
> +                        * was set */
>                 }
> -               /* Else ignore buffers of other types */
> +               /* Else ignore events of other types */
>                 /* Post the timeout to the destination queue */
>                 int rc = odp_queue_enq(tim->queue,
>                                        odp_buffer_to_event(tmo_buf));
> --
> 1.9.1
>
>
> _______________________________________________
> lng-odp mailing list
> [email protected]
> http://lists.linaro.org/mailman/listinfo/lng-odp
>
_______________________________________________
lng-odp mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to