Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2223960/?format=api
{ "id": 2223960, "url": "http://patchwork.ozlabs.org/api/patches/2223960/?format=api", "web_url": "http://patchwork.ozlabs.org/project/ltp/patch/20260416-fix_nanosleep_include-v2-1-b3147763acb8@suse.com/", "project": { "id": 59, "url": "http://patchwork.ozlabs.org/api/projects/59/?format=api", "name": "Linux Test Project development", "link_name": "ltp", "list_id": "ltp.lists.linux.it", "list_email": "ltp@lists.linux.it", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260416-fix_nanosleep_include-v2-1-b3147763acb8@suse.com>", "list_archive_url": null, "date": "2026-04-16T12:33:49", "name": "[v2] nanosleep: use POSIX runtime detection for CLOCK_MONOTONIC", "commit_ref": null, "pull_url": null, "state": "changes-requested", "archived": false, "hash": "bbf438c8c6ff03214b34b02554435a5bf6cd7392", "submitter": { "id": 83220, "url": "http://patchwork.ozlabs.org/api/people/83220/?format=api", "name": "Andrea Cervesato", "email": "andrea.cervesato@suse.de" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/ltp/patch/20260416-fix_nanosleep_include-v2-1-b3147763acb8@suse.com/mbox/", "series": [ { "id": 500153, "url": "http://patchwork.ozlabs.org/api/series/500153/?format=api", "web_url": "http://patchwork.ozlabs.org/project/ltp/list/?series=500153", "date": "2026-04-16T12:33:49", "name": "[v2] nanosleep: use POSIX runtime detection for CLOCK_MONOTONIC", "version": 2, "mbox": "http://patchwork.ozlabs.org/series/500153/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2223960/comments/", "check": "success", "checks": "http://patchwork.ozlabs.org/api/patches/2223960/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "ltp@lists.linux.it" ], "Delivered-To": [ "patchwork-incoming@legolas.ozlabs.org", "ltp@picard.linux.it" ], "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256\n header.s=susede2_rsa header.b=1TVIZuZv;\n\tdkim=fail reason=\"signature verification failed\" header.d=suse.de\n header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519\n header.b=0GkvmJJ2;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key)\n header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa\n header.b=1TVIZuZv;\n\tdkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=0GkvmJJ2;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.linux.it\n (client-ip=2001:1418:10:5::2; helo=picard.linux.it;\n envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it;\n receiver=patchwork.ozlabs.org)", "smtp-out1.suse.de;\n dkim=pass header.d=suse.de header.s=susede2_rsa header.b=1TVIZuZv;\n dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=0GkvmJJ2" ], "Received": [ "from picard.linux.it (picard.linux.it [IPv6:2001:1418:10:5::2])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fxHWG4RN9z1yHP\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 16 Apr 2026 22:34:02 +1000 (AEST)", "from picard.linux.it (localhost [IPv6:::1])\n\tby picard.linux.it (Postfix) with ESMTP id B9B3C3E264F\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 16 Apr 2026 14:33:59 +0200 (CEST)", "from in-7.smtp.seeweb.it (in-7.smtp.seeweb.it\n [IPv6:2001:4b78:1:20::7])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature ECDSA (secp384r1))\n (No client certificate requested)\n by picard.linux.it (Postfix) with ESMTPS id B7F3A3C1E06\n for <ltp@lists.linux.it>; Thu, 16 Apr 2026 14:33:56 +0200 (CEST)", "from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by in-7.smtp.seeweb.it (Postfix) with ESMTPS id E57AC200ACB\n for <ltp@lists.linux.it>; Thu, 16 Apr 2026 14:33:55 +0200 (CEST)", "from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org\n [IPv6:2a07:de40:b281:104:10:150:64:97])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n (No client certificate requested)\n by smtp-out1.suse.de (Postfix) with ESMTPS id 33D2C6A7EC;\n Thu, 16 Apr 2026 12:33:55 +0000 (UTC)", "from imap1.dmz-prg2.suse.org (localhost [127.0.0.1])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n (No client certificate requested)\n by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 0BAC7593A3;\n Thu, 16 Apr 2026 12:33:55 +0000 (UTC)", "from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167])\n by imap1.dmz-prg2.suse.org with ESMTPSA id unTBADPX4GmaIgAAD6G6ig\n (envelope-from <andrea.cervesato@suse.de>); Thu, 16 Apr 2026 12:33:55 +0000" ], "DKIM-Signature": [ "v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_rsa;\n t=1776342835;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding;\n bh=+lc1Q1IiQa7A+4n/lLcvmuYAcs6fJtU/CkuDc1QgUGE=;\n b=1TVIZuZv0OhN6T20ShPlpRw3hJ+OTmtoE21CyX7MSR/rSc9OgY1SbH6Mzc7a+T8QXuwG1M\n 1t9fqJEq6Gk8lRxpGfxn1ajdoVRKpxn5wPMU+y5+adVrRFjk6Qr/Ok0mbpOPuPRFloGoXK\n +/yfm8aDL/FA1jLn/Lz5t8hdxfJ2Afs=", "v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_ed25519; t=1776342835;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding;\n bh=+lc1Q1IiQa7A+4n/lLcvmuYAcs6fJtU/CkuDc1QgUGE=;\n b=0GkvmJJ20Liqot/5yOYAwJBUOS4i19eNXxklks8YVxt45vVDm4kgQFqpKBtpreoZwZdmlw\n YJrJXOpup+5Na6BA==", "v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_rsa;\n t=1776342835;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding;\n bh=+lc1Q1IiQa7A+4n/lLcvmuYAcs6fJtU/CkuDc1QgUGE=;\n b=1TVIZuZv0OhN6T20ShPlpRw3hJ+OTmtoE21CyX7MSR/rSc9OgY1SbH6Mzc7a+T8QXuwG1M\n 1t9fqJEq6Gk8lRxpGfxn1ajdoVRKpxn5wPMU+y5+adVrRFjk6Qr/Ok0mbpOPuPRFloGoXK\n +/yfm8aDL/FA1jLn/Lz5t8hdxfJ2Afs=", "v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_ed25519; t=1776342835;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding;\n bh=+lc1Q1IiQa7A+4n/lLcvmuYAcs6fJtU/CkuDc1QgUGE=;\n b=0GkvmJJ20Liqot/5yOYAwJBUOS4i19eNXxklks8YVxt45vVDm4kgQFqpKBtpreoZwZdmlw\n YJrJXOpup+5Na6BA==" ], "From": "Andrea Cervesato <andrea.cervesato@suse.de>", "Date": "Thu, 16 Apr 2026 14:33:49 +0200", "MIME-Version": "1.0", "Message-Id": "<20260416-fix_nanosleep_include-v2-1-b3147763acb8@suse.com>", "X-B4-Tracking": "v=1; b=H4sIACzX4GkC/4WNUQqDMBBEryL73ZSsGJF+9R5FxCabumATyVZpk\n dy9qRfo5xtm3uwglJgELtUOiTYWjqFAfarATmN4kGJXGGpdt7rBVnl+D2EMUWaiZeBg59WRImd\n t5zV6TRrKdklUiof31heeWF4xfY6bDX/pP+OGCpU3XXM3xrTY4FVWobONT+hzzl9v5FiduQAAA\n A==", "X-Change-ID": "20260416-fix_nanosleep_include-edcc8f01f0e0", "To": "Linux Test Project <ltp@lists.linux.it>", "X-Mailer": "b4 0.14.2", "X-Developer-Signature": "v=1; a=ed25519-sha256; t=1776342834; l=14089;\n i=andrea.cervesato@suse.com; s=20251210; h=from:subject:message-id;\n bh=nc2uUj9Eu0ycWT4qdaergJHuOcrAT7DlCaZI4XzcDrg=;\n b=KRloIGpF1DZ99O/hPpzcXFoM66fOUd6HbeW37UcMt//JOAD5ydAih3vfA5WoEM4Vs/3gDz3uV\n e44ZeZnMKLyBnBYLD35OrrepkMoEK4KrOcFYnbeQPN9vfPVj4dzWOSd", "X-Developer-Key": "i=andrea.cervesato@suse.com; a=ed25519;\n pk=zKY+6GCauOiuHNZ//d8PQ/UL4jFCTKbXrzXAOQSLevI=", "X-Rspamd-Action": "no action", "X-Rspamd-Server": "rspamd2.dmz-prg2.suse.org", "X-Spamd-Result": "default: False [-4.51 / 50.00]; BAYES_HAM(-3.00)[100.00%];\n NEURAL_HAM_LONG(-1.00)[-1.000];\n R_DKIM_ALLOW(-0.20)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519];\n NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain];\n MX_GOOD(-0.01)[]; FUZZY_RATELIMITED(0.00)[rspamd.com];\n RCVD_TLS_ALL(0.00)[]; ARC_NA(0.00)[];\n RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[2a07:de40:b281:104:10:150:64:97:from];\n RCVD_VIA_SMTP_AUTH(0.00)[];\n SPAMHAUS_XBL(0.00)[2a07:de40:b281:104:10:150:64:97:from];\n MIME_TRACE(0.00)[0:+];\n DNSWL_BLOCKED(0.00)[2a07:de40:b281:106:10:150:64:167:received,2a07:de40:b281:104:10:150:64:97:from];\n RCPT_COUNT_TWO(0.00)[2];\n DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519];\n FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[];\n RECEIVED_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[2a07:de40:b281:106:10:150:64:167:received];\n RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[];\n DBL_BLOCKED_OPENRESOLVER(0.00)[suse.com:mid,suse.com:email];\n TO_DN_ALL(0.00)[]; DKIM_TRACE(0.00)[suse.de:+]", "X-Rspamd-Queue-Id": "33D2C6A7EC", "X-Spam-Score": "-4.51", "X-Spam-Level": "", "X-Spam-Status": "No, score=0.1 required=7.0 tests=DKIM_SIGNED,DKIM_VALID,\n DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS shortcircuit=no\n autolearn=disabled version=4.0.1", "X-Spam-Checker-Version": "SpamAssassin 4.0.1 (2024-03-25) on in-7.smtp.seeweb.it", "X-Virus-Scanned": "clamav-milter 1.0.9 at in-7.smtp.seeweb.it", "X-Virus-Status": "Clean", "Subject": "[LTP] [PATCH v2] nanosleep: use POSIX runtime detection for\n CLOCK_MONOTONIC", "X-BeenThere": "ltp@lists.linux.it", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "Linux Test Project <ltp.lists.linux.it>", "List-Unsubscribe": "<https://lists.linux.it/options/ltp>,\n <mailto:ltp-request@lists.linux.it?subject=unsubscribe>", "List-Archive": "<http://lists.linux.it/pipermail/ltp/>", "List-Post": "<mailto:ltp@lists.linux.it>", "List-Help": "<mailto:ltp-request@lists.linux.it?subject=help>", "List-Subscribe": "<https://lists.linux.it/listinfo/ltp>,\n <mailto:ltp-request@lists.linux.it?subject=subscribe>", "Content-Type": "text/plain; charset=\"us-ascii\"", "Content-Transfer-Encoding": "7bit", "Errors-To": "ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it", "Sender": "\"ltp\" <ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it>" }, "content": "From: Andrea Cervesato <andrea.cervesato@suse.com>\n\nAll nanosleep POSIX conformance tests used a compile-time #ifdef on\n_POSIX_MONOTONIC_CLOCK to select the clock for measuring elapsed\nsleep duration. This was incorrect for two reasons:\n\n1. Three test files (1-1.c, 2-1.c, 10000-1.c) did not include\n <unistd.h>, so the macro was never defined and the tests silently\n fell back to CLOCK_REALTIME.\n\n2. On Linux/glibc, _POSIX_MONOTONIC_CLOCK is defined as 0, meaning\n support is optional and must be verified at runtime via\n sysconf(_SC_MONOTONIC_CLOCK). The #ifdef treated 0 the same as\n >0 (always available), which is not POSIX-correct.\n\nUsing CLOCK_REALTIME caused sporadic test failures when NTP or VM\ntime sync adjusted the wall clock during sleep, producing results\nlike \"slept 32s >> 10s\".\n\nExtract the clock selection logic into a shared helpers.h with a\nget_supported_clock() function that performs proper POSIX runtime\ndetection via sysconf(), and use it across all affected tests.\n\nFixes: f992f6e25fce (\"nanosleep: Use CLOCK_MONOTONIC for elapsed time measurement\")\nSigned-off-by: Andrea Cervesato <andrea.cervesato@suse.com>\n---\nSome nanosleep tests are not recognizing CLOCK_MONOTONIC at runtime\neven if it's available:\n\nCLOCK_MONOTONIC unavailable, test may fail due to external clock adjustments\nsleep 0 sec 30000000 nsec\nPASS - slept 0s30078623ns ~= 0s30000000ns\nsleep 1 sec 0 nsec\nPASS - slept 1s97618ns ~= 1s0ns\nsleep 1 sec 30000000 nsec\nPASS - slept 1s30109248ns ~= 1s30000000ns\nsleep 2 sec 0 nsec\nPASS - slept 2s147180ns ~= 2s0ns\nsleep 10 sec 5000 nsec\nFAIL - slept 32s630120452ns >> 10s5000ns\nsleep 13 sec 5 nsec\nPASS - slept 13s146848ns ~= 13s5ns\nsleep -1 sec -1 nsec\nsleep 0 sec -1 nsec\nsleep 1 sec 1000000000 nsec\nsleep 2 sec 1000000000 nsec\nsleep -2147483647 sec -2147483647 nsec\nsleep 1 sec 2147483647 nsec\nsleep 0 sec 1075002478 nsec\nAt least one test FAILED\n---\nChanges in v2:\n- add <unistd.h> to imports\n- Link to v1: https://lore.kernel.org/r/20260416-fix_nanosleep_include-v1-1-f584b5556141@suse.com\n---\n .../conformance/interfaces/nanosleep/1-1.c | 16 ++++---------\n .../conformance/interfaces/nanosleep/1-2.c | 16 ++++---------\n .../conformance/interfaces/nanosleep/1-3.c | 16 ++++---------\n .../conformance/interfaces/nanosleep/10000-1.c | 16 ++++---------\n .../conformance/interfaces/nanosleep/2-1.c | 16 ++++---------\n .../conformance/interfaces/nanosleep/3-2.c | 16 ++++---------\n .../conformance/interfaces/nanosleep/7-2.c | 16 ++++---------\n .../conformance/interfaces/nanosleep/helpers.h | 28 ++++++++++++++++++++++\n 8 files changed, 56 insertions(+), 84 deletions(-)\n\n\n---\nbase-commit: 620d596c79493af089ba6a1c4dc79efcc76a67c7\nchange-id: 20260416-fix_nanosleep_include-edcc8f01f0e0\n\nBest regards,", "diff": "diff --git a/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/1-1.c b/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/1-1.c\nindex 75b34346f13d9b62e2333dbc78023a812fc9c908..803569b138a1f17c0dede0c03406d3c7e52c4215 100644\n--- a/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/1-1.c\n+++ b/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/1-1.c\n@@ -11,24 +11,16 @@\n #include <stdio.h>\n #include <time.h>\n #include \"posixtest.h\"\n-\n-#ifdef _POSIX_MONOTONIC_CLOCK\n-#define TEST_CLOCK CLOCK_MONOTONIC\n-#else\n-#define TEST_CLOCK CLOCK_REALTIME\n-#endif\n+#include \"helpers.h\"\n \n int main(void)\n {\n \tstruct timespec tssleepfor, tsstorage, tsbefore, tsafter;\n \tint sleepnsec = 3;\n \tint slepts = 0, sleptns = 0;\n+\tclockid_t test_clock = get_supported_clock();\n \n-#ifndef _POSIX_MONOTONIC_CLOCK\n-\tprintf(\"CLOCK_MONOTONIC unavailable, test may fail due to external clock adjustments\\n\");\n-#endif\n-\n-\tif (clock_gettime(TEST_CLOCK, &tsbefore) == -1) {\n+\tif (clock_gettime(test_clock, &tsbefore) == -1) {\n \t\tperror(\"Error in clock_gettime()\\n\");\n \t\treturn PTS_UNRESOLVED;\n \t}\n@@ -40,7 +32,7 @@ int main(void)\n \t\treturn PTS_UNRESOLVED;\n \t}\n \n-\tif (clock_gettime(TEST_CLOCK, &tsafter) == -1) {\n+\tif (clock_gettime(test_clock, &tsafter) == -1) {\n \t\tperror(\"Error in clock_gettime()\\n\");\n \t\treturn PTS_UNRESOLVED;\n \t}\ndiff --git a/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/1-2.c b/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/1-2.c\nindex 4a38bd507bba47792b942feb53954b95e92dc222..116510ea26ab6b7792c9aba5aa18eb7b926e59df 100644\n--- a/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/1-2.c\n+++ b/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/1-2.c\n@@ -14,24 +14,16 @@\n #include <unistd.h>\n #include <sys/wait.h>\n #include \"posixtest.h\"\n-\n-#ifdef _POSIX_MONOTONIC_CLOCK\n-#define TEST_CLOCK CLOCK_MONOTONIC\n-#else\n-#define TEST_CLOCK CLOCK_REALTIME\n-#endif\n+#include \"helpers.h\"\n \n int main(void)\n {\n \tstruct timespec tssleepfor, tsstorage, tsbefore, tsafter;\n \tint sleepsec = 30;\n \tint pid;\n+\tclockid_t test_clock = get_supported_clock();\n \n-#ifndef _POSIX_MONOTONIC_CLOCK\n-\tprintf(\"CLOCK_MONOTONIC unavailable, test may fail due to external clock adjustments\\n\");\n-#endif\n-\n-\tif (clock_gettime(TEST_CLOCK, &tsbefore) == -1) {\n+\tif (clock_gettime(test_clock, &tsbefore) == -1) {\n \t\tperror(\"Error in clock_gettime()\\n\");\n \t\treturn PTS_UNRESOLVED;\n \t}\n@@ -56,7 +48,7 @@ int main(void)\n \t\t\tperror(\"Error waiting for child to exit\\n\");\n \t\t\treturn PTS_UNRESOLVED;\n \t\t}\n-\t\tif (clock_gettime(TEST_CLOCK, &tsafter) == -1) {\n+\t\tif (clock_gettime(test_clock, &tsafter) == -1) {\n \t\t\tperror(\"Error in clock_gettime()\\n\");\n \t\t\treturn PTS_UNRESOLVED;\n \t\t}\ndiff --git a/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/1-3.c b/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/1-3.c\nindex 7d5600788d6bc4682f228ccc7c669576827c397a..6baed5c89aa5ccb149f0a47da05b17c4880c06d4 100644\n--- a/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/1-3.c\n+++ b/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/1-3.c\n@@ -15,12 +15,7 @@\n #include <unistd.h>\n #include <sys/wait.h>\n #include \"posixtest.h\"\n-\n-#ifdef _POSIX_MONOTONIC_CLOCK\n-#define TEST_CLOCK CLOCK_MONOTONIC\n-#else\n-#define TEST_CLOCK CLOCK_REALTIME\n-#endif\n+#include \"helpers.h\"\n \n static void handler(int signo PTS_ATTRIBUTE_UNUSED)\n {\n@@ -33,12 +28,9 @@ int main(void)\n \tint sleepsec = 30;\n \tint pid;\n \tstruct sigaction act;\n+\tclockid_t test_clock = get_supported_clock();\n \n-#ifndef _POSIX_MONOTONIC_CLOCK\n-\tprintf(\"CLOCK_MONOTONIC unavailable, test may fail due to external clock adjustments\\n\");\n-#endif\n-\n-\tif (clock_gettime(TEST_CLOCK, &tsbefore) == -1) {\n+\tif (clock_gettime(test_clock, &tsbefore) == -1) {\n \t\tperror(\"Error in clock_gettime()\\n\");\n \t\treturn PTS_UNRESOLVED;\n \t}\n@@ -74,7 +66,7 @@ int main(void)\n \t\t\tperror(\"Error waiting for child to exit\\n\");\n \t\t\treturn PTS_UNRESOLVED;\n \t\t}\n-\t\tif (clock_gettime(TEST_CLOCK, &tsafter) == -1) {\n+\t\tif (clock_gettime(test_clock, &tsafter) == -1) {\n \t\t\tperror(\"Error in clock_gettime()\\n\");\n \t\t\treturn PTS_UNRESOLVED;\n \t\t}\ndiff --git a/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/10000-1.c b/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/10000-1.c\nindex ebcf366acb52fd149f19951a6e4e0764bd503807..c9d1cc303c629d7bbcf0fb4451103ef1729e4609 100644\n--- a/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/10000-1.c\n+++ b/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/10000-1.c\n@@ -18,12 +18,7 @@\n #include <time.h>\n #include <errno.h>\n #include \"posixtest.h\"\n-\n-#ifdef _POSIX_MONOTONIC_CLOCK\n-#define TEST_CLOCK CLOCK_MONOTONIC\n-#else\n-#define TEST_CLOCK CLOCK_REALTIME\n-#endif\n+#include \"helpers.h\"\n \n #define NUMVALID 6\n #define NUMINVALID 7\n@@ -56,23 +51,20 @@ int main(void)\n \tint i;\n \tint failure = 0;\n \tint slepts = 0, sleptns = 0;\n-\n-#ifndef _POSIX_MONOTONIC_CLOCK\n-\tprintf(\"CLOCK_MONOTONIC unavailable, test may fail due to external clock adjustments\\n\");\n-#endif\n+\tclockid_t test_clock = get_supported_clock();\n \n \tfor (i = 0; i < NUMVALID; i++) {\n \t\ttssleepfor.tv_sec = sleepvalid[i][0];\n \t\ttssleepfor.tv_nsec = sleepvalid[i][1];\n \t\tprintf(\"sleep %d sec %d nsec\\n\",\n \t\t (int)tssleepfor.tv_sec, (int)tssleepfor.tv_nsec);\n-\t\tif (clock_gettime(TEST_CLOCK, &tsbefore) == -1) {\n+\t\tif (clock_gettime(test_clock, &tsbefore) == -1) {\n \t\t\tperror(\"Error in clock_gettime()\\n\");\n \t\t\treturn PTS_UNRESOLVED;\n \t\t}\n \n \t\tif (nanosleep(&tssleepfor, &tsstorage) == 0) {\n-\t\t\tif (clock_gettime(TEST_CLOCK, &tsafter) == -1) {\n+\t\t\tif (clock_gettime(test_clock, &tsafter) == -1) {\n \t\t\t\tperror(\"Error in clock_gettime()\\n\");\n \t\t\t\treturn PTS_UNRESOLVED;\n \t\t\t}\ndiff --git a/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/2-1.c b/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/2-1.c\nindex 8586e0ecec023029b60bce8ad5e1e72206daee34..02b122a786ef4e735d4e74f1a96e5263cd7333b1 100644\n--- a/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/2-1.c\n+++ b/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/2-1.c\n@@ -12,12 +12,7 @@\n #include <stdio.h>\n #include <time.h>\n #include \"posixtest.h\"\n-\n-#ifdef _POSIX_MONOTONIC_CLOCK\n-#define TEST_CLOCK CLOCK_MONOTONIC\n-#else\n-#define TEST_CLOCK CLOCK_REALTIME\n-#endif\n+#include \"helpers.h\"\n \n #define NUMINTERVALS 13\n int main(void)\n@@ -30,12 +25,9 @@ int main(void)\n \tint i;\n \tint failure = 0;\n \tint slepts, sleptns;\n+\tclockid_t test_clock = get_supported_clock();\n \n-#ifndef _POSIX_MONOTONIC_CLOCK\n-\tprintf(\"CLOCK_MONOTONIC unavailable, test may fail due to external clock adjustments\\n\");\n-#endif\n-\n-\tif (clock_gettime(TEST_CLOCK, &tsbefore) == -1) {\n+\tif (clock_gettime(test_clock, &tsbefore) == -1) {\n \t\tperror(\"Error in clock_gettime()\\n\");\n \t\treturn PTS_UNRESOLVED;\n \t}\n@@ -48,7 +40,7 @@ int main(void)\n \t\t\treturn PTS_UNRESOLVED;\n \t\t}\n \n-\t\tif (clock_gettime(TEST_CLOCK, &tsafter) == -1) {\n+\t\tif (clock_gettime(test_clock, &tsafter) == -1) {\n \t\t\tperror(\"Error in clock_gettime()\\n\");\n \t\t\treturn PTS_UNRESOLVED;\n \t\t}\ndiff --git a/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/3-2.c b/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/3-2.c\nindex 1329a7e988055ed3815e4e4037f331f576264d1a..2110e0ddad36877150ba4aacaaf28a079207539a 100644\n--- a/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/3-2.c\n+++ b/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/3-2.c\n@@ -15,12 +15,7 @@\n #include <sys/wait.h>\n #include <stdlib.h>\n #include \"posixtest.h\"\n-\n-#ifdef _POSIX_MONOTONIC_CLOCK\n-#define TEST_CLOCK CLOCK_MONOTONIC\n-#else\n-#define TEST_CLOCK CLOCK_REALTIME\n-#endif\n+#include \"helpers.h\"\n \n #define SLEEPSEC 5\n \n@@ -31,12 +26,9 @@ int main(void)\n {\n \tint pid, slepts;\n \tstruct timespec tsbefore, tsafter;\n+\tclockid_t test_clock = get_supported_clock();\n \n-#ifndef _POSIX_MONOTONIC_CLOCK\n-\tprintf(\"CLOCK_MONOTONIC unavailable, test may fail due to external clock adjustments\\n\");\n-#endif\n-\n-\tif (clock_gettime(TEST_CLOCK, &tsbefore) != 0) {\n+\tif (clock_gettime(test_clock, &tsbefore) != 0) {\n \t\tperror(\"clock_gettime() did not return success\\n\");\n \t\treturn PTS_UNRESOLVED;\n \t}\n@@ -84,7 +76,7 @@ int main(void)\n \t\t\treturn PTS_FAIL;\n \t\t}\n \n-\t\tif (clock_gettime(TEST_CLOCK, &tsafter) == -1) {\n+\t\tif (clock_gettime(test_clock, &tsafter) == -1) {\n \t\t\tperror(\"Error in clock_gettime()\\n\");\n \t\t\treturn PTS_UNRESOLVED;\n \t\t}\ndiff --git a/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/7-2.c b/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/7-2.c\nindex 70eeca9ff8eb10ac052b81f102853747a5066685..16e44e142473188cdfab70e4d1d334e0bed71d1c 100644\n--- a/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/7-2.c\n+++ b/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/7-2.c\n@@ -16,12 +16,7 @@\n #include <sys/wait.h>\n #include <stdlib.h>\n #include \"posixtest.h\"\n-\n-#ifdef _POSIX_MONOTONIC_CLOCK\n-#define TEST_CLOCK CLOCK_MONOTONIC\n-#else\n-#define TEST_CLOCK CLOCK_REALTIME\n-#endif\n+#include \"helpers.h\"\n \n #define CHILDSUCCESS 1\n #define CHILDFAILURE 0\n@@ -39,12 +34,9 @@ int main(void)\n \tint sleepsec = 30;\n \tint pid;\n \tstruct sigaction act;\n+\tclockid_t test_clock = get_supported_clock();\n \n-#ifndef _POSIX_MONOTONIC_CLOCK\n-\tprintf(\"CLOCK_MONOTONIC unavailable, test may fail due to external clock adjustments\\n\");\n-#endif\n-\n-\tif (clock_gettime(TEST_CLOCK, &tsbefore) == -1) {\n+\tif (clock_gettime(test_clock, &tsbefore) == -1) {\n \t\tperror(\"Error in clock_gettime()\\n\");\n \t\treturn PTS_UNRESOLVED;\n \t}\n@@ -70,7 +62,7 @@ int main(void)\n \t\t\treturn CHILDFAILURE;\n \t\t}\n \n-\t\tif (clock_gettime(TEST_CLOCK, &tsafter) == -1) {\n+\t\tif (clock_gettime(test_clock, &tsafter) == -1) {\n \t\t\tperror(\"Error in clock_gettime()\\n\");\n \t\t\treturn CHILDFAILURE;\n \t\t}\ndiff --git a/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/helpers.h b/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/helpers.h\nnew file mode 100644\nindex 0000000000000000000000000000000000000000..a70e4c290c76c61adc55e9b006b65597dde4677d\n--- /dev/null\n+++ b/testcases/open_posix_testsuite/conformance/interfaces/nanosleep/helpers.h\n@@ -0,0 +1,28 @@\n+/*\n+ * Copyright (c) 2026, Linux Test Project\n+ * SPDX-License-Identifier: GPL-2.0-or-later\n+ */\n+\n+#ifndef NANOSLEEP_HELPERS_H\n+#define NANOSLEEP_HELPERS_H\n+\n+#include <stdio.h>\n+#include <unistd.h>\n+#include <time.h>\n+\n+static inline clockid_t get_supported_clock(void)\n+{\n+#ifdef _POSIX_MONOTONIC_CLOCK\n+\tif (_POSIX_MONOTONIC_CLOCK > 0)\n+\t\treturn CLOCK_MONOTONIC;\n+\n+\tif (!_POSIX_MONOTONIC_CLOCK && sysconf(_SC_MONOTONIC_CLOCK) > 0)\n+\t\treturn CLOCK_MONOTONIC;\n+#endif\n+\n+\tprintf(\"CLOCK_MONOTONIC unavailable, test may fail due to \"\n+\t \"external clock adjustments\\n\");\n+\treturn CLOCK_REALTIME;\n+}\n+\n+#endif /* NANOSLEEP_HELPERS_H */\n", "prefixes": [ "v2" ] }