From c64c638f6dee6c0e92804bbe378ff91cc75f620e Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Mon, 1 Aug 2022 09:03:11 +0200 Subject: posix: Fix relative CLOCK_REALTIME sleep A relative CLOCK_REALTIME time out shall not be affected by CLOCK_REALTIME changes through clock_settime(). Since our CLOCK_REALTIME is basically just CLOCK_MONOTONIC plus an offset, we can simply use the CLOCK_MONOTONIC watchdog for relative CLOCK_REALTIME time outs. Update #4690. --- testsuites/validation/tc-clock-nanosleep.c | 46 +++++++++--------------------- 1 file changed, 14 insertions(+), 32 deletions(-) (limited to 'testsuites/validation') diff --git a/testsuites/validation/tc-clock-nanosleep.c b/testsuites/validation/tc-clock-nanosleep.c index 2f4d439efe..45a3355384 100644 --- a/testsuites/validation/tc-clock-nanosleep.c +++ b/testsuites/validation/tc-clock-nanosleep.c @@ -659,16 +659,10 @@ static void CReqClockNanosleep_Post_Expire_Check( case CReqClockNanosleep_Post_Expire_Relative: { /* * The timer of the calling task shall expire at the time point specified - * by the sum of the current time of the clock specified by the - * ``clock_id`` parameter and the interval specified by the ``rqtp`` - * parameter. + * by the sum of the current time of the clock specified by + * CLOCK_MONOTONIC and the interval specified by the ``rqtp`` parameter. */ - if ( ctx->clock_id == CLOCK_REALTIME ) { - expire = ctx->now_realtime; - } else { - expire = ctx->now_monotonic; - } - + expire = ctx->now_monotonic; expire.tv_sec += ctx->rqtp_obj.tv_sec; expire.tv_nsec += ctx->rqtp_obj.tv_nsec; @@ -854,22 +848,10 @@ CReqClockNanosleep_Entries[] = { CReqClockNanosleep_Post_Timer_Monotonic, CReqClockNanosleep_Post_Expire_Last, CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop }, - { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero, - CReqClockNanosleep_Post_Timer_Realtime, - CReqClockNanosleep_Post_Expire_Last, - CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop }, { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero, CReqClockNanosleep_Post_Timer_Monotonic, CReqClockNanosleep_Post_Expire_Absolute, CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop }, - { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero, - CReqClockNanosleep_Post_Timer_Inactive, CReqClockNanosleep_Post_Expire_NA, - CReqClockNanosleep_Post_Scheduler_BlockUnblock, - CReqClockNanosleep_Post_RMTp_Zero }, - { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero, - CReqClockNanosleep_Post_Timer_Realtime, - CReqClockNanosleep_Post_Expire_Absolute, - CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop }, { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero, CReqClockNanosleep_Post_Timer_Monotonic, CReqClockNanosleep_Post_Expire_Last, @@ -883,26 +865,26 @@ CReqClockNanosleep_Entries[] = { CReqClockNanosleep_Post_Expire_Relative, CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop }, { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero, - CReqClockNanosleep_Post_Timer_Realtime, - CReqClockNanosleep_Post_Expire_Last, - CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Zero }, + CReqClockNanosleep_Post_Timer_Inactive, CReqClockNanosleep_Post_Expire_NA, + CReqClockNanosleep_Post_Scheduler_BlockUnblock, + CReqClockNanosleep_Post_RMTp_Zero }, { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero, CReqClockNanosleep_Post_Timer_Realtime, - CReqClockNanosleep_Post_Expire_Relative, - CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Zero }, + CReqClockNanosleep_Post_Expire_Last, + CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop }, { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero, CReqClockNanosleep_Post_Timer_Realtime, - CReqClockNanosleep_Post_Expire_Relative, + CReqClockNanosleep_Post_Expire_Absolute, CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop } }; static const uint8_t CReqClockNanosleep_Map[] = { - 6, 6, 8, 8, 10, 10, 6, 6, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 2, 13, 8, 14, 15, 11, 6, 7, 2, 7, 2, 7, 2, 7, 2, 3, - 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 6, 6, 9, 9, 12, 12, 6, 6, 2, 2, - 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 2, 16, - 9, 17, 18, 11, 6, 7, 2, 7, 2, 7, 2, 7, 2, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, + 6, 6, 8, 8, 9, 9, 6, 6, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 2, 10, 8, 11, 12, 13, 6, 7, 2, 7, 2, 7, 2, 7, 2, 3, 0, + 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 6, 6, 14, 14, 15, 15, 6, 6, 2, 2, + 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 2, 10, + 8, 11, 12, 13, 6, 7, 2, 7, 2, 7, 2, 7, 2, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 -- cgit v1.2.3