On 10 March 2015 at 15:59, Maxim Uvarov <[email protected]> wrote:
> On 03/10/15 17:43, Ola Liljedahl 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]>
>> ---
>> (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.
>>
>> 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..6b48d2e 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 header fields if timeout event */
>> + 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);
>
> as we discussed earlier this 2 definitions of tmo_hdr can be one on top of
> timer_expire().
> int succ can be int ret and also defined on top.
Yes they can but that would be a different coding style. It is OK to
declare variables at beginning of a block, even Linux does it (see
Petri's example). This has been OK since the beginning of time (the
start of the Epoch, Jan. 1st 1970).
>
> Maxim.
>
>> + 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 if timeout event */
>> 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));
>
>
>
> _______________________________________________
> 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