Re: [PATCH v3] Test needed for timer_create with CLOCK_MONOTONIC
On Sat, Aug 7, 2021 at 10:57 AM Gedare Bloom wrote: > > On Fri, Aug 6, 2021 at 11:55 AM zack leung wrote: > > > > How do i report the findings of the psx and tests? > > > > You can just copy-paste the final part of the log file when you run > rtems-test. Or you can share the full log file as attachment I also asked that Zack try to run coverage. I don't mind merging this before he gets those results. But since he is on sparc, sis can do coverage, so it is not a far reach. And he can be sure the test covers the new code added completely. timergettime.c reports as not having an end of line at the end of the file. It is missing a carriage return. Just hit enter and then make sure there isn't a blank line at the end of the file. > > > > Thanks > > Zack > > > > On Thu, 5 Aug 2021 at 19:23, Gedare Bloom wrote: > >> > >> On Thu, Aug 5, 2021 at 12:36 PM Zacchaeus Leung > >> wrote: > >> > > >> > the timer_create() method can use CLOCK_MONOTONIC but there was no test > >> > for this > >> > > >> The commit message needs to be improved, because this patch is doing > >> more than adding a "test", it is implementing the functionality to > >> create a CLOCK_MONOTONIC timer and to gettime() on it. > >> > >> > Closes #3888 > >> https://devel.rtems.org/ticket/3888 ?? > >> > >> > > >> > --- > >> > >> [...] > >> > >> > + > >> > + if ( rtems_timespec_less_than( &now, &expire ) ) { > >> > + rtems_timespec_subtract( &now, &expire, &result ); > >> > +} else { > >> > + result.tv_nsec = 0; > >> > + result.tv_sec = 0; > >> > +} > >> The indentation level is wrong in this block. > >> > >> > + > >> > + value->it_value = result; > >> > + value->it_interval = ptimer->timer_data.it_interval; > >> > + > >> > + _POSIX_Timer_Release( cpu, &lock_context ); > >> > + return 0; > >> > +} > >> > \ No newline at end of file > >> > diff --git a/testsuites/psxtests/psxtimer02/psxtimer.c > >> > b/testsuites/psxtests/psxtimer02/psxtimer.c > >> > index 9f79d33c42..1a79369efb 100644 > >> > --- a/testsuites/psxtests/psxtimer02/psxtimer.c > >> > +++ b/testsuites/psxtests/psxtimer02/psxtimer.c > >> > @@ -126,6 +126,32 @@ void *POSIX_Init ( > >> >puts( "timer_delete - bad id - EINVAL" ); > >> >status = timer_delete( timer ); > >> >fatal_posix_service_status_errno( status, EINVAL, "bad id" ); > >> > + > >> > + puts( "timer_create (monotonic) - bad timer id pointer - EINVAL" ); > >> > + status = timer_create( CLOCK_MONOTONIC, &event, NULL ); > >> > + fatal_posix_service_status_errno( status, EINVAL, "bad timer id" ); > >> > + > >> > + puts( "timer_create (monotonic) - OK" ); > >> > + status = timer_create( CLOCK_MONOTONIC, NULL, &timer ); > >> > + posix_service_failed( status, "timer_create OK" ); > >> > + > >> > + puts( "timer_create (monotonic) - too many - EAGAIN" ); > >> > + status = timer_create( CLOCK_MONOTONIC, NULL, &timer1 ); > >> > + fatal_posix_service_status_errno( status, EAGAIN, "too many" ); > >> > + > >> > + clock_gettime( CLOCK_MONOTONIC, &now ); > >> > + itimer.it_value = now; > >> > + itimer.it_value.tv_sec = itimer.it_value.tv_sec - 1; > >> > + puts( "timer_settime (monotonic) - bad itimer value - previous time - > >> > EINVAL" ); > >> > + status = timer_settime( timer, TIMER_ABSTIME, &itimer, NULL ); > >> > + fatal_posix_service_status_errno( status, EINVAL, "bad itimer value > >> > #3" ); > >> > + > >> > + clock_gettime( CLOCK_MONOTONIC, &now ); > >> > + itimer.it_value = now; > >> > + itimer.it_value.tv_sec = itimer.it_value.tv_sec + 1; > >> > + puts( "timer_settime (monotonic) - bad id - EINVAL" ); > >> > + status = timer_settime( timer1, TIMER_ABSTIME, &itimer, NULL ); > >> > + fatal_posix_service_status_errno( status, EINVAL, "bad id" ); > >> > > >> > >> Please provide updated psxtimer02.scn and report the results for > >> running rtems-test for at least the sparc/erc32 with sis including the > >> sptests and psxtests. If you need help how to run rtems-test, consult > >> the documentation and ask questions. > >> https://docs.rtems.org/branches/master/user/testing/index.html > >> > >> >TEST_END(); > >> >rtems_test_exit (0); > >> > -- > >> > 2.32.0 > >> > > >> > ___ > >> > devel mailing list > >> > devel@rtems.org > >> > http://lists.rtems.org/mailman/listinfo/devel > ___ > devel mailing list > devel@rtems.org > http://lists.rtems.org/mailman/listinfo/devel ___ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel
Re: [PATCH v3] Test needed for timer_create with CLOCK_MONOTONIC
On Fri, Aug 6, 2021 at 11:55 AM zack leung wrote: > > How do i report the findings of the psx and tests? > You can just copy-paste the final part of the log file when you run rtems-test. Or you can share the full log file as attachment > > Thanks > Zack > > On Thu, 5 Aug 2021 at 19:23, Gedare Bloom wrote: >> >> On Thu, Aug 5, 2021 at 12:36 PM Zacchaeus Leung >> wrote: >> > >> > the timer_create() method can use CLOCK_MONOTONIC but there was no test >> > for this >> > >> The commit message needs to be improved, because this patch is doing >> more than adding a "test", it is implementing the functionality to >> create a CLOCK_MONOTONIC timer and to gettime() on it. >> >> > Closes #3888 >> https://devel.rtems.org/ticket/3888 ?? >> >> > >> > --- >> >> [...] >> >> > + >> > + if ( rtems_timespec_less_than( &now, &expire ) ) { >> > + rtems_timespec_subtract( &now, &expire, &result ); >> > +} else { >> > + result.tv_nsec = 0; >> > + result.tv_sec = 0; >> > +} >> The indentation level is wrong in this block. >> >> > + >> > + value->it_value = result; >> > + value->it_interval = ptimer->timer_data.it_interval; >> > + >> > + _POSIX_Timer_Release( cpu, &lock_context ); >> > + return 0; >> > +} >> > \ No newline at end of file >> > diff --git a/testsuites/psxtests/psxtimer02/psxtimer.c >> > b/testsuites/psxtests/psxtimer02/psxtimer.c >> > index 9f79d33c42..1a79369efb 100644 >> > --- a/testsuites/psxtests/psxtimer02/psxtimer.c >> > +++ b/testsuites/psxtests/psxtimer02/psxtimer.c >> > @@ -126,6 +126,32 @@ void *POSIX_Init ( >> >puts( "timer_delete - bad id - EINVAL" ); >> >status = timer_delete( timer ); >> >fatal_posix_service_status_errno( status, EINVAL, "bad id" ); >> > + >> > + puts( "timer_create (monotonic) - bad timer id pointer - EINVAL" ); >> > + status = timer_create( CLOCK_MONOTONIC, &event, NULL ); >> > + fatal_posix_service_status_errno( status, EINVAL, "bad timer id" ); >> > + >> > + puts( "timer_create (monotonic) - OK" ); >> > + status = timer_create( CLOCK_MONOTONIC, NULL, &timer ); >> > + posix_service_failed( status, "timer_create OK" ); >> > + >> > + puts( "timer_create (monotonic) - too many - EAGAIN" ); >> > + status = timer_create( CLOCK_MONOTONIC, NULL, &timer1 ); >> > + fatal_posix_service_status_errno( status, EAGAIN, "too many" ); >> > + >> > + clock_gettime( CLOCK_MONOTONIC, &now ); >> > + itimer.it_value = now; >> > + itimer.it_value.tv_sec = itimer.it_value.tv_sec - 1; >> > + puts( "timer_settime (monotonic) - bad itimer value - previous time - >> > EINVAL" ); >> > + status = timer_settime( timer, TIMER_ABSTIME, &itimer, NULL ); >> > + fatal_posix_service_status_errno( status, EINVAL, "bad itimer value #3" >> > ); >> > + >> > + clock_gettime( CLOCK_MONOTONIC, &now ); >> > + itimer.it_value = now; >> > + itimer.it_value.tv_sec = itimer.it_value.tv_sec + 1; >> > + puts( "timer_settime (monotonic) - bad id - EINVAL" ); >> > + status = timer_settime( timer1, TIMER_ABSTIME, &itimer, NULL ); >> > + fatal_posix_service_status_errno( status, EINVAL, "bad id" ); >> > >> >> Please provide updated psxtimer02.scn and report the results for >> running rtems-test for at least the sparc/erc32 with sis including the >> sptests and psxtests. If you need help how to run rtems-test, consult >> the documentation and ask questions. >> https://docs.rtems.org/branches/master/user/testing/index.html >> >> >TEST_END(); >> >rtems_test_exit (0); >> > -- >> > 2.32.0 >> > >> > ___ >> > devel mailing list >> > devel@rtems.org >> > http://lists.rtems.org/mailman/listinfo/devel ___ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel
Re: [PATCH v3] Test needed for timer_create with CLOCK_MONOTONIC
How do i report the findings of the psx and tests? Thanks Zack On Thu, 5 Aug 2021 at 19:23, Gedare Bloom wrote: > On Thu, Aug 5, 2021 at 12:36 PM Zacchaeus Leung > wrote: > > > > the timer_create() method can use CLOCK_MONOTONIC but there was no test > for this > > > The commit message needs to be improved, because this patch is doing > more than adding a "test", it is implementing the functionality to > create a CLOCK_MONOTONIC timer and to gettime() on it. > > > Closes #3888 > https://devel.rtems.org/ticket/3888 ?? > > > > > --- > > [...] > > > + > > + if ( rtems_timespec_less_than( &now, &expire ) ) { > > + rtems_timespec_subtract( &now, &expire, &result ); > > +} else { > > + result.tv_nsec = 0; > > + result.tv_sec = 0; > > +} > The indentation level is wrong in this block. > > > + > > + value->it_value = result; > > + value->it_interval = ptimer->timer_data.it_interval; > > + > > + _POSIX_Timer_Release( cpu, &lock_context ); > > + return 0; > > +} > > \ No newline at end of file > > diff --git a/testsuites/psxtests/psxtimer02/psxtimer.c > b/testsuites/psxtests/psxtimer02/psxtimer.c > > index 9f79d33c42..1a79369efb 100644 > > --- a/testsuites/psxtests/psxtimer02/psxtimer.c > > +++ b/testsuites/psxtests/psxtimer02/psxtimer.c > > @@ -126,6 +126,32 @@ void *POSIX_Init ( > >puts( "timer_delete - bad id - EINVAL" ); > >status = timer_delete( timer ); > >fatal_posix_service_status_errno( status, EINVAL, "bad id" ); > > + > > + puts( "timer_create (monotonic) - bad timer id pointer - EINVAL" ); > > + status = timer_create( CLOCK_MONOTONIC, &event, NULL ); > > + fatal_posix_service_status_errno( status, EINVAL, "bad timer id" ); > > + > > + puts( "timer_create (monotonic) - OK" ); > > + status = timer_create( CLOCK_MONOTONIC, NULL, &timer ); > > + posix_service_failed( status, "timer_create OK" ); > > + > > + puts( "timer_create (monotonic) - too many - EAGAIN" ); > > + status = timer_create( CLOCK_MONOTONIC, NULL, &timer1 ); > > + fatal_posix_service_status_errno( status, EAGAIN, "too many" ); > > + > > + clock_gettime( CLOCK_MONOTONIC, &now ); > > + itimer.it_value = now; > > + itimer.it_value.tv_sec = itimer.it_value.tv_sec - 1; > > + puts( "timer_settime (monotonic) - bad itimer value - previous time - > EINVAL" ); > > + status = timer_settime( timer, TIMER_ABSTIME, &itimer, NULL ); > > + fatal_posix_service_status_errno( status, EINVAL, "bad itimer value > #3" ); > > + > > + clock_gettime( CLOCK_MONOTONIC, &now ); > > + itimer.it_value = now; > > + itimer.it_value.tv_sec = itimer.it_value.tv_sec + 1; > > + puts( "timer_settime (monotonic) - bad id - EINVAL" ); > > + status = timer_settime( timer1, TIMER_ABSTIME, &itimer, NULL ); > > + fatal_posix_service_status_errno( status, EINVAL, "bad id" ); > > > > Please provide updated psxtimer02.scn and report the results for > running rtems-test for at least the sparc/erc32 with sis including the > sptests and psxtests. If you need help how to run rtems-test, consult > the documentation and ask questions. > https://docs.rtems.org/branches/master/user/testing/index.html > > >TEST_END(); > >rtems_test_exit (0); > > -- > > 2.32.0 > > > > ___ > > devel mailing list > > devel@rtems.org > > http://lists.rtems.org/mailman/listinfo/devel > ___ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel
Re: [PATCH v3] Test needed for timer_create with CLOCK_MONOTONIC
On Thu, Aug 5, 2021 at 12:36 PM Zacchaeus Leung wrote: > > the timer_create() method can use CLOCK_MONOTONIC but there was no test for > this > The commit message needs to be improved, because this patch is doing more than adding a "test", it is implementing the functionality to create a CLOCK_MONOTONIC timer and to gettime() on it. > Closes #3888 https://devel.rtems.org/ticket/3888 ?? > > --- [...] > + > + if ( rtems_timespec_less_than( &now, &expire ) ) { > + rtems_timespec_subtract( &now, &expire, &result ); > +} else { > + result.tv_nsec = 0; > + result.tv_sec = 0; > +} The indentation level is wrong in this block. > + > + value->it_value = result; > + value->it_interval = ptimer->timer_data.it_interval; > + > + _POSIX_Timer_Release( cpu, &lock_context ); > + return 0; > +} > \ No newline at end of file > diff --git a/testsuites/psxtests/psxtimer02/psxtimer.c > b/testsuites/psxtests/psxtimer02/psxtimer.c > index 9f79d33c42..1a79369efb 100644 > --- a/testsuites/psxtests/psxtimer02/psxtimer.c > +++ b/testsuites/psxtests/psxtimer02/psxtimer.c > @@ -126,6 +126,32 @@ void *POSIX_Init ( >puts( "timer_delete - bad id - EINVAL" ); >status = timer_delete( timer ); >fatal_posix_service_status_errno( status, EINVAL, "bad id" ); > + > + puts( "timer_create (monotonic) - bad timer id pointer - EINVAL" ); > + status = timer_create( CLOCK_MONOTONIC, &event, NULL ); > + fatal_posix_service_status_errno( status, EINVAL, "bad timer id" ); > + > + puts( "timer_create (monotonic) - OK" ); > + status = timer_create( CLOCK_MONOTONIC, NULL, &timer ); > + posix_service_failed( status, "timer_create OK" ); > + > + puts( "timer_create (monotonic) - too many - EAGAIN" ); > + status = timer_create( CLOCK_MONOTONIC, NULL, &timer1 ); > + fatal_posix_service_status_errno( status, EAGAIN, "too many" ); > + > + clock_gettime( CLOCK_MONOTONIC, &now ); > + itimer.it_value = now; > + itimer.it_value.tv_sec = itimer.it_value.tv_sec - 1; > + puts( "timer_settime (monotonic) - bad itimer value - previous time - > EINVAL" ); > + status = timer_settime( timer, TIMER_ABSTIME, &itimer, NULL ); > + fatal_posix_service_status_errno( status, EINVAL, "bad itimer value #3" ); > + > + clock_gettime( CLOCK_MONOTONIC, &now ); > + itimer.it_value = now; > + itimer.it_value.tv_sec = itimer.it_value.tv_sec + 1; > + puts( "timer_settime (monotonic) - bad id - EINVAL" ); > + status = timer_settime( timer1, TIMER_ABSTIME, &itimer, NULL ); > + fatal_posix_service_status_errno( status, EINVAL, "bad id" ); > Please provide updated psxtimer02.scn and report the results for running rtems-test for at least the sparc/erc32 with sis including the sptests and psxtests. If you need help how to run rtems-test, consult the documentation and ask questions. https://docs.rtems.org/branches/master/user/testing/index.html >TEST_END(); >rtems_test_exit (0); > -- > 2.32.0 > > ___ > devel mailing list > devel@rtems.org > http://lists.rtems.org/mailman/listinfo/devel ___ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel
[PATCH v3] Test needed for timer_create with CLOCK_MONOTONIC
the timer_create() method can use CLOCK_MONOTONIC but there was no test for this Closes #3888 --- cpukit/include/rtems/posix/timer.h| 1 + cpukit/posix/src/psxtimercreate.c | 3 +- cpukit/posix/src/timergettime.c | 54 ++- testsuites/psxtests/psxtimer02/psxtimer.c | 26 +++ 4 files changed, 62 insertions(+), 22 deletions(-) diff --git a/cpukit/include/rtems/posix/timer.h b/cpukit/include/rtems/posix/timer.h index bcbf07a65a..7ae089173a 100644 --- a/cpukit/include/rtems/posix/timer.h +++ b/cpukit/include/rtems/posix/timer.h @@ -48,6 +48,7 @@ typedef struct { uint32_t ticks; /* Number of ticks of the initialization */ uint32_t overrun;/* Number of expirations of the timer*/ struct timespec time; /* Time at which the timer was started */ + clockid_t clock_type; /* The type of timer */ } POSIX_Timer_Control; /** diff --git a/cpukit/posix/src/psxtimercreate.c b/cpukit/posix/src/psxtimercreate.c index a63cf1d100..2b5a10140f 100644 --- a/cpukit/posix/src/psxtimercreate.c +++ b/cpukit/posix/src/psxtimercreate.c @@ -40,7 +40,7 @@ int timer_create( { POSIX_Timer_Control *ptimer; - if ( clock_id != CLOCK_REALTIME ) + if ( clock_id != CLOCK_REALTIME && clock_id != CLOCK_MONOTONIC ) rtems_set_errno_and_return_minus_one( EINVAL ); if ( !timerid ) @@ -91,6 +91,7 @@ int timer_create( ptimer->timer_data.it_value.tv_nsec= 0; ptimer->timer_data.it_interval.tv_sec = 0; ptimer->timer_data.it_interval.tv_nsec = 0; + ptimer->clock_type = clock_id; _Watchdog_Preinitialize( &ptimer->Timer, _Per_CPU_Get_snapshot() ); _Watchdog_Initialize( &ptimer->Timer, _POSIX_Timer_TSR ); diff --git a/cpukit/posix/src/timergettime.c b/cpukit/posix/src/timergettime.c index ee2a566f0e..3920325e52 100644 --- a/cpukit/posix/src/timergettime.c +++ b/cpukit/posix/src/timergettime.c @@ -28,6 +28,7 @@ #include #include #include +#include /* * - When a timer is initialized, the value of the time in @@ -39,35 +40,46 @@ int timer_gettime( timer_ttimerid, struct itimerspec *value ) { POSIX_Timer_Control *ptimer; - ISR_lock_Context lock_context; - uint64_t now; - uint32_t remaining; + ISR_lock_Context lock_context; + Per_CPU_Control *cpu; + struct timespec now; + struct timespec expire; + struct timespec result; if ( !value ) rtems_set_errno_and_return_minus_one( EINVAL ); ptimer = _POSIX_Timer_Get( timerid, &lock_context ); - if ( ptimer != NULL ) { -Per_CPU_Control *cpu; - -cpu = _POSIX_Timer_Acquire_critical( ptimer, &lock_context ); -now = cpu->Watchdog.ticks; - -if ( now < ptimer->Timer.expire ) { - remaining = (uint32_t) ( ptimer->Timer.expire - now ); -} else { - remaining = 0; -} + if ( ptimer == NULL ) { +rtems_set_errno_and_return_minus_one( EINVAL ); + } -_Timespec_From_ticks( remaining, &value->it_value ); -value->it_interval = ptimer->timer_data.it_interval; + cpu = _POSIX_Timer_Acquire_critical( ptimer, &lock_context ); + rtems_timespec_from_ticks( ptimer->Timer.expire, &expire ); -_POSIX_Timer_Release( cpu, &lock_context ); -return 0; + if ( ptimer->clock_type == CLOCK_MONOTONIC ) { + _Timecounter_Nanouptime(&now); + } else if (ptimer->clock_type == CLOCK_REALTIME) { +_TOD_Get(&now); + } else { + _POSIX_Timer_Release( cpu, &lock_context ); + rtems_set_errno_and_return_minus_one( EINVAL ); } - rtems_set_errno_and_return_minus_one( EINVAL ); -} + + if ( rtems_timespec_less_than( &now, &expire ) ) { + rtems_timespec_subtract( &now, &expire, &result ); +} else { + result.tv_nsec = 0; + result.tv_sec = 0; +} + + value->it_value = result; + value->it_interval = ptimer->timer_data.it_interval; + + _POSIX_Timer_Release( cpu, &lock_context ); + return 0; +} \ No newline at end of file diff --git a/testsuites/psxtests/psxtimer02/psxtimer.c b/testsuites/psxtests/psxtimer02/psxtimer.c index 9f79d33c42..1a79369efb 100644 --- a/testsuites/psxtests/psxtimer02/psxtimer.c +++ b/testsuites/psxtests/psxtimer02/psxtimer.c @@ -126,6 +126,32 @@ void *POSIX_Init ( puts( "timer_delete - bad id - EINVAL" ); status = timer_delete( timer ); fatal_posix_service_status_errno( status, EINVAL, "bad id" ); + + puts( "timer_create (monotonic) - bad timer id pointer - EINVAL" ); + status = timer_create( CLOCK_MONOTONIC, &event, NULL ); + fatal_posix_service_status_errno( status, EINVAL, "bad timer id" ); + + puts( "timer_create (monotonic) - OK" ); + status = timer_create( CLOCK_MONOTONIC, NULL, &timer ); + posix_service_failed( status, "timer_create OK" ); + + puts( "timer_create (monotonic) - too many - EAGAIN" ); + status = timer_create( CLOCK_MONOTONIC, NULL, &timer1 ); + fatal_posix_service_status_errno( status, EAGAIN, "too many" ); + + clock_gettime( CLOCK_MONOTONIC, &now );