From: Cyril Hrubis <chrubis@suse.cz>
To: ltp@lists.linux.it
Subject: [LTP] [PATCH] syscalls/timer_settime03: Scale interval with clock precision
Date: Wed, 25 May 2022 13:31:13 +0200 [thread overview]
Message-ID: <20220525113113.9811-1-chrubis@suse.cz> (raw)
What the test does is to:
- set initial expiration in the past
- set very small interval value
- expect the timer to overrun immediatelly many times
to trigger timer overrun counter overflow
However the test has harcoded expectation that the kernel timers have
1ns resolution. And while that is true for many modern hardware high
resolution timers are generally not always present.
The test tried to cope with that by adding kernel requirement for
CONFIG_HIGH_RES_TIMERS=y however that does not necessarily mean that the
high resolution hardware is present or that the drivers are loaded.
This only means that the support has been compiled in the kernel.
So instead of disabling the test when kernel timers have lower precision
we scale the timer interval so that the inverval length divided by the
timer precision is constant i.e. handler_delay.
Fixes #925
Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
---
.../syscalls/timer_settime/timer_settime03.c | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/testcases/kernel/syscalls/timer_settime/timer_settime03.c b/testcases/kernel/syscalls/timer_settime/timer_settime03.c
index 4597bf74e..a828f63d3 100644
--- a/testcases/kernel/syscalls/timer_settime/timer_settime03.c
+++ b/testcases/kernel/syscalls/timer_settime/timer_settime03.c
@@ -32,6 +32,8 @@
static timer_t timer;
static volatile int handler_called, overrun, saved_errno;
+static struct timespec realtime_resolution;
+
static void sighandler(int sig LTP_ATTRIBUTE_UNUSED)
{
struct itimerspec spec;
@@ -61,6 +63,11 @@ static void setup(void)
SAFE_SIGNAL(SIGUSR1, sighandler);
SAFE_TIMER_CREATE(CLOCK_REALTIME, &sev, &timer);
+
+ SAFE_CLOCK_GETRES(CLOCK_REALTIME, &realtime_resolution);
+
+ tst_res(TINFO, "CLOCK_REALTIME resolution %lins",
+ (long)realtime_resolution.tv_nsec);
}
static void run(void)
@@ -81,9 +88,9 @@ static void run(void)
/* spec.it_value = now - 1.4 * max overrun value */
/* IOW, overflow will land right in the middle of negative range */
- spec.it_value.tv_sec -= handler_delay / 100000000;
+ spec.it_value.tv_sec -= (handler_delay / 100000000) * realtime_resolution.tv_nsec;
spec.it_value.tv_nsec -= nsec;
- spec.it_interval.tv_nsec = 1;
+ spec.it_interval.tv_nsec = realtime_resolution.tv_nsec;
SAFE_TIMER_SETTIME(timer, TIMER_ABSTIME, &spec, NULL);
while (!handler_called);
@@ -115,10 +122,6 @@ static struct tst_test test = {
.test_all = run,
.setup = setup,
.cleanup = cleanup,
- .needs_kconfigs = (const char *[]) {
- "CONFIG_HIGH_RES_TIMERS=y",
- NULL
- },
.tags = (const struct tst_tag[]) {
{"linux-git", "78c9c4dfbf8c"},
{"CVE", "2018-12896"},
--
2.35.1
--
Mailing list info: https://lists.linux.it/listinfo/ltp
next reply other threads:[~2022-05-25 11:29 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-25 11:31 Cyril Hrubis [this message]
2022-05-26 10:26 ` [LTP] [PATCH] syscalls/timer_settime03: Scale interval with clock precision Li Wang
2022-05-26 13:21 ` Petr Vorel
2022-05-26 15:15 ` Cyril Hrubis
2022-05-27 1:35 ` Li Wang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220525113113.9811-1-chrubis@suse.cz \
--to=chrubis@suse.cz \
--cc=ltp@lists.linux.it \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.