* [LTP] [PATCH] clock_settime: use POSIX runtime detection for CLOCK_MONOTONIC
@ 2026-04-16 13:01 Andrea Cervesato
2026-04-16 13:35 ` [LTP] " linuxtestproject.agent
2026-04-17 12:53 ` [LTP] [PATCH] " Petr Vorel
0 siblings, 2 replies; 3+ messages in thread
From: Andrea Cervesato @ 2026-04-16 13:01 UTC (permalink / raw)
To: Linux Test Project
From: Andrea Cervesato <andrea.cervesato@suse.com>
The clock_settime helpers.h used a compile-time #ifdef on
_POSIX_MONOTONIC_CLOCK to select between real and stub
implementations of pts_mono_time_start()/pts_mono_time_check().
On Linux/glibc, _POSIX_MONOTONIC_CLOCK is defined as 0, meaning
support is optional and must be verified at runtime via
sysconf(_SC_MONOTONIC_CLOCK). The #ifdef treated 0 the same as
>0 (always available), which is not POSIX-correct.
Replace the compile-time #ifdef/#else split with a runtime
pts_mono_available() helper that performs proper POSIX detection
via sysconf(). Also add a missing #ifndef include guard and
#include <unistd.h> so _POSIX_MONOTONIC_CLOCK is always defined.
Fixes: 9ecb4a004b18 ("clock_settime: Detect external clock adjustments via CLOCK_MONOTONIC")
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
.../conformance/interfaces/clock_settime/helpers.h | 76 +++++++++++++---------
1 file changed, 46 insertions(+), 30 deletions(-)
diff --git a/testcases/open_posix_testsuite/conformance/interfaces/clock_settime/helpers.h b/testcases/open_posix_testsuite/conformance/interfaces/clock_settime/helpers.h
index 37bf30926f039553e9e370751b7938ca5ea1d00a..b568ec8122d3bba8246b09a5b694f1263084a408 100644
--- a/testcases/open_posix_testsuite/conformance/interfaces/clock_settime/helpers.h
+++ b/testcases/open_posix_testsuite/conformance/interfaces/clock_settime/helpers.h
@@ -13,7 +13,11 @@
* by those tests.
*/
+#ifndef CLOCK_SETTIME_HELPERS_H
+#define CLOCK_SETTIME_HELPERS_H
+
#include <stdlib.h>
+#include <unistd.h>
static int getBeforeTime(struct timespec *tpget)
{
@@ -37,53 +41,65 @@ static int setBackTime(struct timespec tpset)
#define PTS_MONO_MAX_RETRIES 3
+static struct timespec pts_mono_start;
+
+static inline int pts_mono_available(void)
+{
#ifdef _POSIX_MONOTONIC_CLOCK
-static struct timespec _pts_mono_start;
+ if (_POSIX_MONOTONIC_CLOCK > 0)
+ return 1;
+
+ if (!_POSIX_MONOTONIC_CLOCK && sysconf(_SC_MONOTONIC_CLOCK) > 0)
+ return 1;
+#endif
+ return 0;
+}
static inline int pts_mono_time_start(void)
{
- if (clock_gettime(CLOCK_MONOTONIC, &_pts_mono_start) != 0) {
+ if (!pts_mono_available()) {
+ static int warned;
+
+ if (!warned) {
+ printf("CLOCK_MONOTONIC unavailable, test may fail due to clock adjustment\n");
+ warned = 1;
+ }
+ return 0;
+ }
+
+#ifdef _POSIX_MONOTONIC_CLOCK
+ if (clock_gettime(CLOCK_MONOTONIC, &pts_mono_start) != 0) {
perror("clock_gettime(CLOCK_MONOTONIC) failed");
return -1;
}
+#endif
return 0;
}
static inline int pts_mono_time_check(unsigned int expected_secs)
{
- struct timespec now;
- long elapsed;
-
- if (clock_gettime(CLOCK_MONOTONIC, &now) != 0) {
- perror("clock_gettime(CLOCK_MONOTONIC) failed");
- return -1;
- }
+#ifdef _POSIX_MONOTONIC_CLOCK
+ if (pts_mono_available()) {
+ struct timespec now;
+ long elapsed;
- elapsed = now.tv_sec - _pts_mono_start.tv_sec;
+ if (clock_gettime(CLOCK_MONOTONIC, &now) != 0) {
+ perror("clock_gettime(CLOCK_MONOTONIC) failed");
+ return -1;
+ }
- if (labs(elapsed - (long)expected_secs) > 1) {
- printf("Clock adjustment detected (elapsed %lds, expected ~%us)\n",
- elapsed, expected_secs);
- return 1;
- }
- return 0;
-}
-#else
-static inline int pts_mono_time_start(void)
-{
- static int warned;
+ elapsed = now.tv_sec - pts_mono_start.tv_sec;
- if (!warned) {
- printf("CLOCK_MONOTONIC unavailable, test may fail due to clock adjustment\n");
- warned = 1;
+ if (labs(elapsed - (long)expected_secs) > 1) {
+ printf("Clock adjustment detected (elapsed %lds, expected ~%us)\n",
+ elapsed, expected_secs);
+ return 1;
+ }
+ return 0;
}
- return 0;
-}
-
-static inline int pts_mono_time_check(unsigned int expected_secs)
-{
+#endif
(void)expected_secs;
return 0;
}
-#endif
+#endif /* CLOCK_SETTIME_HELPERS_H */
---
base-commit: 620d596c79493af089ba6a1c4dc79efcc76a67c7
change-id: 20260416-fix_clock_settime_helper-d47f0db0057e
Best regards,
--
Andrea Cervesato <andrea.cervesato@suse.com>
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [LTP] clock_settime: use POSIX runtime detection for CLOCK_MONOTONIC
2026-04-16 13:01 [LTP] [PATCH] clock_settime: use POSIX runtime detection for CLOCK_MONOTONIC Andrea Cervesato
@ 2026-04-16 13:35 ` linuxtestproject.agent
2026-04-17 12:53 ` [LTP] [PATCH] " Petr Vorel
1 sibling, 0 replies; 3+ messages in thread
From: linuxtestproject.agent @ 2026-04-16 13:35 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: ltp, LTP AI Reviewer
Hi Andrea,
On Thu, 16 Apr 2026, Andrea Cervesato wrote:
> clock_settime: use POSIX runtime detection for CLOCK_MONOTONIC
Reviewed-by: LTP AI Reviewer <ltp-ai@noreply.github.com>
---
Note:
Our agent completed the review of the patch. The full review can be
found at: https://github.com/linux-test-project/ltp-agent/actions/runs/24513029369
The agent can sometimes produce false positives although often its
findings are genuine. If you find issues with the review, please
comment this email or ignore the suggestions.
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [LTP] [PATCH] clock_settime: use POSIX runtime detection for CLOCK_MONOTONIC
2026-04-16 13:01 [LTP] [PATCH] clock_settime: use POSIX runtime detection for CLOCK_MONOTONIC Andrea Cervesato
2026-04-16 13:35 ` [LTP] " linuxtestproject.agent
@ 2026-04-17 12:53 ` Petr Vorel
1 sibling, 0 replies; 3+ messages in thread
From: Petr Vorel @ 2026-04-17 12:53 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: Linux Test Project
> From: Andrea Cervesato <andrea.cervesato@suse.com>
> The clock_settime helpers.h used a compile-time #ifdef on
> _POSIX_MONOTONIC_CLOCK to select between real and stub
> implementations of pts_mono_time_start()/pts_mono_time_check().
> On Linux/glibc, _POSIX_MONOTONIC_CLOCK is defined as 0, meaning
> support is optional and must be verified at runtime via
> sysconf(_SC_MONOTONIC_CLOCK). The #ifdef treated 0 the same as
> >0 (always available), which is not POSIX-correct.
> Replace the compile-time #ifdef/#else split with a runtime
> pts_mono_available() helper that performs proper POSIX detection
> via sysconf(). Also add a missing #ifndef include guard and
> #include <unistd.h> so _POSIX_MONOTONIC_CLOCK is always defined.
> Fixes: 9ecb4a004b18 ("clock_settime: Detect external clock adjustments via CLOCK_MONOTONIC")
> Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
> ---
> .../conformance/interfaces/clock_settime/helpers.h | 76 +++++++++++++---------
> 1 file changed, 46 insertions(+), 30 deletions(-)
> diff --git a/testcases/open_posix_testsuite/conformance/interfaces/clock_settime/helpers.h b/testcases/open_posix_testsuite/conformance/interfaces/clock_settime/helpers.h
> index 37bf30926f039553e9e370751b7938ca5ea1d00a..b568ec8122d3bba8246b09a5b694f1263084a408 100644
> --- a/testcases/open_posix_testsuite/conformance/interfaces/clock_settime/helpers.h
> +++ b/testcases/open_posix_testsuite/conformance/interfaces/clock_settime/helpers.h
> @@ -13,7 +13,11 @@
> * by those tests.
> */
> +#ifndef CLOCK_SETTIME_HELPERS_H
> +#define CLOCK_SETTIME_HELPERS_H
> +
> #include <stdlib.h>
> +#include <unistd.h>
> static int getBeforeTime(struct timespec *tpget)
> {
> @@ -37,53 +41,65 @@ static int setBackTime(struct timespec tpset)
> #define PTS_MONO_MAX_RETRIES 3
> +static struct timespec pts_mono_start;
> +
> +static inline int pts_mono_available(void)
> +{
> #ifdef _POSIX_MONOTONIC_CLOCK
> -static struct timespec _pts_mono_start;
> + if (_POSIX_MONOTONIC_CLOCK > 0)
> + return 1;
> +
> + if (!_POSIX_MONOTONIC_CLOCK && sysconf(_SC_MONOTONIC_CLOCK) > 0)
This and the previous condition is the same as in patch for nanosleep.
It's a simple code, but because it's still a bit specific, wouldn't it make
sense to move the function from nanosleep/helpers.h [1]
to newly created file in testcases/open_posix_testsuite/include/clock.h?
And both tests would use it?
Kind regards,
Petr
[1] https://patchwork.ozlabs.org/project/ltp/patch/20260416-fix_nanosleep_include-v2-1-b3147763acb8@suse.com/
> + return 1;
> +#endif
> + return 0;
> +}
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-04-17 12:54 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-16 13:01 [LTP] [PATCH] clock_settime: use POSIX runtime detection for CLOCK_MONOTONIC Andrea Cervesato
2026-04-16 13:35 ` [LTP] " linuxtestproject.agent
2026-04-17 12:53 ` [LTP] [PATCH] " Petr Vorel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox