[LTP] [PATCH v2 1/2] epoll_pwait: Refactor timeout to struct timespec
Martin Doucha
mdoucha@suse.cz
Tue Jun 3 17:22:41 CEST 2025
Support higher precision timeout in do_epoll_pwait() by passing struct
timespec instead of int value in milliseconds. Only one test actually
uses the parameter.
Signed-off-by: Martin Doucha <mdoucha@suse.cz>
---
Changes since v1: None
.../syscalls/epoll_pwait/epoll_pwait01.c | 4 ++--
.../syscalls/epoll_pwait/epoll_pwait02.c | 2 +-
.../syscalls/epoll_pwait/epoll_pwait03.c | 9 +++++---
.../syscalls/epoll_pwait/epoll_pwait04.c | 2 +-
.../syscalls/epoll_pwait/epoll_pwait_var.h | 22 +++++++++----------
5 files changed, 21 insertions(+), 18 deletions(-)
diff --git a/testcases/kernel/syscalls/epoll_pwait/epoll_pwait01.c b/testcases/kernel/syscalls/epoll_pwait/epoll_pwait01.c
index 954e77314..012ba1562 100644
--- a/testcases/kernel/syscalls/epoll_pwait/epoll_pwait01.c
+++ b/testcases/kernel/syscalls/epoll_pwait/epoll_pwait01.c
@@ -30,7 +30,7 @@ static void sighandler(int sig LTP_ATTRIBUTE_UNUSED) {}
static void verify_sigmask(void)
{
- TEST(do_epoll_pwait(efd, &e, 1, -1, &signalset));
+ TEST(do_epoll_pwait(efd, &e, 1, NULL, &signalset));
if (TST_RET != 1) {
tst_res(TFAIL, "do_epoll_pwait() returned %li, expected 1",
@@ -43,7 +43,7 @@ static void verify_sigmask(void)
static void verify_nonsigmask(void)
{
- TST_EXP_FAIL(do_epoll_pwait(efd, &e, 1, -1, NULL), EINTR,
+ TST_EXP_FAIL(do_epoll_pwait(efd, &e, 1, NULL, NULL), EINTR,
"do_epoll_pwait() without sigmask");
}
diff --git a/testcases/kernel/syscalls/epoll_pwait/epoll_pwait02.c b/testcases/kernel/syscalls/epoll_pwait/epoll_pwait02.c
index 069620c5d..a27c7db9e 100644
--- a/testcases/kernel/syscalls/epoll_pwait/epoll_pwait02.c
+++ b/testcases/kernel/syscalls/epoll_pwait/epoll_pwait02.c
@@ -19,7 +19,7 @@ static struct epoll_event e;
static void run(void)
{
- TEST(do_epoll_pwait(efd, &e, 1, -1, NULL));
+ TEST(do_epoll_pwait(efd, &e, 1, NULL, NULL));
if (TST_RET == 1) {
tst_res(TPASS, "do_epoll_pwait() succeeded");
diff --git a/testcases/kernel/syscalls/epoll_pwait/epoll_pwait03.c b/testcases/kernel/syscalls/epoll_pwait/epoll_pwait03.c
index 8217f9f80..572d347f1 100644
--- a/testcases/kernel/syscalls/epoll_pwait/epoll_pwait03.c
+++ b/testcases/kernel/syscalls/epoll_pwait/epoll_pwait03.c
@@ -13,17 +13,20 @@
#include "tst_timer_test.h"
#include "epoll_pwait_var.h"
-#define USEC_PER_MSEC (1000L)
+#define USEC_PER_NSEC (1000L)
+#define USEC_PER_SEC (1000000L)
static int efd, sfd[2];
static struct epoll_event e;
int sample_fn(int clk_id, long long usec)
{
- unsigned int ms = usec / USEC_PER_MSEC;
+ struct timespec ts;
+ ts.tv_sec = usec / USEC_PER_SEC;
+ ts.tv_nsec = (usec % USEC_PER_SEC) * USEC_PER_NSEC;
tst_timer_start(clk_id);
- TEST(do_epoll_pwait(efd, &e, 1, ms, NULL));
+ TEST(do_epoll_pwait(efd, &e, 1, &ts, NULL));
tst_timer_stop();
tst_timer_sample();
diff --git a/testcases/kernel/syscalls/epoll_pwait/epoll_pwait04.c b/testcases/kernel/syscalls/epoll_pwait/epoll_pwait04.c
index cc1d04e6b..b399225b9 100644
--- a/testcases/kernel/syscalls/epoll_pwait/epoll_pwait04.c
+++ b/testcases/kernel/syscalls/epoll_pwait/epoll_pwait04.c
@@ -20,7 +20,7 @@ static void *bad_addr;
static void run(void)
{
- TST_EXP_FAIL(do_epoll_pwait(efd, &e, 1, -1, bad_addr),
+ TST_EXP_FAIL(do_epoll_pwait(efd, &e, 1, NULL, bad_addr),
EFAULT, "with an invalid sigmask pointer");
}
diff --git a/testcases/kernel/syscalls/epoll_pwait/epoll_pwait_var.h b/testcases/kernel/syscalls/epoll_pwait/epoll_pwait_var.h
index 58a3f15a2..454e80a87 100644
--- a/testcases/kernel/syscalls/epoll_pwait/epoll_pwait_var.h
+++ b/testcases/kernel/syscalls/epoll_pwait/epoll_pwait_var.h
@@ -14,22 +14,22 @@
#define NSEC_PER_MSEC (1000000L)
static int do_epoll_pwait(int epfd, struct epoll_event *events, int
- maxevents, int timeout, const sigset_t *sigmask)
+ maxevents, struct timespec *timeout, const sigset_t *sigmask)
{
- if (tst_variant == 0)
- return epoll_pwait(epfd, events, maxevents, timeout, sigmask);
+ if (tst_variant == 0) {
+ int timeout_ms = -1;
- struct timespec ts;
+ if (timeout) {
+ timeout_ms = timeout->tv_sec * MSEC_PER_SEC;
+ timeout_ms += (timeout->tv_nsec + NSEC_PER_MSEC - 1) /
+ NSEC_PER_MSEC;
+ }
- if (timeout < 0) {
- return epoll_pwait2(epfd, events, maxevents, NULL, sigmask);
- } else {
- ts.tv_sec = timeout / MSEC_PER_SEC;
- ts.tv_nsec = NSEC_PER_MSEC * (timeout % MSEC_PER_SEC);
+ return epoll_pwait(epfd, events, maxevents, timeout_ms,
+ sigmask);
}
- return epoll_pwait2(epfd, events, maxevents, &ts, sigmask);
-
+ return epoll_pwait2(epfd, events, maxevents, timeout, sigmask);
}
static void epoll_pwait_init(void)
--
2.49.0
More information about the ltp
mailing list