On 15 January 2015 at 14:12, Ola Dahl <[email protected]> wrote: > > The change > > diff --git a/platform/linux-generic/odp_timer.c > b/platform/linux-generic/odp_timer.c > index ef26b02..3ba32a1 100644 > --- a/platform/linux-generic/odp_timer.c > +++ b/platform/linux-generic/odp_timer.c > @@ -659,7 +659,7 @@ static void itimer_init(odp_timer_pool *tp) > ispec.it_value.tv_sec = (time_t)sec; > ispec.it_value.tv_nsec = (long)nsec; > > - if (timer_settime(&tp->timerid, 0, &ispec, NULL)) > + if (timer_settime(tp->timerid, 0, &ispec, NULL)) > ODP_ABORT("timer_settime() returned error %s\n", > strerror(errno)); > } > > makes the problem go away, but it stops a bit later, with > > odp_timer_test.c:151:test_abs_timeouts(): [7] timeout, tick 402 > odp_timer_test.c:151:test_abs_timeouts(): [7] timeout, tick 402 > odp_timer_test.c:125:test_abs_timeouts(): odp_timer_set_abs() failed: too > early > > which I guess is already reported, in > > http://lists.linaro.org/pipermail/lng-odp/2015-January/007525.html Bug report and link to a solution (patch): https://bugs.linaro.org/show_bug.cgi?id=1068
> > Best regards, > > Ola D > > On 2015-01-14 15:08, Mike Holmes wrote: >> >> I think you have a patch for this already - it needs to say Reported-by >> Ola Dahl, maybe Maxim can insert that this time if you don't end up >> making a v2 >> >> On 14 January 2015 at 09:04, Ola Liljedahl <[email protected] >> <mailto:[email protected]>> wrote: >> >> On 14 January 2015 at 14:55, Mike Holmes <[email protected] >> <mailto:[email protected]>> wrote: >> > Should this be a tacked bug in >> >https://bugs.linaro.org/enter_bug.cgi?product=OpenDataPlane ? >> Yes I guess so. >> >> > >> > Mike >> > >> > On 14 January 2015 at 06:10, Ola Liljedahl >> <[email protected] <mailto:[email protected]>> wrote: >> >> >> >> On 14 January 2015 at 11:23, Ola Dahl <[email protected] >> <mailto:[email protected]>> wrote: >> >> > Hi, >> >> > >> >> > when I run the ODP timer test on 32-bit Ubuntu, it fails. >> >> > >> >> > I use ODP commit >> >> > >> >> > commit 68c7b7e88b1b948868d35497e715cf5077e90e40 >> >> > Author: Mike Holmes <[email protected] >> <mailto:[email protected]>> >> >> > Date: Fri Jan 2 16:30:16 2015 -0500 >> >> > >> >> > api: odp_coremask: Improve documentation >> >> > >> >> > and the timer test fails as >> >> > >> >> > ubuntu@ubuntu:~/odp$ ./example/timer/odp_timer_test >> >> > >> >> > ODP timer example starts >> >> > odp_buffer_pool.c:90:odp_buffer_pool_init_global(): >> >> > Buffer pool init global >> >> > odp_buffer_pool.c:91:odp_buffer_pool_init_global(): >> pool_entry_s size >> >> > 256 >> >> > odp_buffer_pool.c:92:odp_buffer_pool_init_global(): >> pool_entry_t size >> >> > 256 >> >> > odp_buffer_pool.c:93:odp_buffer_pool_init_global(): >> odp_buffer_hdr_t >> >> > size >> >> > 76 >> >> > odp_buffer_pool.c:94:odp_buffer_pool_init_global(): >> >> > odp_queue.c:100:odp_queue_init_global():Queue init ... >> >> > odp_queue.c:120:odp_queue_init_global():done >> >> > odp_queue.c:121:odp_queue_init_global():Queue init global >> >> > odp_queue.c:123:odp_queue_init_global(): struct queue_entry_s >> size 192 >> >> > odp_queue.c:125:odp_queue_init_global(): queue_entry_t size >> 192 >> >> > odp_queue.c:126:odp_queue_init_global(): >> >> > odp_schedule.c:90:odp_schedule_init_global():Schedule init ... >> >> > odp_schedule.c:142:odp_schedule_init_global():done >> >> > >> >> > ODP system info >> >> > --------------- >> >> > ODP API version: 0.7.0 >> >> > CPU model: Intel(R) Core(TM) i7-2760QM CPU @ 2.40GHz >> >> > CPU freq (hz): 2388222999 >> >> > Cache line size: 64 >> >> > Max CPU count: 1 >> >> > >> >> > num worker threads: 1 >> >> > first CPU: 0 >> >> > resolution: 10000 usec >> >> > min timeout: 0 usec >> >> > max timeout: 10000000 usec >> >> > period: 1000000 usec >> >> > timeouts: 30 >> >> > odp_timer.c:640:itimer_init():Creating POSIX timer for timer >> pool >> >> > timer_pool, period 10000000 ns >> >> > odp_timer.c:664:itimer_init():timer_settime() returned error >> Invalid >> >> > argument >> >> The POSIX timer uses CLOCK_MONOTONIC but this should always be >> >> supported me thinks. >> >> The man page has this for EINVAL: >> >> timer_settime() may fail with the following errors: >> >> >> >> EINVAL new_value.it_value is negative; or >> >> new_value.it_value.tv_nsec is >> >> negative or greater than 999,999,999. >> >> >> >> >> >> > Aborted (core dumped) >> >> Can you run again with core dumps enabled (ulimit -c unlimited) >> and >> >> print the values of the parameters to timer_settime? Or run it >> in gdb. >> >> >> >> > ubuntu@ubuntu:~/odp$ >> >> > >> >> > I use Virtualbox and a fresh Ubuntu 32-bit image, prepared using >> >> > >> >> > 3 sudo apt-get install git >> >> > 4 git clone https://git.linaro.org/lng/odp.git >> >> > 5 cd odp >> >> > 7 sudo apt-get install autoconf >> >> > 9 sudo apt-get install autotools-dev >> >> > 11 sudo apt-get install libtool >> >> > 14 ./bootstrap >> >> > 26 sudo apt-get update >> >> > 29 sudo apt-get install libssl-dev >> >> > 30 ./configure >> >> > 36 make all >> >> > 37 ./example/timer/odp_timer_test >> >> This works on my 32-bit ChromeBook2 (ARMv7a) so not a 32-bit >> problem. >> >> >> >> But I do get spurious errors "odp_timer_set_abs() failed: too >> early" >> >> and the example treats them as fatal errors (they don't have to >> be, >> >> that's why they are return codes, the application could/should try >> >> again with a later timeout tick). Possibly this is caused by the >> >> worker threads being preempted at the wrong place and so >> attempting to >> >> set timeouts for ticks that have already passed. >> >> >> >> Managed to configure and build odp for 32-bit x86 (I had to >> install >> >> libssl-dev:i386 package and that had weird side effects on my >> >> installation! gcc was for some reason also uninstalled and had to >> be >> >> reinstalled). >> >> >> >> And building ODP with "make CFLAGS=-m32", I get the same problem. >> >> 662 if (timer_settime(&tp->timerid, 0, &ispec, NULL)) >> >> (gdb) p ispec >> >> $1 = {it_interval = {tv_sec = 0, tv_nsec = 10000000}, it_value = >> {tv_sec = >> >> 0, >> >> tv_nsec = 10000000}} >> >> (gdb) n >> >> 663 ODP_ABORT("timer_settime() returned error %s\n", >> >> (gdb) n >> >> odp_timer.c:664:itimer_init():timer_settime() returned error >> Invalid >> >> argument >> >> >> >> Program received signal SIGABRT, Aborted. >> >> >> >> I found the bug: >> >> Current code: >> >> timer_settime(&tp->timerid, 0, &ispec, NULL) >> >> (timer_create some lines above also uses &tp->timerid to get the >> new >> >> timerid). >> >> >> >> Correct code: >> >> timer_settime(tp->timerid, 0, &ispec, NULL) >> >> Note no "&" on the timerid variable. >> >> >> >> This code was copied from the old timer implementation and has >> worked >> >> on x86-64 and ARMv7a (and other architectures?). And the compiler >> >> doesn't complain... >> >> >> >> 660 ispec.it_value.tv_nsec = (long)nsec; >> >> (gdb) >> >> 662 if (timer_settime(tp->timerid, 0, &ispec, NULL)) >> >> (gdb) >> >> 665 } >> >> >> >> >> >> > >> >> > Best regards, >> >> > >> >> > Ola D >> >> > >> >> > _______________________________________________ >> >> > lng-odp mailing list >> >> > [email protected] <mailto:[email protected]> >> >> > http://lists.linaro.org/mailman/listinfo/lng-odp >> >> >> >> _______________________________________________ >> >> lng-odp mailing list >> >> [email protected] <mailto:[email protected]> >> >> http://lists.linaro.org/mailman/listinfo/lng-odp >> > >> > >> > >> > >> > -- >> > Mike Holmes >> > Linaro Sr Technical Manager >> > LNG - ODP >> >> >> >> >> -- >> *Mike Holmes* >> Linaro Sr Technical Manager >> LNG - ODP > > _______________________________________________ lng-odp mailing list [email protected] http://lists.linaro.org/mailman/listinfo/lng-odp
