On Tue, Apr 4, 2017 at 3:37 PM, Brian Brooks <brian.bro...@arm.com> wrote: > On 04/04 21:59:15, Maxim Uvarov wrote: >> On 04/04/17 21:47, Brian Brooks wrote: >> > Signed-off-by: Ola Liljedahl <ola.liljed...@arm.com> >> > Reviewed-by: Brian Brooks <brian.bro...@arm.com> >> > Reviewed-by: Honnappa Nagarahalli <honnappa.nagaraha...@arm.com> >> > Reviewed-by: Kevin Wang <kevin.w...@arm.com> >> > --- >> > test/common_plat/performance/odp_scheduling.c | 12 ++++++++++-- >> > 1 file changed, 10 insertions(+), 2 deletions(-) >> > >> > diff --git a/test/common_plat/performance/odp_scheduling.c >> > b/test/common_plat/performance/odp_scheduling.c >> > index c74a0713..38e76257 100644 >> > --- a/test/common_plat/performance/odp_scheduling.c >> > +++ b/test/common_plat/performance/odp_scheduling.c >> > @@ -273,7 +273,7 @@ static int test_plain_queue(int thr, test_globals_t >> > *globals) >> > test_message_t *t_msg; >> > odp_queue_t queue; >> > uint64_t c1, c2, cycles; >> > - int i; >> > + int i, j; >> > >> > /* Alloc test message */ >> > buf = odp_buffer_alloc(globals->pool); >> > @@ -307,7 +307,15 @@ static int test_plain_queue(int thr, test_globals_t >> > *globals) >> > return -1; >> > } >> > >> > - ev = odp_queue_deq(queue); >> > + /* When enqueue and dequeue are decoupled (e.g. not using a >> > + * common lock), an enqueued event may not be immediately >> > + * visible to dequeue. So we just try again for a while. */ >> > + for (j = 0; j < 100; j++) { >> >> where 100 number comes from? > > It is the retry count. Perhaps it could be a bit lower, or a bit higher, but > it works well.
Actually, it's incorrect. What happens if all 100 retries fail? You'll call odp_buffer_from_event() for ODP_EVENT_INVALID, which is undefined. > >> Maxim. >> >> > + ev = odp_queue_deq(queue); >> > + if (ev != ODP_EVENT_INVALID) >> > + break; >> > + odp_cpu_pause(); >> > + } >> > >> > buf = odp_buffer_from_event(ev); >> > >> > >>