All of lore.kernel.org
 help / color / mirror / Atom feed
* [LTP] [PATCH V4 00/17] Syscalls: Add support for time64 variants
@ 2020-05-22 10:51 Viresh Kumar
  2020-05-22 10:51 ` [LTP] [PATCH V4 01/17] syscalls/timer_gettime: Add support for time64 tests Viresh Kumar
                   ` (16 more replies)
  0 siblings, 17 replies; 33+ messages in thread
From: Viresh Kumar @ 2020-05-22 10:51 UTC (permalink / raw)
  To: ltp

Hi,

This updates the pending syscall tests that lacked the time64 updates.

V4:
- Pass timer_t type to timer_gettime/settime syscalls instead of
  kernel_timer_t.
- Some part of timer_settime() patch was merged in timerfd_gettime()
  earlier by mistake, fixed that.

V3:
- Fix issues related to passing incorrect timespec type to syscalls.
- Take care of futex and semtimedop tests where the architecture
  provides the syscall number, but doesn't implement it.
- Other improvements and cleanups.

Viresh Kumar (17):
  syscalls/timer_gettime: Add support for time64 tests
  syscalls/timer_settime: Add support for time64 tests
  syscalls/timerfd: Add support for time64 tests
  syscalls/sched_rr_get_interval: Add support for time64 tests
  syscalls/futex: Merge futex_wait_bitset tests
  syscalls/futex: Add support for time64 tests
  syscalls/io_pgetevents: Add support for time64 tests
  syscalls/sigwaitinfo: Migrate to new test framework
  syscalls/rt_sigtimedwait: Add support for time64 tests
  syscalls/mq_timed{send|receive}: Add support for time64 tests
  syscalls/recvmmsg: Add support for time64 tests
  syscalls/ppoll: Add support for time64 tests
  syscalls/select6: Add support for time64 tests
  syscalls/semop: Migrate to new test framework
  syscalls/semtimedop: Add support for semtimedop and its time64 version
  syscalls/utimensat: Migrate to new test framework
  syscalls/utimensat: Add support for time64 tests

 include/lapi/io_pgetevents.h                  |  15 +-
 include/tst_timer.h                           | 196 +++++++
 runtest/syscalls                              |   3 +-
 testcases/kernel/syscalls/futex/.gitignore    |   1 -
 testcases/kernel/syscalls/futex/Makefile      |   1 -
 .../syscalls/futex/futex_cmp_requeue01.c      |  34 +-
 .../syscalls/futex/futex_cmp_requeue02.c      |  24 +-
 testcases/kernel/syscalls/futex/futex_utils.h |  52 +-
 .../kernel/syscalls/futex/futex_wait01.c      |  79 +--
 .../kernel/syscalls/futex/futex_wait02.c      | 102 ++--
 .../kernel/syscalls/futex/futex_wait03.c      |  87 ++-
 .../kernel/syscalls/futex/futex_wait04.c      |  81 +--
 .../kernel/syscalls/futex/futex_wait05.c      |   2 +-
 .../kernel/syscalls/futex/futex_wait_bitset.h |  75 ---
 .../syscalls/futex/futex_wait_bitset01.c      | 101 +++-
 .../syscalls/futex/futex_wait_bitset02.c      |  18 -
 .../kernel/syscalls/futex/futex_wake01.c      |  67 ++-
 .../kernel/syscalls/futex/futex_wake02.c      |  95 ++--
 .../kernel/syscalls/futex/futex_wake03.c      | 109 ++--
 .../kernel/syscalls/futex/futex_wake04.c      | 146 +++--
 testcases/kernel/syscalls/futex/futextest.h   | 122 +++--
 .../syscalls/io_pgetevents/io_pgetevents01.c  |  33 +-
 .../syscalls/io_pgetevents/io_pgetevents02.c  |  51 +-
 testcases/kernel/syscalls/ipc/semop/Makefile  |   2 +-
 testcases/kernel/syscalls/ipc/semop/semop.h   |  55 ++
 testcases/kernel/syscalls/ipc/semop/semop01.c | 148 +++--
 testcases/kernel/syscalls/ipc/semop/semop02.c | 156 +++---
 testcases/kernel/syscalls/ipc/semop/semop03.c | 162 +++---
 testcases/kernel/syscalls/ipc/semop/semop04.c | 177 +++---
 testcases/kernel/syscalls/ipc/semop/semop05.c | 313 +++++------
 .../mq_timedreceive/mq_timedreceive01.c       |  92 +++-
 .../syscalls/mq_timedsend/mq_timedsend01.c    |  96 ++--
 testcases/kernel/syscalls/ppoll/ppoll01.c     |  71 ++-
 .../sched_rr_get_interval01.c                 | 116 ++--
 .../sched_rr_get_interval02.c                 | 122 ++---
 .../sched_rr_get_interval03.c                 | 146 +++--
 testcases/kernel/syscalls/select/select_var.h |  25 +-
 .../kernel/syscalls/sendmmsg/sendmmsg01.c     |  40 +-
 .../kernel/syscalls/sendmmsg/sendmmsg_var.h   |  55 +-
 .../syscalls/sigwaitinfo/sigwaitinfo01.c      | 311 ++++++-----
 .../syscalls/timer_gettime/timer_gettime01.c  | 124 ++---
 .../syscalls/timer_settime/timer_settime01.c  |  48 +-
 .../syscalls/timer_settime/timer_settime02.c  |  66 ++-
 testcases/kernel/syscalls/timerfd/timerfd01.c |  53 +-
 testcases/kernel/syscalls/timerfd/timerfd04.c |  51 +-
 .../syscalls/timerfd/timerfd_gettime01.c      | 133 ++---
 .../syscalls/timerfd/timerfd_settime01.c      | 136 +++--
 .../syscalls/timerfd/timerfd_settime02.c      |  28 +-
 testcases/kernel/syscalls/utils/mq_timed.h    |  42 +-
 testcases/kernel/syscalls/utimensat/Makefile  |   4 -
 .../kernel/syscalls/utimensat/utimensat01.c   | 472 ++++++++--------
 .../syscalls/utimensat/utimensat_tests.sh     | 517 ------------------
 52 files changed, 2566 insertions(+), 2689 deletions(-)
 delete mode 100644 testcases/kernel/syscalls/futex/futex_wait_bitset.h
 delete mode 100644 testcases/kernel/syscalls/futex/futex_wait_bitset02.c
 create mode 100644 testcases/kernel/syscalls/ipc/semop/semop.h
 delete mode 100755 testcases/kernel/syscalls/utimensat/utimensat_tests.sh

-- 
2.25.0.rc1.19.g042ed3e048af


^ permalink raw reply	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V4 01/17] syscalls/timer_gettime: Add support for time64 tests
  2020-05-22 10:51 [LTP] [PATCH V4 00/17] Syscalls: Add support for time64 variants Viresh Kumar
@ 2020-05-22 10:51 ` Viresh Kumar
  2020-06-09 12:32   ` Li Wang
                     ` (2 more replies)
  2020-05-22 10:51 ` [LTP] [PATCH V4 02/17] syscalls/timer_settime: " Viresh Kumar
                   ` (15 subsequent siblings)
  16 siblings, 3 replies; 33+ messages in thread
From: Viresh Kumar @ 2020-05-22 10:51 UTC (permalink / raw)
  To: ltp

This adds support for time64 tests to the existing timer_gettime()
syscall tests.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 include/tst_timer.h                           |  45 +++++++
 .../syscalls/timer_gettime/timer_gettime01.c  | 124 ++++++++----------
 2 files changed, 97 insertions(+), 72 deletions(-)

diff --git a/include/tst_timer.h b/include/tst_timer.h
index 256e1d71e1bc..d9afbe0ece71 100644
--- a/include/tst_timer.h
+++ b/include/tst_timer.h
@@ -15,6 +15,7 @@
 #include <sys/time.h>
 #include <time.h>
 #include "tst_test.h"
+#include "lapi/common_timers.h"
 #include "lapi/syscalls.h"
 
 /*
@@ -112,6 +113,16 @@ struct __kernel_timespec {
 	__kernel_time64_t       tv_sec;                 /* seconds */
 	long long               tv_nsec;                /* nanoseconds */
 };
+
+struct __kernel_old_itimerspec {
+	struct __kernel_old_timespec it_interval;    /* timer period */
+	struct __kernel_old_timespec it_value;       /* timer expiration */
+};
+
+struct __kernel_itimerspec {
+	struct __kernel_timespec it_interval;    /* timer period */
+	struct __kernel_timespec it_value;       /* timer expiration */
+};
 #endif
 
 enum tst_ts_type {
@@ -129,6 +140,14 @@ struct tst_ts {
 	} ts;
 };
 
+struct tst_its {
+	enum tst_ts_type type;
+	union {
+		struct __kernel_itimerspec kern_old_its;
+		struct __kernel_itimerspec kern_its;
+	} ts;
+};
+
 static inline void *tst_ts_get(struct tst_ts *t)
 {
 	if (!t)
@@ -147,6 +166,22 @@ static inline void *tst_ts_get(struct tst_ts *t)
 	}
 }
 
+static inline void *tst_its_get(struct tst_its *t)
+{
+	if (!t)
+		return NULL;
+
+	switch (t->type) {
+	case TST_KERN_OLD_TIMESPEC:
+		return &t->ts.kern_old_its;
+	case TST_KERN_TIMESPEC:
+		return &t->ts.kern_its;
+	default:
+		tst_brk(TBROK, "Invalid type: %d", t->type);
+		return NULL;
+	}
+}
+
 static inline int libc_clock_getres(clockid_t clk_id, void *ts)
 {
 	return clock_getres(clk_id, ts);
@@ -212,6 +247,16 @@ static inline int sys_clock_nanosleep64(clockid_t clk_id, int flags,
 			   request, remain);
 }
 
+static inline int sys_timer_gettime(timer_t timerid, void *its)
+{
+	return tst_syscall(__NR_timer_gettime, timerid, its);
+}
+
+static inline int sys_timer_gettime64(timer_t timerid, void *its)
+{
+	return tst_syscall(__NR_timer_gettime64, timerid, its);
+}
+
 /*
  * Returns tst_ts seconds.
  */
diff --git a/testcases/kernel/syscalls/timer_gettime/timer_gettime01.c b/testcases/kernel/syscalls/timer_gettime/timer_gettime01.c
index 1c75f1cf0e45..d2b89eab4223 100644
--- a/testcases/kernel/syscalls/timer_gettime/timer_gettime01.c
+++ b/testcases/kernel/syscalls/timer_gettime/timer_gettime01.c
@@ -1,24 +1,5 @@
-/******************************************************************************
- * Copyright (c) Crackerjack Project., 2007                                   *
- * Porting from Crackerjack to LTP is done by:                                *
- *              Manas Kumar Nayak <maknayak@in.ibm.com>                       *
- * Copyright (c) 2013 Cyril Hrubis <chrubis@suse.cz>                          *
- *                                                                            *
- * This program is free software;  you can redistribute it and/or modify      *
- * it under the terms of the GNU General Public License as published by       *
- * the Free Software Foundation; either version 2 of the License, or          *
- * (at your option) any later version.                                        *
- *                                                                            *
- * This program is distributed in the hope that it will be useful,            *
- * but WITHOUT ANY WARRANTY;  without even the implied warranty of            *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See                  *
- * the GNU General Public License for more details.                           *
- *                                                                            *
- * You should have received a copy of the GNU General Public License          *
- * along with this program;  if not, write to the Free Software Foundation,   *
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA           *
- *                                                                            *
- ******************************************************************************/
+// SPDX-License-Identifier: GPL-2.0-or-later
+/* Copyright (c) Crackerjack Project., 2007 */
 
 #include <time.h>
 #include <signal.h>
@@ -26,71 +7,70 @@
 #include <stdio.h>
 #include <errno.h>
 
-#include "test.h"
-#include "lapi/syscalls.h"
+#include "tst_timer.h"
 
-char *TCID = "timer_gettime01";
-int TST_TOTAL = 3;
+static struct test_variants {
+	int (*func)(timer_t timer, void *its);
+	enum tst_ts_type type;
+	char *desc;
+} variants[] = {
+#if (__NR_timer_gettime != __LTP__NR_INVALID_SYSCALL)
+	{ .func = sys_timer_gettime, .type = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
 
-static void cleanup(void)
-{
-	tst_rmdir();
-}
+#if (__NR_timer_gettime64 != __LTP__NR_INVALID_SYSCALL)
+	{ .func = sys_timer_gettime64, .type = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
 
-static void setup(void)
-{
-	TEST_PAUSE;
-	tst_tmpdir();
-}
+static timer_t timer;
 
-int main(int ac, char **av)
+static void setup(void)
 {
-	int lc;
-
 	struct sigevent ev;
-	struct itimerspec spec;
-	int timer;
 
-	tst_parse_opts(ac, av, NULL, NULL);
-
-	setup();
+	tst_res(TINFO, "Testing variant: %s", variants[tst_variant].desc);
 
 	ev.sigev_value = (union sigval) 0;
 	ev.sigev_signo = SIGALRM;
 	ev.sigev_notify = SIGEV_SIGNAL;
-	TEST(ltp_syscall(__NR_timer_create, CLOCK_REALTIME, &ev, &timer));
-
-	if (TEST_RETURN != 0)
-		tst_brkm(TBROK | TERRNO, cleanup, "Failed to create timer");
 
-	for (lc = 0; TEST_LOOPING(lc); ++lc) {
-		tst_count = 0;
+	TEST(tst_syscall(__NR_timer_create, CLOCK_REALTIME, &ev, &timer));
 
-		TEST(ltp_syscall(__NR_timer_gettime, timer, &spec));
-		if (TEST_RETURN == 0) {
-			tst_resm(TPASS, "timer_gettime(CLOCK_REALTIME) Passed");
-		} else {
-			tst_resm(TFAIL | TERRNO,
-			         "timer_gettime(CLOCK_REALTIME) Failed");
-		}
-
-		TEST(ltp_syscall(__NR_timer_gettime, -1, &spec));
-		if (TEST_RETURN == -1 && TEST_ERRNO == EINVAL) {
-			tst_resm(TPASS,	"timer_gettime(-1) Failed: EINVAL");
-		} else {
-			tst_resm(TFAIL | TERRNO,
-			         "timer_gettime(-1) = %li", TEST_RETURN);
-		}
+	if (TST_RET) {
+		tst_res(TFAIL | TTERRNO, "timer_create() failed");
+		return;
+	}
+}
 
-		TEST(ltp_syscall(__NR_timer_gettime, timer, NULL));
-		if (TEST_RETURN == -1 && TEST_ERRNO == EFAULT) {
-			tst_resm(TPASS,	"timer_gettime(NULL) Failed: EFAULT");
-		} else {
-			tst_resm(TFAIL | TERRNO,
-			         "timer_gettime(-1) = %li", TEST_RETURN);
-		}
+static void verify(void)
+{
+	struct test_variants *tv = &variants[tst_variant];
+	struct tst_its spec = {.type = tv->type, };
+
+	TEST(tv->func(timer, tst_its_get(&spec)));
+	if (TST_RET == 0) {
+		tst_res(TPASS, "timer_gettime() Passed");
+	} else {
+		tst_res(TFAIL | TTERRNO, "timer_gettime() Failed");
 	}
 
-	cleanup();
-	tst_exit();
+	TEST(tv->func((timer_t)-1, tst_its_get(&spec)));
+	if (TST_RET == -1 && TST_ERR == EINVAL)
+		tst_res(TPASS, "timer_gettime(-1) Failed: EINVAL");
+	else
+		tst_res(TFAIL | TTERRNO, "timer_gettime(-1) = %li", TST_RET);
+
+	TEST(tv->func(timer, NULL));
+	if (TST_RET == -1 && TST_ERR == EFAULT)
+		tst_res(TPASS, "timer_gettime(NULL) Failed: EFAULT");
+	else
+		tst_res(TFAIL | TTERRNO, "timer_gettime(-1) = %li", TST_RET);
 }
+
+static struct tst_test test = {
+	.test_all = verify,
+	.test_variants = ARRAY_SIZE(variants),
+	.setup = setup,
+	.needs_tmpdir = 1,
+};
-- 
2.25.0.rc1.19.g042ed3e048af


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V4 02/17] syscalls/timer_settime: Add support for time64 tests
  2020-05-22 10:51 [LTP] [PATCH V4 00/17] Syscalls: Add support for time64 variants Viresh Kumar
  2020-05-22 10:51 ` [LTP] [PATCH V4 01/17] syscalls/timer_gettime: Add support for time64 tests Viresh Kumar
@ 2020-05-22 10:51 ` Viresh Kumar
  2020-06-24 14:30   ` Cyril Hrubis
  2020-05-22 10:51 ` [LTP] [PATCH V4 03/17] syscalls/timerfd: " Viresh Kumar
                   ` (14 subsequent siblings)
  16 siblings, 1 reply; 33+ messages in thread
From: Viresh Kumar @ 2020-05-22 10:51 UTC (permalink / raw)
  To: ltp

This adds support for time64 tests to the existing timer_settime()
syscall tests.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 include/tst_timer.h                           | 34 ++++++++++
 .../syscalls/timer_settime/timer_settime01.c  | 48 ++++++++++----
 .../syscalls/timer_settime/timer_settime02.c  | 66 +++++++++++++------
 3 files changed, 116 insertions(+), 32 deletions(-)

diff --git a/include/tst_timer.h b/include/tst_timer.h
index d9afbe0ece71..44cc764e3950 100644
--- a/include/tst_timer.h
+++ b/include/tst_timer.h
@@ -257,6 +257,40 @@ static inline int sys_timer_gettime64(timer_t timerid, void *its)
 	return tst_syscall(__NR_timer_gettime64, timerid, its);
 }
 
+static inline int sys_timer_settime(timer_t timerid, int flags, void *its,
+				    void *old_its)
+{
+	return tst_syscall(__NR_timer_settime, timerid, flags, its, old_its);
+}
+
+static inline int sys_timer_settime64(timer_t timerid, int flags, void *its,
+				      void *old_its)
+{
+	return tst_syscall(__NR_timer_settime64, timerid, flags, its, old_its);
+}
+
+static inline void tst_its_set_time(struct tst_its *its, long long value_sec,
+				long long value_nsec, long long interval_sec,
+				long long interval_nsec)
+{
+	switch (its->type) {
+	case TST_KERN_OLD_TIMESPEC:
+		its->ts.kern_old_its.it_value.tv_sec = value_sec;
+		its->ts.kern_old_its.it_value.tv_nsec = value_nsec;
+		its->ts.kern_old_its.it_interval.tv_sec = interval_sec;
+		its->ts.kern_old_its.it_interval.tv_nsec = interval_nsec;
+	break;
+	case TST_KERN_TIMESPEC:
+		its->ts.kern_its.it_value.tv_sec = value_sec;
+		its->ts.kern_its.it_value.tv_nsec = value_nsec;
+		its->ts.kern_its.it_interval.tv_sec = interval_sec;
+		its->ts.kern_its.it_interval.tv_nsec = interval_nsec;
+	break;
+	default:
+		tst_brk(TBROK, "Invalid type: %d", its->type);
+	}
+}
+
 /*
  * Returns tst_ts seconds.
  */
diff --git a/testcases/kernel/syscalls/timer_settime/timer_settime01.c b/testcases/kernel/syscalls/timer_settime/timer_settime01.c
index da365d221086..a92def78bbfe 100644
--- a/testcases/kernel/syscalls/timer_settime/timer_settime01.c
+++ b/testcases/kernel/syscalls/timer_settime/timer_settime01.c
@@ -25,15 +25,14 @@
 #include <errno.h>
 #include <time.h>
 #include <signal.h>
-#include "tst_test.h"
-#include "lapi/common_timers.h"
+#include "tst_timer.h"
 
-static struct timespec timenow;
-static struct itimerspec new_set, old_set;
-static kernel_timer_t timer;
+static struct tst_ts timenow;
+static struct tst_its new_set, old_set;
+static timer_t timer;
 
 static struct testcase {
-	struct itimerspec	*old_ptr;
+	struct tst_its		*old_ptr;
 	int			it_value_tv_sec;
 	int			it_interval_tv_sec;
 	int			flag;
@@ -45,10 +44,28 @@ static struct testcase {
 	{&old_set, 5, 0, TIMER_ABSTIME, "using absolute time"},
 };
 
+static struct test_variants {
+	int (*gettime)(clockid_t clk_id, void *ts);
+	int (*func)(timer_t timerid, int flags, void *its,
+		    void *old_its);
+	enum tst_ts_type type;
+	char *desc;
+} variants[] = {
+#if (__NR_timer_settime != __LTP__NR_INVALID_SYSCALL)
+	{ .gettime = sys_clock_gettime, .func = sys_timer_settime, .type = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_timer_settime64 != __LTP__NR_INVALID_SYSCALL)
+	{ .gettime = sys_clock_gettime64, .func = sys_timer_settime64, .type = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
 static void run(unsigned int n)
 {
-	unsigned int i;
+	struct test_variants *tv = &variants[tst_variant];
 	struct testcase *tc = &tcases[n];
+	long long val;
+	unsigned int i;
 
 	tst_res(TINFO, "Testing for %s:", tc->description);
 
@@ -78,21 +95,24 @@ static void run(unsigned int n)
 		memset(&new_set, 0, sizeof(new_set));
 		memset(&old_set, 0, sizeof(old_set));
 
-		new_set.it_value.tv_sec = tc->it_value_tv_sec;
-		new_set.it_interval.tv_sec = tc->it_interval_tv_sec;
+		new_set.type = old_set.type = tv->type;
+
+		val = tc->it_value_tv_sec;
 
 		if (tc->flag & TIMER_ABSTIME) {
-			if (clock_gettime(clock, &timenow) < 0) {
+			timenow.type = tv->type;
+			if (tv->gettime(clock, tst_ts_get(&timenow)) < 0) {
 				tst_res(TFAIL,
 					"clock_gettime(%s) failed - skipping the test",
 					get_clock_str(clock));
 				continue;
 			}
-			new_set.it_value.tv_sec += timenow.tv_sec;
+			val += tst_ts_get_sec(timenow);
 		}
 
-		TEST(tst_syscall(__NR_timer_settime, timer,
-			tc->flag, &new_set, tc->old_ptr));
+		tst_its_set_time(&new_set, val, 0, tc->it_interval_tv_sec, 0);
+
+		TEST(tv->func(timer, tc->flag, tst_its_get(&new_set), tst_its_get(tc->old_ptr)));
 
 		if (TST_RET != 0) {
 			tst_res(TFAIL | TTERRNO, "%s failed",
@@ -116,6 +136,7 @@ static void sighandler(int sig)
 
 static void setup(void)
 {
+	tst_res(TINFO, "Testing variant: %s", variants[tst_variant].desc);
 	SAFE_SIGNAL(SIGALRM, sighandler);
 }
 
@@ -123,6 +144,7 @@ static struct tst_test test = {
 	.test = run,
 	.needs_root = 1,
 	.tcnt = ARRAY_SIZE(tcases),
+	.test_variants = ARRAY_SIZE(variants),
 	.setup = setup,
 	.tags = (const struct tst_tag[]) {
 		{"linux-git", "f18ddc13af98"},
diff --git a/testcases/kernel/syscalls/timer_settime/timer_settime02.c b/testcases/kernel/syscalls/timer_settime/timer_settime02.c
index bcabb76956f8..dbf79cceda41 100644
--- a/testcases/kernel/syscalls/timer_settime/timer_settime02.c
+++ b/testcases/kernel/syscalls/timer_settime/timer_settime02.c
@@ -25,12 +25,13 @@
 
 #include <errno.h>
 #include <time.h>
-#include "tst_test.h"
-#include "lapi/common_timers.h"
+#include "tst_timer.h"
 
-static struct itimerspec new_set, old_set;
-static kernel_timer_t timer;
-static kernel_timer_t timer_inval = -1;
+static struct tst_its new_set, old_set;
+static struct tst_its *pnew_set = &new_set, *pold_set = &old_set, *null_set = NULL;
+static void *faulty_set;
+static timer_t timer;
+static timer_t timer_inval = -1;
 
 /* separate description-array to (hopefully) improve readability */
 static const char * const descriptions[] = {
@@ -43,24 +44,47 @@ static const char * const descriptions[] = {
 };
 
 static struct testcase {
-	kernel_timer_t		*timer_id;
-	struct itimerspec	*new_ptr;
-	struct itimerspec	*old_ptr;
+	timer_t			*timer_id;
+	struct tst_its		**new_ptr;
+	struct tst_its		**old_ptr;
 	int			it_value_tv_nsec;
 	int			error;
 } tcases[] = {
-	{&timer, NULL, &old_set, 0, EINVAL},
-	{&timer, &new_set, &old_set, -1, EINVAL},
-	{&timer, &new_set, &old_set, NSEC_PER_SEC + 1, EINVAL},
-	{&timer_inval, &new_set, &old_set, 0, EINVAL},
-	{&timer, (struct itimerspec *) -1, &old_set, 0, EFAULT},
-	{&timer, &new_set, (struct itimerspec *) -1, 0, EFAULT},
+	{&timer, &null_set, &pold_set, 0, EINVAL},
+	{&timer, &pnew_set, &pold_set, -1, EINVAL},
+	{&timer, &pnew_set, &pold_set, NSEC_PER_SEC + 1, EINVAL},
+	{&timer_inval, &pnew_set, &pold_set, 0, EINVAL},
+	{&timer, (struct tst_its **)&faulty_set, &pold_set, 0, EFAULT},
+	{&timer, &pnew_set, (struct tst_its **)&faulty_set, 0, EFAULT},
 };
 
+static struct test_variants {
+	int (*func)(timer_t timerid, int flags, void *its,
+		    void *old_its);
+	enum tst_ts_type type;
+	char *desc;
+} variants[] = {
+#if (__NR_timer_settime != __LTP__NR_INVALID_SYSCALL)
+	{ .func = sys_timer_settime, .type = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_timer_settime64 != __LTP__NR_INVALID_SYSCALL)
+	{ .func = sys_timer_settime64, .type = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
+static void setup(void)
+{
+	tst_res(TINFO, "Testing variant: %s", variants[tst_variant].desc);
+	faulty_set = tst_get_bad_addr(NULL);
+}
+
 static void run(unsigned int n)
 {
-	unsigned int i;
+	struct test_variants *tv = &variants[tst_variant];
 	struct testcase *tc = &tcases[n];
+	void *new, *old;
+	unsigned int i;
 
 	tst_res(TINFO, "Testing for %s:", descriptions[n]);
 
@@ -91,11 +115,13 @@ static void run(unsigned int n)
 		memset(&new_set, 0, sizeof(new_set));
 		memset(&old_set, 0, sizeof(old_set));
 
-		new_set.it_value.tv_sec  = 5;
-		new_set.it_value.tv_nsec = tc->it_value_tv_nsec;
+		new_set.type = old_set.type = tv->type;
+		tst_its_set_time(&new_set, 5, tc->it_value_tv_nsec, 0, 0);
+
+		new = (tc->new_ptr == (struct tst_its **)&faulty_set) ? faulty_set : tst_its_get(*tc->new_ptr);
+		old = (tc->old_ptr == (struct tst_its **)&faulty_set) ? faulty_set : tst_its_get(*tc->old_ptr);
 
-		TEST(tst_syscall(__NR_timer_settime, *tc->timer_id,
-					0, tc->new_ptr,	tc->old_ptr));
+		TEST(tv->func(*tc->timer_id, 0, new, old));
 
 		if (tc->error != TST_ERR) {
 			tst_res(TFAIL | TTERRNO,
@@ -119,6 +145,8 @@ static struct tst_test test = {
 	.test = run,
 	.needs_root = 1,
 	.tcnt = ARRAY_SIZE(tcases),
+	.test_variants = ARRAY_SIZE(variants),
+	.setup = setup,
 	.tags = (const struct tst_tag[]) {
 		{"linux-git", "f18ddc13af98"},
 		{}
-- 
2.25.0.rc1.19.g042ed3e048af


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V4 03/17] syscalls/timerfd: Add support for time64 tests
  2020-05-22 10:51 [LTP] [PATCH V4 00/17] Syscalls: Add support for time64 variants Viresh Kumar
  2020-05-22 10:51 ` [LTP] [PATCH V4 01/17] syscalls/timer_gettime: Add support for time64 tests Viresh Kumar
  2020-05-22 10:51 ` [LTP] [PATCH V4 02/17] syscalls/timer_settime: " Viresh Kumar
@ 2020-05-22 10:51 ` Viresh Kumar
  2020-05-22 10:51 ` [LTP] [PATCH V4 04/17] syscalls/sched_rr_get_interval: " Viresh Kumar
                   ` (13 subsequent siblings)
  16 siblings, 0 replies; 33+ messages in thread
From: Viresh Kumar @ 2020-05-22 10:51 UTC (permalink / raw)
  To: ltp

This adds support for time64 tests to the existing timerfd_gettime() and
timerfd_settime() syscall tests.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 include/tst_timer.h                           |  48 +++++++
 testcases/kernel/syscalls/timerfd/timerfd01.c |  53 +++++--
 testcases/kernel/syscalls/timerfd/timerfd04.c |  51 +++++--
 .../syscalls/timerfd/timerfd_gettime01.c      | 133 ++++++++---------
 .../syscalls/timerfd/timerfd_settime01.c      | 136 ++++++++----------
 .../syscalls/timerfd/timerfd_settime02.c      |  28 +++-
 6 files changed, 279 insertions(+), 170 deletions(-)

diff --git a/include/tst_timer.h b/include/tst_timer.h
index 44cc764e3950..bb24636b015a 100644
--- a/include/tst_timer.h
+++ b/include/tst_timer.h
@@ -269,6 +269,54 @@ static inline int sys_timer_settime64(timer_t timerid, int flags, void *its,
 	return tst_syscall(__NR_timer_settime64, timerid, flags, its, old_its);
 }
 
+static inline int sys_timerfd_gettime(int fd, void *its)
+{
+	return tst_syscall(__NR_timerfd_gettime, fd, its);
+}
+
+static inline int sys_timerfd_gettime64(int fd, void *its)
+{
+	return tst_syscall(__NR_timerfd_gettime64, fd, its);
+}
+
+static inline int sys_timerfd_settime(int fd, int flags, void *its,
+				      void *old_its)
+{
+	return tst_syscall(__NR_timerfd_settime, fd, flags, its, old_its);
+}
+
+static inline int sys_timerfd_settime64(int fd, int flags, void *its,
+				      void *old_its)
+{
+	return tst_syscall(__NR_timerfd_settime64, fd, flags, its, old_its);
+}
+
+static inline long long tst_its_get_val_sec(struct tst_its its)
+{
+	switch (its.type) {
+	case TST_KERN_OLD_TIMESPEC:
+		return its.ts.kern_old_its.it_value.tv_sec;
+	case TST_KERN_TIMESPEC:
+		return its.ts.kern_its.it_value.tv_sec;
+	default:
+		tst_brk(TBROK, "Invalid type: %d", its.type);
+		return -1;
+	}
+}
+
+static inline long long tst_its_get_val_nsec(struct tst_its its)
+{
+	switch (its.type) {
+	case TST_KERN_OLD_TIMESPEC:
+		return its.ts.kern_old_its.it_value.tv_nsec;
+	case TST_KERN_TIMESPEC:
+		return its.ts.kern_its.it_value.tv_nsec;
+	default:
+		tst_brk(TBROK, "Invalid type: %d", its.type);
+		return -1;
+	}
+}
+
 static inline void tst_its_set_time(struct tst_its *its, long long value_sec,
 				long long value_nsec, long long interval_sec,
 				long long interval_nsec)
diff --git a/testcases/kernel/syscalls/timerfd/timerfd01.c b/testcases/kernel/syscalls/timerfd/timerfd01.c
index 45d4c5d5ea0d..262db0e55450 100644
--- a/testcases/kernel/syscalls/timerfd/timerfd01.c
+++ b/testcases/kernel/syscalls/timerfd/timerfd01.c
@@ -17,7 +17,6 @@
 
 #define _GNU_SOURCE
 #include <poll.h>
-#include "tst_test.h"
 #include "tst_timer.h"
 #include "tst_safe_timerfd.h"
 
@@ -29,25 +28,46 @@ static struct tcase {
 	{CLOCK_REALTIME, "CLOCK REALTIME"},
 };
 
+static struct test_variants {
+	int (*cgettime)(clockid_t clk_id, void *ts);
+	int (*tfd_gettime)(int fd, void *its);
+	int (*tfd_settime)(int fd, int flags, void *new_value, void *old_value);
+	enum tst_ts_type type;
+	char *desc;
+} variants[] = {
+#if (__NR_timerfd_gettime != __LTP__NR_INVALID_SYSCALL)
+	{ .cgettime = sys_clock_gettime, .tfd_gettime = sys_timerfd_gettime, .tfd_settime = sys_timerfd_settime, .type = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_timerfd_gettime64 != __LTP__NR_INVALID_SYSCALL)
+	{ .cgettime = sys_clock_gettime64, .tfd_gettime = sys_timerfd_gettime64, .tfd_settime = sys_timerfd_settime64, .type = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
 static unsigned long long getustime(int clockid)
 {
-	struct timespec tp;
+	struct test_variants *tv = &variants[tst_variant];
+	struct tst_ts tp = {.type = tv->type, };
 
-	if (clock_gettime((clockid_t) clockid, &tp)) {
+	if (tv->cgettime((clockid_t) clockid, tst_ts_get(&tp))) {
 		tst_res(TFAIL | TERRNO, "clock_gettime() failed");
 		return 0;
 	}
 
-	return 1000000ULL * tp.tv_sec + tp.tv_nsec / 1000;
+	return 1000000ULL * tst_ts_get_sec(tp) + tst_ts_get_nsec(tp) / 1000;
 }
 
-static void settime(int tfd, struct itimerspec *tmr, int tflags,
+static void settime(int tfd, struct tst_its *tmr, int tflags,
                     unsigned long long tvalue, int tinterval)
 {
-	tmr->it_value = tst_timespec_from_us(tvalue);
-	tmr->it_interval = tst_timespec_from_us(tinterval);
+	struct test_variants *tv = &variants[tst_variant];
+	struct timespec value = tst_timespec_from_us(tvalue);
+	struct timespec interval = tst_timespec_from_us(tinterval);
 
-	SAFE_TIMERFD_SETTIME(tfd, tflags, tmr, NULL);
+	tst_its_set_time(tmr, value.tv_sec, value.tv_nsec, interval.tv_sec, interval.tv_nsec);
+
+	if (tv->tfd_settime(tfd, tflags, tst_its_get(tmr), NULL))
+		tst_res(TFAIL, "timerfd_settime() failed");
 }
 
 static void waittmr(int tfd, unsigned int exp_ticks)
@@ -78,10 +98,11 @@ static void waittmr(int tfd, unsigned int exp_ticks)
 
 static void run(unsigned int n)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	int tfd;
 	unsigned long long tnow;
 	uint64_t uticks;
-	struct itimerspec tmr;
+	struct tst_its tmr = {.type = tv->type, };
 	struct tcase *clks = &tcases[n];
 
 	tst_res(TINFO, "testing %s", clks->name);
@@ -102,11 +123,12 @@ static void run(unsigned int n)
 	settime(tfd, &tmr, TFD_TIMER_ABSTIME, tnow + 50 * 1000, 50 * 1000);
 
 	memset(&tmr, 0, sizeof(tmr));
-	if (timerfd_gettime(tfd, &tmr))
-		tst_res(TFAIL | TERRNO, "timerfd_gettime() failed");
+	tmr.type = tv->type;
 
+	if (tv->tfd_gettime(tfd, tst_its_get(&tmr)))
+		tst_res(TFAIL | TERRNO, "timerfd_gettime() failed");
 
-	if (tmr.it_value.tv_sec != 0 || tmr.it_value.tv_nsec > 50 * 1000000)
+	if (tst_its_get_val_sec(tmr) != 0 || tst_its_get_val_nsec(tmr) > 50 * 1000000)
 		tst_res(TFAIL, "Timer read back value not relative");
 	else
 		tst_res(TPASS, "Timer read back value is relative");
@@ -132,8 +154,15 @@ static void run(unsigned int n)
 	SAFE_CLOSE(tfd);
 }
 
+static void setup(void)
+{
+	tst_res(TINFO, "Testing variant: %s", variants[tst_variant].desc);
+}
+
 static struct tst_test test = {
 	.test = run,
 	.tcnt = ARRAY_SIZE(tcases),
+	.test_variants = ARRAY_SIZE(variants),
+	.setup = setup,
 	.min_kver = "2.6.25",
 };
diff --git a/testcases/kernel/syscalls/timerfd/timerfd04.c b/testcases/kernel/syscalls/timerfd/timerfd04.c
index 7197fc67ed47..ee5382dd52f8 100644
--- a/testcases/kernel/syscalls/timerfd/timerfd04.c
+++ b/testcases/kernel/syscalls/timerfd/timerfd04.c
@@ -19,7 +19,6 @@
 #include "tst_safe_timerfd.h"
 #include "tst_timer.h"
 #include "lapi/namespaces_constants.h"
-#include "tst_test.h"
 
 #define SLEEP_US 40000
 
@@ -35,26 +34,56 @@ static struct tcase {
 	{CLOCK_BOOTTIME, CLOCK_BOOTTIME, -10},
 };
 
+static struct test_variants {
+	int (*cgettime)(clockid_t clk_id, void *ts);
+	int (*tfd_settime)(int fd, int flags, void *new_value, void *old_value);
+	enum tst_ts_type type;
+	char *desc;
+} variants[] = {
+#if (__NR_timerfd_settime != __LTP__NR_INVALID_SYSCALL)
+	{ .cgettime = sys_clock_gettime, .tfd_settime = sys_timerfd_settime, .type = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_timerfd_settime64 != __LTP__NR_INVALID_SYSCALL)
+	{ .cgettime = sys_clock_gettime64, .tfd_settime = sys_timerfd_settime64, .type = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
+static void setup(void)
+{
+	tst_res(TINFO, "Testing variant: %s", variants[tst_variant].desc);
+}
+
 static void verify_timerfd(unsigned int n)
 {
-	struct timespec start, end;
-	struct itimerspec it = {};
+	struct test_variants *tv = &variants[tst_variant];
+	struct tst_ts start, end;
+	struct tst_its it;
 	struct tcase *tc = &tcases[n];
 
+	start.type = end.type = it.type = tv->type;
 	SAFE_UNSHARE(CLONE_NEWTIME);
 
 	SAFE_FILE_PRINTF("/proc/self/timens_offsets", "%d %d 0",
 	                 tc->clk_off, tc->off);
 
-	SAFE_CLOCK_GETTIME(tc->clk_id, &start);
+	if (tv->cgettime(tc->clk_id, tst_ts_get(&start))) {
+		tst_res(TFAIL | TTERRNO, "clock_gettime(2) failed for clock %s",
+			tst_clock_name(tc->clk_id));
+		return;
+	}
 
-	it.it_value = tst_timespec_add_us(start, 1000000 * tc->off + SLEEP_US);
+	end = tst_ts_add_us(start, 1000000 * tc->off + SLEEP_US);
+	tst_its_set_time(&it, tst_ts_get_sec(end), tst_ts_get_nsec(end), 0, 0);
 
 	if (!SAFE_FORK()) {
 		uint64_t exp;
 		int fd = SAFE_TIMERFD_CREATE(tc->clk_id, 0);
 
-		SAFE_TIMERFD_SETTIME(fd, TFD_TIMER_ABSTIME, &it, NULL);
+		if (tv->tfd_settime(fd, TFD_TIMER_ABSTIME, tst_its_get(&it), NULL)) {
+			tst_res(TFAIL, "timerfd_settime() failed");
+			return;
+		}
 
 		SAFE_READ(1, fd, &exp, sizeof(exp));
 
@@ -67,9 +96,13 @@ static void verify_timerfd(unsigned int n)
 
 	SAFE_WAIT(NULL);
 
-	SAFE_CLOCK_GETTIME(CLOCK_MONOTONIC, &end);
+	if (tv->cgettime(CLOCK_MONOTONIC, tst_ts_get(&end))) {
+		tst_res(TFAIL | TTERRNO, "clock_gettime(2) failed for clock %s",
+			tst_clock_name(CLOCK_MONOTONIC));
+		return;
+	}
 
-	long long diff = tst_timespec_diff_us(end, start);
+	long long diff = tst_ts_diff_us(end, start);
 
 	if (diff > 5 * SLEEP_US) {
 		tst_res(TFAIL, "timerfd %s slept too long %lli",
@@ -90,6 +123,8 @@ static void verify_timerfd(unsigned int n)
 static struct tst_test test = {
 	.tcnt = ARRAY_SIZE(tcases),
 	.test = verify_timerfd,
+	.test_variants = ARRAY_SIZE(variants),
+	.setup = setup,
 	.needs_root = 1,
 	.forks_child = 1,
 	.needs_kconfigs = (const char *[]) {
diff --git a/testcases/kernel/syscalls/timerfd/timerfd_gettime01.c b/testcases/kernel/syscalls/timerfd/timerfd_gettime01.c
index 5f3240bdc7d7..49f5aa59a96b 100644
--- a/testcases/kernel/syscalls/timerfd/timerfd_gettime01.c
+++ b/testcases/kernel/syscalls/timerfd/timerfd_gettime01.c
@@ -1,20 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (c) 2014 Fujitsu Ltd.
  * Author: Zeng Linggang <zenglg.jy@cn.fujitsu.com>
  *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-/*
  * DESCRIPTION
  *  Verify that,
  *   1. fd is not a valid file descriptor, EBADF would return.
@@ -24,99 +12,96 @@
 
 #define _GNU_SOURCE
 
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#include "test.h"
-#include "safe_macros.h"
-#include "lapi/timerfd.h"
+#include "tst_timer.h"
+#include "tst_safe_timerfd.h"
 
 char *TCID = "timerfd_gettime01";
 
 static int bad_clockfd = -1;
 static int clockfd;
 static int fd;
+static void *bad_addr;
 
 static struct test_case_t {
 	int *fd;
-	struct itimerspec *curr_value;
+	struct tst_its *curr_value;
 	int exp_errno;
 } test_cases[] = {
 	{&bad_clockfd, NULL, EBADF},
-	{&clockfd, (struct itimerspec *)-1, EFAULT},
+	{&clockfd, NULL, EFAULT},
 	{&fd, NULL, EINVAL},
 };
 
-int TST_TOTAL = ARRAY_SIZE(test_cases);
-static void setup(void);
-static void timerfd_gettime_verify(const struct test_case_t *);
-static void cleanup(void);
+static struct test_variants {
+	int (*tfd_gettime)(int fd, void *its);
+	char *desc;
+} variants[] = {
+#if (__NR_timerfd_gettime != __LTP__NR_INVALID_SYSCALL)
+	{ .tfd_gettime = sys_timerfd_gettime, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_timerfd_gettime64 != __LTP__NR_INVALID_SYSCALL)
+	{ .tfd_gettime = sys_timerfd_gettime64, .desc = "syscall time64 with kernel spec"},
+#endif
+};
 
-int main(int argc, char *argv[])
+static void setup(void)
 {
-	int lc;
-	int i;
-
-	tst_parse_opts(argc, argv, NULL, NULL);
-
-	setup();
+	tst_res(TINFO, "Testing variant: %s", variants[tst_variant].desc);
+	bad_addr = tst_get_bad_addr(NULL);
 
-	for (lc = 0; TEST_LOOPING(lc); lc++) {
-		tst_count = 0;
-		for (i = 0; i < TST_TOTAL; i++)
-			timerfd_gettime_verify(&test_cases[i]);
+	clockfd = timerfd_create(CLOCK_REALTIME, 0);
+	if (clockfd == -1) {
+		tst_brk(TFAIL | TERRNO, "timerfd_create() fail");
+		return;
 	}
 
-	cleanup();
-	tst_exit();
+	fd = SAFE_OPEN("test_file", O_RDWR | O_CREAT, 0644);
 }
 
-static void setup(void)
+static void cleanup(void)
 {
-	if ((tst_kvercmp(2, 6, 25)) < 0)
-		tst_brkm(TCONF, NULL, "This test needs kernel 2.6.25 or newer");
-
-	tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
-	TEST_PAUSE;
-
-	tst_tmpdir();
-
-	clockfd = timerfd_create(CLOCK_REALTIME, 0);
-	if (clockfd == -1)
-		tst_brkm(TBROK | TERRNO, cleanup, "timerfd_create() fail");
+	if (clockfd > 0)
+		close(clockfd);
 
-	fd = SAFE_OPEN(cleanup, "test_file", O_RDWR | O_CREAT, 0644);
+	if (fd > 0)
+		close(fd);
 }
 
-static void timerfd_gettime_verify(const struct test_case_t *test)
+static void run(unsigned int n)
 {
-	TEST(timerfd_gettime(*test->fd, test->curr_value));
+	struct test_variants *tv = &variants[tst_variant];
+	struct test_case_t *test = &test_cases[n];
+	void *its;
 
-	if (TEST_RETURN != -1) {
-		tst_resm(TFAIL, "timerfd_gettime() succeeded unexpectedly");
+	if (test->exp_errno == EFAULT)
+		its = bad_addr;
+	else
+		its = tst_its_get(test->curr_value);
+
+	TEST(tv->tfd_gettime(*test->fd, its));
+
+	if (TST_RET != -1) {
+		tst_res(TFAIL, "timerfd_gettime() succeeded unexpectedly");
 		return;
 	}
 
-	if (TEST_ERRNO == test->exp_errno) {
-		tst_resm(TPASS | TTERRNO,
-			 "timerfd_gettime() failed as expected");
+	if (TST_ERR == test->exp_errno) {
+		tst_res(TPASS | TTERRNO,
+			"timerfd_gettime() failed as expected");
 	} else {
-		tst_resm(TFAIL | TTERRNO,
-			 "timerfd_gettime() failed unexpectedly; expected: "
-			 "%d - %s", test->exp_errno, strerror(test->exp_errno));
+		tst_res(TFAIL | TTERRNO,
+			"timerfd_gettime() failed unexpectedly; expected: "
+			"%d - %s", test->exp_errno, strerror(test->exp_errno));
 	}
 }
 
-static void cleanup(void)
-{
-	if (clockfd > 0)
-		close(clockfd);
-
-	if (fd > 0)
-		close(fd);
-
-	tst_rmdir();
-}
+static struct tst_test test = {
+	.test = run,
+	.tcnt = ARRAY_SIZE(test_cases),
+	.test_variants = ARRAY_SIZE(variants),
+	.setup = setup,
+	.cleanup = cleanup,
+	.needs_tmpdir = 1,
+	.min_kver = "2.6.25",
+};
diff --git a/testcases/kernel/syscalls/timerfd/timerfd_settime01.c b/testcases/kernel/syscalls/timerfd/timerfd_settime01.c
index 2e65d23ae825..2fd64c1c6a04 100644
--- a/testcases/kernel/syscalls/timerfd/timerfd_settime01.c
+++ b/testcases/kernel/syscalls/timerfd/timerfd_settime01.c
@@ -1,20 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (c) 2014 Fujitsu Ltd.
  * Author: Zeng Linggang <zenglg.jy@cn.fujitsu.com>
  *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-/*
  * DESCRIPTION
  *  Verify that,
  *   1. fd is not a valid file descriptor, EBADF would return.
@@ -25,13 +13,7 @@
 
 #define _GNU_SOURCE
 
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#include "test.h"
-#include "safe_macros.h"
+#include "tst_timer.h"
 #include "lapi/timerfd.h"
 
 char *TCID = "timerfd_settime01";
@@ -39,80 +21,51 @@ char *TCID = "timerfd_settime01";
 static int bad_clockfd = -1;
 static int clockfd;
 static int fd;
+static void *bad_addr;
 
 static struct test_case_t {
 	int *fd;
 	int flags;
-	struct itimerspec *old_value;
+	struct tst_its *old_value;
 	int exp_errno;
 } test_cases[] = {
 	{&bad_clockfd, 0, NULL, EBADF},
-	{&clockfd, 0, (struct itimerspec *)-1, EFAULT},
+	{&clockfd, 0, NULL, EFAULT},
 	{&fd, 0, NULL, EINVAL},
 	{&clockfd, -1, NULL, EINVAL},
 };
 
-int TST_TOTAL = ARRAY_SIZE(test_cases);
-static void setup(void);
-static void timerfd_settime_verify(const struct test_case_t *);
-static void cleanup(void);
-static struct itimerspec new_value;
+static struct tst_its new_value;
 
-int main(int argc, char *argv[])
-{
-	int lc;
-	int i;
-
-	tst_parse_opts(argc, argv, NULL, NULL);
+static struct test_variants {
+	int (*tfd_settime)(int fd, int flags, void *new_value, void *old_value);
+	enum tst_ts_type type;
+	char *desc;
+} variants[] = {
+#if (__NR_timerfd_settime != __LTP__NR_INVALID_SYSCALL)
+	{ .tfd_settime = sys_timerfd_settime, .type = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
 
-	setup();
-
-	for (lc = 0; TEST_LOOPING(lc); lc++) {
-		tst_count = 0;
-		for (i = 0; i < TST_TOTAL; i++)
-			timerfd_settime_verify(&test_cases[i]);
-	}
-
-	cleanup();
-	tst_exit();
-}
+#if (__NR_timerfd_settime64 != __LTP__NR_INVALID_SYSCALL)
+	{ .tfd_settime = sys_timerfd_settime64, .type = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
 
 static void setup(void)
 {
-	if ((tst_kvercmp(2, 6, 25)) < 0)
-		tst_brkm(TCONF, NULL, "This test needs kernel 2.6.25 or newer");
-
-	tst_sig(NOFORK, DEF_HANDLER, cleanup);
+	struct test_variants *tv = &variants[tst_variant];
 
-	TEST_PAUSE;
-
-	tst_tmpdir();
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	bad_addr = tst_get_bad_addr(NULL);
+	new_value.type = tv->type;
 
 	clockfd = timerfd_create(CLOCK_REALTIME, 0);
-	if (clockfd == -1)
-		tst_brkm(TBROK | TERRNO, cleanup, "timerfd_create() fail");
-
-	fd = SAFE_OPEN(cleanup, "test_file", O_RDWR | O_CREAT, 0644);
-}
-
-static void timerfd_settime_verify(const struct test_case_t *test)
-{
-	TEST(timerfd_settime(*test->fd, test->flags, &new_value,
-			     test->old_value));
-
-	if (TEST_RETURN != -1) {
-		tst_resm(TFAIL, "timerfd_settime() succeeded unexpectedly");
+	if (clockfd == -1) {
+		tst_brk(TFAIL | TERRNO, "timerfd_create() fail");
 		return;
 	}
 
-	if (TEST_ERRNO == test->exp_errno) {
-		tst_resm(TPASS | TTERRNO,
-			 "timerfd_settime() failed as expected");
-	} else {
-		tst_resm(TFAIL | TTERRNO,
-			 "timerfd_settime() failed unexpectedly; expected: "
-			 "%d - %s", test->exp_errno, strerror(test->exp_errno));
-	}
+	fd = SAFE_OPEN("test_file", O_RDWR | O_CREAT, 0644);
 }
 
 static void cleanup(void)
@@ -122,6 +75,43 @@ static void cleanup(void)
 
 	if (fd > 0)
 		close(fd);
+}
+
+static void run(unsigned int n)
+{
+	struct test_variants *tv = &variants[tst_variant];
+	struct test_case_t *test = &test_cases[n];
+	void *its;
+
+	if (test->exp_errno == EFAULT)
+		its = bad_addr;
+	else
+		its = tst_its_get(test->old_value);
 
-	tst_rmdir();
+	TEST(tv->tfd_settime(*test->fd, test->flags, tst_its_get(&new_value),
+			     its));
+
+	if (TST_RET != -1) {
+		tst_res(TFAIL, "timerfd_settime() succeeded unexpectedly");
+		return;
+	}
+
+	if (TST_ERR == test->exp_errno) {
+		tst_res(TPASS | TTERRNO,
+			"timerfd_settime() failed as expected");
+	} else {
+		tst_res(TFAIL | TTERRNO,
+			"timerfd_settime() failed unexpectedly; expected: "
+			"%d - %s", test->exp_errno, strerror(test->exp_errno));
+	}
 }
+
+static struct tst_test test = {
+	.test = run,
+	.tcnt = ARRAY_SIZE(test_cases),
+	.test_variants = ARRAY_SIZE(variants),
+	.setup = setup,
+	.cleanup = cleanup,
+	.needs_tmpdir = 1,
+	.min_kver = "2.6.25",
+};
diff --git a/testcases/kernel/syscalls/timerfd/timerfd_settime02.c b/testcases/kernel/syscalls/timerfd/timerfd_settime02.c
index 0565802f4288..c15b69dca9ca 100644
--- a/testcases/kernel/syscalls/timerfd/timerfd_settime02.c
+++ b/testcases/kernel/syscalls/timerfd/timerfd_settime02.c
@@ -15,8 +15,8 @@
  *  timerfd: Protect the might cancel mechanism proper
  */
 #include <unistd.h>
+#include "tst_timer.h"
 #include "tst_safe_timerfd.h"
-#include "tst_test.h"
 #include "tst_fuzzy_sync.h"
 #include "tst_taint.h"
 
@@ -27,11 +27,30 @@
 #endif
 
 static int fd = -1;
-static struct itimerspec its;
+static struct tst_its its;
 static struct tst_fzsync_pair fzsync_pair;
 
+static struct test_variants {
+	int (*tfd_settime)(int fd, int flags, void *new_value, void *old_value);
+	enum tst_ts_type type;
+	char *desc;
+} variants[] = {
+#if (__NR_timerfd_settime != __LTP__NR_INVALID_SYSCALL)
+	{ .tfd_settime = sys_timerfd_settime, .type = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_timerfd_settime64 != __LTP__NR_INVALID_SYSCALL)
+	{ .tfd_settime = sys_timerfd_settime64, .type = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
 static void setup(void)
 {
+	struct test_variants *tv = &variants[tst_variant];
+
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	its.type = tv->type;
+
 	tst_taint_init(TST_TAINT_W | TST_TAINT_D);
 	fd = SAFE_TIMERFD_CREATE(CLOCK_REALTIME, 0);
 
@@ -48,7 +67,9 @@ static void cleanup(void)
 
 static int punch_clock(int flags)
 {
-	return timerfd_settime(fd, flags, &its, NULL);
+	return variants[tst_variant].tfd_settime(fd, flags, tst_its_get(&its),
+						 NULL);
+
 }
 
 static void *thread_run(void *arg)
@@ -91,6 +112,7 @@ static void run(void)
 
 static struct tst_test test = {
 	.test_all = run,
+	.test_variants = ARRAY_SIZE(variants),
 	.setup = setup,
 	.cleanup = cleanup,
 	.min_kver = "2.6.25",
-- 
2.25.0.rc1.19.g042ed3e048af


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V4 04/17] syscalls/sched_rr_get_interval: Add support for time64 tests
  2020-05-22 10:51 [LTP] [PATCH V4 00/17] Syscalls: Add support for time64 variants Viresh Kumar
                   ` (2 preceding siblings ...)
  2020-05-22 10:51 ` [LTP] [PATCH V4 03/17] syscalls/timerfd: " Viresh Kumar
@ 2020-05-22 10:51 ` Viresh Kumar
  2020-05-22 10:51 ` [LTP] [PATCH V4 05/17] syscalls/futex: Merge futex_wait_bitset tests Viresh Kumar
                   ` (12 subsequent siblings)
  16 siblings, 0 replies; 33+ messages in thread
From: Viresh Kumar @ 2020-05-22 10:51 UTC (permalink / raw)
  To: ltp

This adds support for time64 tests to the existing
sched_rr_get_interval() syscall tests.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 include/tst_timer.h                           |  16 ++
 .../sched_rr_get_interval01.c                 | 116 ++++++--------
 .../sched_rr_get_interval02.c                 | 122 ++++++---------
 .../sched_rr_get_interval03.c                 | 146 ++++++++----------
 4 files changed, 173 insertions(+), 227 deletions(-)

diff --git a/include/tst_timer.h b/include/tst_timer.h
index bb24636b015a..7e15b9821d5a 100644
--- a/include/tst_timer.h
+++ b/include/tst_timer.h
@@ -12,6 +12,7 @@
 #ifndef TST_TIMER
 #define TST_TIMER
 
+#include <sched.h>
 #include <sys/time.h>
 #include <time.h>
 #include "tst_test.h"
@@ -247,6 +248,21 @@ static inline int sys_clock_nanosleep64(clockid_t clk_id, int flags,
 			   request, remain);
 }
 
+static inline int libc_sched_rr_get_interval(pid_t pid, void *ts)
+{
+	return sched_rr_get_interval(pid, ts);
+}
+
+static inline int sys_sched_rr_get_interval(pid_t pid, void *ts)
+{
+	return tst_syscall(__NR_sched_rr_get_interval, pid, ts);
+}
+
+static inline int sys_sched_rr_get_interval64(pid_t pid, void *ts)
+{
+	return tst_syscall(__NR_sched_rr_get_interval_time64, pid, ts);
+}
+
 static inline int sys_timer_gettime(timer_t timerid, void *its)
 {
 	return tst_syscall(__NR_timer_gettime, timerid, its);
diff --git a/testcases/kernel/syscalls/sched_rr_get_interval/sched_rr_get_interval01.c b/testcases/kernel/syscalls/sched_rr_get_interval/sched_rr_get_interval01.c
index b6084f673ca7..9bad698aa6ec 100644
--- a/testcases/kernel/syscalls/sched_rr_get_interval/sched_rr_get_interval01.c
+++ b/testcases/kernel/syscalls/sched_rr_get_interval/sched_rr_get_interval01.c
@@ -1,20 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (c) Wipro Technologies Ltd, 2002.  All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- */
-/**********************************************************
  *
  *    TEST IDENTIFIER	: sched_rr_get_interval01
  *
@@ -62,81 +48,69 @@
  *				-P x : Pause for x seconds between iterations.
  *				-t   : Turn on syscall timing.
  *
- ****************************************************************/
+ */
 
-#include <errno.h>
 #include <sched.h>
-#include "test.h"
-
-static void setup();
-static void cleanup();
-
-char *TCID = "sched_rr_get_interval01";
-int TST_TOTAL = 1;
-
-struct timespec tp;
-
-int main(int ac, char **av)
-{
-
-	int lc;
-
-	tst_parse_opts(ac, av, NULL, NULL);
+#include "tst_timer.h"
 
-	setup();
+struct tst_ts tp;
 
-	for (lc = 0; TEST_LOOPING(lc); lc++) {
+static struct test_variants {
+	int (*func)(pid_t pid, void *ts);
+	enum tst_ts_type type;
+	char *desc;
+} variants[] = {
+	{ .func = libc_sched_rr_get_interval, .type = TST_LIBC_TIMESPEC, .desc = "vDSO or syscall with libc spec"},
 
-		tst_count = 0;
+#if (__NR_sched_rr_get_interval != __LTP__NR_INVALID_SYSCALL)
+	{ .func = sys_sched_rr_get_interval, .type = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
 
-		/*
-		 * Call sched_rr_get_interval(2) with pid=0 so that it will
-		 * write into the timespec structure pointed to by tp, the
-		 * round robin time quantum for the current process.
-		 */
-		TEST(sched_rr_get_interval(0, &tp));
+#if (__NR_sched_rr_get_interval_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .func = sys_sched_rr_get_interval64, .type = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
 
-		if (TEST_RETURN == 0) {
-			tst_resm(TPASS, "sched_rr_get_interval() returned %ld",
-				 TEST_RETURN);
-		} else {
-			tst_resm(TFAIL | TTERRNO,
-				 "Test Failed, sched_rr_get_interval()"
-				 "returned %ld", TEST_RETURN);
-		}
-	}
-
-	/* cleanup and exit */
-	cleanup();
-	tst_exit();
-
-}
-
-/* setup() - performs all ONE TIME setup for this test */
-void setup(void)
+static void setup(void)
 {
-	tst_require_root();
+	struct test_variants *tv = &variants[tst_variant];
 	/*
 	 * Initialize scheduling parameter structure to use with
 	 * sched_setscheduler()
 	 */
 	struct sched_param p = { 1 };
 
-	tst_sig(NOFORK, DEF_HANDLER, cleanup);
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
 
-	TEST_PAUSE;
+	tp.type = tv->type;
 
 	/* Change scheduling policy to SCHED_RR */
-	if ((sched_setscheduler(0, SCHED_RR, &p)) == -1) {
-		tst_brkm(TBROK, cleanup, "sched_setscheduler() failed");
-	}
+	if ((sched_setscheduler(0, SCHED_RR, &p)) == -1)
+		tst_res(TFAIL | TTERRNO, "sched_setscheduler() failed");
 }
 
-/*
- *cleanup() -  performs all ONE TIME cleanup for this test at
- *		completion or premature exit.
- */
-void cleanup(void)
+static void run(void)
 {
+	struct test_variants *tv = &variants[tst_variant];
+
+	/*
+	 * Call sched_rr_get_interval(2) with pid=0 so that it will
+	 * write into the timespec structure pointed to by tp, the
+	 * round robin time quantum for the current process.
+	 */
+	TEST(tv->func(0, tst_ts_get(&tp)));
 
+	if (!TST_RET) {
+		tst_res(TPASS, "sched_rr_get_interval() passed");
+	} else {
+		tst_res(TFAIL | TTERRNO, "Test Failed, sched_rr_get_interval() returned %ld",
+			TST_RET);
+	}
 }
+
+static struct tst_test test = {
+	.test_all = run,
+	.test_variants = ARRAY_SIZE(variants),
+	.setup = setup,
+	.needs_root = 1,
+};
diff --git a/testcases/kernel/syscalls/sched_rr_get_interval/sched_rr_get_interval02.c b/testcases/kernel/syscalls/sched_rr_get_interval/sched_rr_get_interval02.c
index 6bf743f78c5e..8da42e97404b 100644
--- a/testcases/kernel/syscalls/sched_rr_get_interval/sched_rr_get_interval02.c
+++ b/testcases/kernel/syscalls/sched_rr_get_interval/sched_rr_get_interval02.c
@@ -1,20 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (c) Wipro Technologies Ltd, 2002.  All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- */
-/**********************************************************
  *
  *    TEST IDENTIFIER	: sched_rr_get_interval02
  *
@@ -63,84 +49,72 @@
  *				-P x : Pause for x seconds between iterations.
  *				-t   : Turn on syscall timing.
  *
- ****************************************************************/
+ */
 
-#include <errno.h>
 #include <sched.h>
-#include "test.h"
-
-static void setup();
-static void cleanup();
+#include "tst_timer.h"
 
-char *TCID = "sched_rr_get_interval02";
-int TST_TOTAL = 1;
+struct tst_ts tp;
 
-struct timespec tp;
+static struct test_variants {
+	int (*func)(pid_t pid, void *ts);
+	enum tst_ts_type type;
+	char *desc;
+} variants[] = {
+	{ .func = libc_sched_rr_get_interval, .type = TST_LIBC_TIMESPEC, .desc = "vDSO or syscall with libc spec"},
 
-int main(int ac, char **av)
-{
-
-	int lc;
-
-	tst_parse_opts(ac, av, NULL, NULL);
-
-	setup();
+#if (__NR_sched_rr_get_interval != __LTP__NR_INVALID_SYSCALL)
+	{ .func = sys_sched_rr_get_interval, .type = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
 
-	for (lc = 0; TEST_LOOPING(lc); lc++) {
+#if (__NR_sched_rr_get_interval_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .func = sys_sched_rr_get_interval64, .type = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
 
-		tst_count = 0;
-
-		tp.tv_sec = 99;
-		tp.tv_nsec = 99;
-		/*
-		 * Call sched_rr_get_interval(2) with pid=0 sothat it will
-		 * write into the timespec structure pointed to by tp the
-		 * round robin time quantum for the current process.
-		 */
-		TEST(sched_rr_get_interval(0, &tp));
-
-		if ((TEST_RETURN == 0) && (tp.tv_sec == 0) && (tp.tv_nsec == 0)) {
-			tst_resm(TPASS, "Test passed");
-		} else {
-			tst_resm(TFAIL, "Test Failed, sched_rr_get_interval()"
-				 "returned %ld, errno = %d : %s, tp.tv_sec = %d,"
-				 " tp.tv_nsec = %ld", TEST_RETURN, TEST_ERRNO,
-				 strerror(TEST_ERRNO), (int)tp.tv_sec,
-				 tp.tv_nsec);
-		}
-	}
-
-	/* cleanup and exit */
-	cleanup();
-	tst_exit();
-
-}
-
-/* setup() - performs all ONE TIME setup for this test */
-void setup(void)
+static void setup(void)
 {
-	tst_require_root();
+	struct test_variants *tv = &variants[tst_variant];
 	/*
 	 * Initialize scheduling parameter structure to use with
 	 * sched_setscheduler()
 	 */
 	struct sched_param p = { 1 };
 
-	tst_sig(NOFORK, DEF_HANDLER, cleanup);
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
 
-	TEST_PAUSE;
+	tp.type = tv->type;
 
 	/* Change scheduling policy to SCHED_FIFO */
-	if ((sched_setscheduler(0, SCHED_FIFO, &p)) == -1) {
-		tst_brkm(TBROK, cleanup, "sched_setscheduler() failed");
-	}
+	if ((sched_setscheduler(0, SCHED_FIFO, &p)) == -1)
+		tst_res(TFAIL | TTERRNO, "sched_setscheduler() failed");
 }
 
-/*
- *cleanup() -  performs all ONE TIME cleanup for this test at
- *		completion or premature exit.
- */
-void cleanup(void)
+static void run(void)
 {
+	struct test_variants *tv = &variants[tst_variant];
 
+	tst_ts_set_sec(&tp, 99);
+	tst_ts_set_nsec(&tp, 99);
+
+	/*
+	 * Call sched_rr_get_interval(2) with pid=0 so that it will
+	 * write into the timespec structure pointed to by tp the
+	 * round robin time quantum for the current process.
+	 */
+	TEST(tv->func(0, tst_ts_get(&tp)));
+
+	if (!TST_RET && tst_ts_valid(&tp) == -1) {
+		tst_res(TPASS, "sched_rr_get_interval() passed");
+	} else {
+		tst_res(TFAIL | TTERRNO, "Test Failed, sched_rr_get_interval() returned %ld, tp.tv_sec = %lld, tp.tv_nsec = %lld",
+			TST_RET, tst_ts_get_sec(tp), tst_ts_get_nsec(tp));
+	}
 }
+
+static struct tst_test test = {
+	.test_all = run,
+	.test_variants = ARRAY_SIZE(variants),
+	.setup = setup,
+	.needs_root = 1,
+};
diff --git a/testcases/kernel/syscalls/sched_rr_get_interval/sched_rr_get_interval03.c b/testcases/kernel/syscalls/sched_rr_get_interval/sched_rr_get_interval03.c
index 56f2fcf28269..0ccf47d2a561 100644
--- a/testcases/kernel/syscalls/sched_rr_get_interval/sched_rr_get_interval03.c
+++ b/testcases/kernel/syscalls/sched_rr_get_interval/sched_rr_get_interval03.c
@@ -1,20 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (c) Wipro Technologies Ltd, 2002.  All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- */
-/**********************************************************
  *
  *    TEST IDENTIFIER	: sched_rr_get_interval03
  *
@@ -68,104 +54,100 @@
  *				-P x : Pause for x seconds between iterations.
  *				-t   : Turn on syscall timing.
  *
- ****************************************************************/
+ */
 
-#include <errno.h>
 #include <sched.h>
-#include "test.h"
-
-static void setup();
-static void cleanup();
-
-char *TCID = "sched_rr_get_interval03";
-struct timespec tp;
+#include "tst_timer.h"
 
 static pid_t unused_pid;
 static pid_t inval_pid = -1;
 static pid_t zero_pid;
 
+struct tst_ts tp;
+static void *bad_addr;
+
 struct test_cases_t {
 	pid_t *pid;
-	struct timespec *tp;
+	struct tst_ts *tp;
 	int exp_errno;
 } test_cases[] = {
-	{
-	&inval_pid, &tp, EINVAL}, {
-	&unused_pid, &tp, ESRCH},
+	{ &inval_pid, &tp, EINVAL},
+	{ &unused_pid, &tp, ESRCH},
 #ifndef UCLINUX
-	    /* Skip since uClinux does not implement memory protection */
-	{
-	&zero_pid, (struct timespec *)-1, EFAULT}
+	/* Skip since uClinux does not implement memory protection */
+	{ &zero_pid, NULL, EFAULT}
 #endif
 };
 
-int TST_TOTAL = sizeof(test_cases) / sizeof(test_cases[0]);
+static struct test_variants {
+	int (*func)(pid_t pid, void *ts);
+	enum tst_ts_type type;
+	char *desc;
+} variants[] = {
+	{ .func = libc_sched_rr_get_interval, .type = TST_LIBC_TIMESPEC, .desc = "vDSO or syscall with libc spec"},
 
-int main(int ac, char **av)
-{
-
-	int lc, i;
-
-	tst_parse_opts(ac, av, NULL, NULL);
-
-	setup();
-
-	for (lc = 0; TEST_LOOPING(lc); lc++) {
-
-		tst_count = 0;
-
-		for (i = 0; i < TST_TOTAL; ++i) {
-			/*
-			 * Call sched_rr_get_interval(2)
-			 */
-			TEST(sched_rr_get_interval(*(test_cases[i].pid),
-						   test_cases[i].tp));
-
-			if ((TEST_RETURN == -1) &&
-			    (TEST_ERRNO == test_cases[i].exp_errno)) {
-				tst_resm(TPASS, "Test Passed");
-			} else {
-				tst_resm(TFAIL | TTERRNO, "Test Failed,"
-					 " sched_rr_get_interval() returned %ld",
-					 TEST_RETURN);
-			}
-		}
-	}
-
-	/* cleanup and exit */
-	cleanup();
-
-	tst_exit();
+#if (__NR_sched_rr_get_interval != __LTP__NR_INVALID_SYSCALL)
+	{ .func = sys_sched_rr_get_interval, .type = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
 
-}
+#if (__NR_sched_rr_get_interval_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .func = sys_sched_rr_get_interval64, .type = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
 
-/* setup() - performs all ONE TIME setup for this test */
-void setup(void)
+static void setup(void)
 {
-	tst_require_root();
+	struct test_variants *tv = &variants[tst_variant];
 	/*
 	 * Initialize scheduling parameter structure to use with
 	 * sched_setscheduler()
 	 */
 	struct sched_param p = { 1 };
 
-	tst_sig(NOFORK, DEF_HANDLER, cleanup);
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
 
-	TEST_PAUSE;
+	bad_addr = tst_get_bad_addr(NULL);
+	tp.type = tv->type;
 
 	/* Change scheduling policy to SCHED_RR */
-	if ((sched_setscheduler(0, SCHED_RR, &p)) == -1) {
-		tst_brkm(TBROK, cleanup, "sched_setscheduler() failed");
-	}
+	if ((sched_setscheduler(0, SCHED_RR, &p)) == -1)
+		tst_res(TFAIL | TTERRNO, "sched_setscheduler() failed");
 
-	unused_pid = tst_get_unused_pid(cleanup);
+	unused_pid = tst_get_unused_pid();
 }
 
-/*
- *cleanup() -  performs all ONE TIME cleanup for this test at
- *		completion or premature exit.
- */
-void cleanup(void)
+static void run(unsigned int i)
 {
+	struct test_variants *tv = &variants[tst_variant];
+	struct test_cases_t *tc = &test_cases[i];
+	struct timerspec *ts;
 
+	if (tc->exp_errno == EFAULT)
+		ts = bad_addr;
+	else
+		ts = tst_ts_get(tc->tp);
+
+	/*
+	 * Call sched_rr_get_interval(2)
+	 */
+	TEST(tv->func(*tc->pid, ts));
+
+	if (TST_RET != -1) {
+		tst_res(TFAIL, "sched_rr_get_interval() passed unexcpectedly");
+		return;
+	}
+
+	if (tc->exp_errno == TST_ERR)
+		tst_res(TPASS | TTERRNO, "sched_rr_get_interval() failed as excpected");
+	else
+		tst_res(TFAIL | TTERRNO, "sched_rr_get_interval() failed unexcpectedly: %s",
+			tst_strerrno(tc->exp_errno));
 }
+
+static struct tst_test test = {
+	.test = run,
+	.tcnt = ARRAY_SIZE(test_cases),
+	.test_variants = ARRAY_SIZE(variants),
+	.setup = setup,
+	.needs_root = 1,
+};
-- 
2.25.0.rc1.19.g042ed3e048af


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V4 05/17] syscalls/futex: Merge futex_wait_bitset tests
  2020-05-22 10:51 [LTP] [PATCH V4 00/17] Syscalls: Add support for time64 variants Viresh Kumar
                   ` (3 preceding siblings ...)
  2020-05-22 10:51 ` [LTP] [PATCH V4 04/17] syscalls/sched_rr_get_interval: " Viresh Kumar
@ 2020-05-22 10:51 ` Viresh Kumar
  2020-05-22 10:51 ` [LTP] [PATCH V4 06/17] syscalls/futex: Add support for time64 tests Viresh Kumar
                   ` (11 subsequent siblings)
  16 siblings, 0 replies; 33+ messages in thread
From: Viresh Kumar @ 2020-05-22 10:51 UTC (permalink / raw)
  To: ltp

We can handle them easily in a single test, lets do it.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Petr Vorel <pvorel@suse.cz>
---
 runtest/syscalls                              |  1 -
 testcases/kernel/syscalls/futex/.gitignore    |  1 -
 testcases/kernel/syscalls/futex/Makefile      |  1 -
 .../kernel/syscalls/futex/futex_wait_bitset.h | 75 -------------------
 .../syscalls/futex/futex_wait_bitset01.c      | 73 +++++++++++++++++-
 .../syscalls/futex/futex_wait_bitset02.c      | 18 -----
 6 files changed, 71 insertions(+), 98 deletions(-)
 delete mode 100644 testcases/kernel/syscalls/futex/futex_wait_bitset.h
 delete mode 100644 testcases/kernel/syscalls/futex/futex_wait_bitset02.c

diff --git a/runtest/syscalls b/runtest/syscalls
index edd3e8de7861..4a19075cd131 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls
@@ -1664,7 +1664,6 @@ futex_wake02 futex_wake02
 futex_wake03 futex_wake03
 futex_wake04 futex_wake04
 futex_wait_bitset01 futex_wait_bitset01
-futex_wait_bitset02 futex_wait_bitset02
 
 memfd_create01 memfd_create01
 memfd_create02 memfd_create02
diff --git a/testcases/kernel/syscalls/futex/.gitignore b/testcases/kernel/syscalls/futex/.gitignore
index 68bc2028e1b2..54cd02b0223f 100644
--- a/testcases/kernel/syscalls/futex/.gitignore
+++ b/testcases/kernel/syscalls/futex/.gitignore
@@ -6,7 +6,6 @@
 /futex_wait04
 /futex_wait05
 /futex_wait_bitset01
-/futex_wait_bitset02
 /futex_wake01
 /futex_wake02
 /futex_wake03
diff --git a/testcases/kernel/syscalls/futex/Makefile b/testcases/kernel/syscalls/futex/Makefile
index 8dd239301e63..c88af7c9643b 100644
--- a/testcases/kernel/syscalls/futex/Makefile
+++ b/testcases/kernel/syscalls/futex/Makefile
@@ -12,7 +12,6 @@ futex_wake02: CFLAGS+=-pthread
 futex_wake04: CFLAGS+=-pthread
 futex_wait05: LDLIBS+=-lrt
 futex_wait_bitset01: LDLIBS+=-lrt
-futex_wait_bitset02: LDLIBS+=-lrt
 
 include $(top_srcdir)/include/mk/testcases.mk
 include $(top_srcdir)/include/mk/generic_leaf_target.mk
diff --git a/testcases/kernel/syscalls/futex/futex_wait_bitset.h b/testcases/kernel/syscalls/futex/futex_wait_bitset.h
deleted file mode 100644
index 84712816bfe8..000000000000
--- a/testcases/kernel/syscalls/futex/futex_wait_bitset.h
+++ /dev/null
@@ -1,75 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-/*
- * Copyright (C) 2015 Cyril Hrubis <chrubis@suse.cz>
- */
-
-#define THRESHOLD_US 100000
-#define DEFAULT_TIMEOUT_US 100010
-
-static void verify_futex_wait_bitset(long long wait_us, clock_t clk_id)
-{
-	struct timespec start, to, end;
-	futex_t futex = FUTEX_INITIALIZER;
-	u_int32_t bitset = 0xffffffff;
-	int flags = clk_id == CLOCK_REALTIME ? FUTEX_CLOCK_REALTIME : 0;
-
-	tst_res(TINFO, "testing futex_wait_bitset() timeout with %s",
-		clk_id == CLOCK_REALTIME ? "CLOCK_REALTIME" : "CLOCK_MONOTONIC");
-
-	clock_gettime(clk_id, &start);
-	to = tst_timespec_add_us(start, wait_us);
-
-	TEST(futex_wait_bitset(&futex, futex, &to, bitset, flags));
-
-	clock_gettime(clk_id, &end);
-
-	if (TST_RET != -1) {
-		tst_res(TFAIL, "futex_wait_bitset() returned %li, expected -1",
-			TST_RET);
-		return;
-	}
-
-	if (TST_ERR == ENOSYS) {
-		tst_res(TCONF,
-			"In this kernel, futex() does not support FUTEX_WAIT_BITSET operation");
-		return;
-	}
-
-	if (TST_ERR != ETIMEDOUT) {
-		tst_res(TFAIL | TTERRNO, "expected %s",
-			tst_strerrno(ETIMEDOUT));
-		return;
-	}
-
-	if (tst_timespec_lt(end, to)) {
-		tst_res(TFAIL,
-			"futex_wait_bitset() woken up prematurely %llius, expected %llius",
-			tst_timespec_diff_us(end, start), wait_us);
-		return;
-	}
-
-	if (tst_timespec_diff_us(end, to) > THRESHOLD_US) {
-		tst_res(TFAIL,
-			"futex_wait_bitset() waited too long %llius, expected %llius",
-			tst_timespec_diff_us(end, start), wait_us);
-		return;
-	}
-
-	tst_res(TPASS, "futex_wait_bitset() waited %llius, expected %llius",
-		tst_timespec_diff_us(end, start), wait_us);
-}
-
-static void setup(void)
-{
-	tst_timer_check(USE_CLOCK);
-}
-
-static void run(void)
-{
-	verify_futex_wait_bitset(DEFAULT_TIMEOUT_US, USE_CLOCK);
-}
-
-static struct tst_test test = {
-	.setup = setup,
-	.test_all = run,
-};
diff --git a/testcases/kernel/syscalls/futex/futex_wait_bitset01.c b/testcases/kernel/syscalls/futex/futex_wait_bitset01.c
index 1ae3253cfe13..b8546c3e640c 100644
--- a/testcases/kernel/syscalls/futex/futex_wait_bitset01.c
+++ b/testcases/kernel/syscalls/futex/futex_wait_bitset01.c
@@ -13,7 +13,76 @@
 #include "tst_timer.h"
 #include "futextest.h"
 
-#define USE_CLOCK CLOCK_MONOTONIC
+#define THRESHOLD_US 100000
+#define DEFAULT_TIMEOUT_US 100010
 
-#include "futex_wait_bitset.h"
+static struct test_case_t {
+	clockid_t clk_id;
+} tcases[] = {
+	{ CLOCK_MONOTONIC },
+	{ CLOCK_REALTIME }
+};
 
+static void verify_futex_wait_bitset(long long wait_us, clock_t clk_id)
+{
+	struct timespec start, to, end;
+	futex_t futex = FUTEX_INITIALIZER;
+	u_int32_t bitset = 0xffffffff;
+	int flags = clk_id == CLOCK_REALTIME ? FUTEX_CLOCK_REALTIME : 0;
+
+	tst_res(TINFO, "testing futex_wait_bitset() timeout with %s",
+		clk_id == CLOCK_REALTIME ? "CLOCK_REALTIME" : "CLOCK_MONOTONIC");
+
+	clock_gettime(clk_id, &start);
+	to = tst_timespec_add_us(start, wait_us);
+
+	TEST(futex_wait_bitset(&futex, futex, &to, bitset, flags));
+
+	clock_gettime(clk_id, &end);
+
+	if (TST_RET != -1) {
+		tst_res(TFAIL, "futex_wait_bitset() returned %li, expected -1",
+			TST_RET);
+		return;
+	}
+
+	if (TST_ERR == ENOSYS) {
+		tst_res(TCONF,
+			"In this kernel, futex() does not support FUTEX_WAIT_BITSET operation");
+		return;
+	}
+
+	if (TST_ERR != ETIMEDOUT) {
+		tst_res(TFAIL | TTERRNO, "expected %s",
+			tst_strerrno(ETIMEDOUT));
+		return;
+	}
+
+	if (tst_timespec_lt(end, to)) {
+		tst_res(TFAIL,
+			"futex_wait_bitset() woken up prematurely %llius, expected %llius",
+			tst_timespec_diff_us(end, start), wait_us);
+		return;
+	}
+
+	if (tst_timespec_diff_us(end, to) > THRESHOLD_US) {
+		tst_res(TFAIL,
+			"futex_wait_bitset() waited too long %llius, expected %llius",
+			tst_timespec_diff_us(end, start), wait_us);
+		return;
+	}
+
+	tst_res(TPASS, "futex_wait_bitset() waited %llius, expected %llius",
+		tst_timespec_diff_us(end, start), wait_us);
+}
+
+static void run(unsigned int n)
+{
+	tst_timer_check(tcases[n].clk_id);
+	verify_futex_wait_bitset(DEFAULT_TIMEOUT_US, tcases[n].clk_id);
+}
+
+static struct tst_test test = {
+	.test = run,
+	.tcnt = ARRAY_SIZE(tcases),
+};
diff --git a/testcases/kernel/syscalls/futex/futex_wait_bitset02.c b/testcases/kernel/syscalls/futex/futex_wait_bitset02.c
deleted file mode 100644
index 4d532fc07775..000000000000
--- a/testcases/kernel/syscalls/futex/futex_wait_bitset02.c
+++ /dev/null
@@ -1,18 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-/*
- * Copyright (C) 2015 Cyril Hrubis <chrubis@suse.cz>
- *
- * 1. Block on a bitset futex and wait for timeout, the difference between
- *    normal futex and bitset futex is that that the later have absolute timeout.
- * 2. Check that the futex waited for expected time.
- */
-
-#include <errno.h>
-
-#include "tst_test.h"
-#include "tst_timer.h"
-#include "futextest.h"
-
-#define USE_CLOCK CLOCK_REALTIME
-
-#include "futex_wait_bitset.h"
-- 
2.25.0.rc1.19.g042ed3e048af


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V4 06/17] syscalls/futex: Add support for time64 tests
  2020-05-22 10:51 [LTP] [PATCH V4 00/17] Syscalls: Add support for time64 variants Viresh Kumar
                   ` (4 preceding siblings ...)
  2020-05-22 10:51 ` [LTP] [PATCH V4 05/17] syscalls/futex: Merge futex_wait_bitset tests Viresh Kumar
@ 2020-05-22 10:51 ` Viresh Kumar
  2020-06-09 12:55   ` Li Wang
  2020-06-10  3:35   ` [LTP] [PATCH V5 " Viresh Kumar
  2020-05-22 10:51 ` [LTP] [PATCH V4 07/17] syscalls/io_pgetevents: " Viresh Kumar
                   ` (10 subsequent siblings)
  16 siblings, 2 replies; 33+ messages in thread
From: Viresh Kumar @ 2020-05-22 10:51 UTC (permalink / raw)
  To: ltp

This adds support for time64 tests to the existing futex() syscall
tests.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Petr Vorel <pvorel@suse.cz>
---
 include/tst_timer.h                           |  12 ++
 .../syscalls/futex/futex_cmp_requeue01.c      |  34 +++-
 .../syscalls/futex/futex_cmp_requeue02.c      |  24 ++-
 testcases/kernel/syscalls/futex/futex_utils.h |  52 +++++--
 .../kernel/syscalls/futex/futex_wait01.c      |  79 +++++-----
 .../kernel/syscalls/futex/futex_wait02.c      | 102 ++++++------
 .../kernel/syscalls/futex/futex_wait03.c      |  87 ++++++-----
 .../kernel/syscalls/futex/futex_wait04.c      |  81 +++++-----
 .../kernel/syscalls/futex/futex_wait05.c      |   2 +-
 .../syscalls/futex/futex_wait_bitset01.c      |  48 ++++--
 .../kernel/syscalls/futex/futex_wake01.c      |  67 ++++----
 .../kernel/syscalls/futex/futex_wake02.c      |  95 ++++++------
 .../kernel/syscalls/futex/futex_wake03.c      | 109 +++++++------
 .../kernel/syscalls/futex/futex_wake04.c      | 146 +++++++++---------
 testcases/kernel/syscalls/futex/futextest.h   | 122 ++++++++++-----
 15 files changed, 593 insertions(+), 467 deletions(-)

diff --git a/include/tst_timer.h b/include/tst_timer.h
index 7e15b9821d5a..11869257c3d7 100644
--- a/include/tst_timer.h
+++ b/include/tst_timer.h
@@ -248,6 +248,18 @@ static inline int sys_clock_nanosleep64(clockid_t clk_id, int flags,
 			   request, remain);
 }
 
+static inline int sys_futex(int *uaddr, int futex_op, int val, void *to,
+			    int *uaddr2, int val3)
+{
+	return tst_syscall(__NR_futex, uaddr, futex_op, val, to, uaddr2, val3);
+}
+
+static inline int sys_futex_time64(int *uaddr, int futex_op, int val, void *to,
+				   int *uaddr2, int val3)
+{
+	return tst_syscall(__NR_futex_time64, uaddr, futex_op, val, to, uaddr2, val3);
+}
+
 static inline int libc_sched_rr_get_interval(pid_t pid, void *ts)
 {
 	return sched_rr_get_interval(pid, ts);
diff --git a/testcases/kernel/syscalls/futex/futex_cmp_requeue01.c b/testcases/kernel/syscalls/futex/futex_cmp_requeue01.c
index c50fade9f969..537641766357 100644
--- a/testcases/kernel/syscalls/futex/futex_cmp_requeue01.c
+++ b/testcases/kernel/syscalls/futex/futex_cmp_requeue01.c
@@ -42,14 +42,29 @@ static struct tcase {
 	{1000, 300, 500},
 };
 
+static struct test_variants {
+	enum futex_fn_type fntype;
+	enum tst_ts_type tstype;
+	char *desc;
+} variants[] = {
+#if (__NR_futex != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX, .tstype = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_futex_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX64, .tstype = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
 static void do_child(void)
 {
+	struct test_variants *tv = &variants[tst_variant];
+	struct tst_ts usec = tst_ts_from_ms(tv->tstype, max_sleep_ms);
 	int slept_for_ms = 0;
-	struct timespec usec = tst_timespec_from_ms(max_sleep_ms);
 	int pid = getpid();
 	int ret = 0;
 
-	if (futex_wait(&sd->futexes[0], sd->futexes[0], &usec, 0) == -1) {
+	if (futex_wait(tv->fntype, &sd->futexes[0], sd->futexes[0], &usec, 0) == -1) {
 		if (errno == EAGAIN) {
 			/* spurious wakeup or signal */
 			tst_atomic_inc(&sd->spurious);
@@ -72,6 +87,7 @@ static void do_child(void)
 
 static void verify_futex_cmp_requeue(unsigned int n)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	int num_requeues = 0, num_waits = 0, num_total = 0;
 	int i, status, spurious, woken_up;
 	struct tcase *tc = &tcases[n];
@@ -104,8 +120,8 @@ static void verify_futex_cmp_requeue(unsigned int n)
 	 * specifies an upper limit on the number of waiters that are requeued.
 	 * Returns the total number of waiters that were woken up or requeued.
 	 */
-	TEST(futex_cmp_requeue(&sd->futexes[0], sd->futexes[0], &sd->futexes[1],
-		tc->set_wakes, tc->set_requeues, 0));
+	TEST(futex_cmp_requeue(tv->fntype, &sd->futexes[0], sd->futexes[0],
+			&sd->futexes[1], tc->set_wakes, tc->set_requeues, 0));
 
 	/* Fail if more than requested wakes + requeues were returned */
 	if (TST_RET > exp_ret) {
@@ -115,8 +131,8 @@ static void verify_futex_cmp_requeue(unsigned int n)
 		tst_res(TINFO, "futex_cmp_requeue() returned %ld", TST_RET);
 	}
 
-	num_requeues = futex_wake(&sd->futexes[1], tc->num_waiters, 0);
-	num_waits = futex_wake(&sd->futexes[0], tc->num_waiters, 0);
+	num_requeues = futex_wake(tv->fntype, &sd->futexes[1], tc->num_waiters, 0);
+	num_waits = futex_wake(tv->fntype, &sd->futexes[0], tc->num_waiters, 0);
 
 	tst_atomic_store(1, &sd->test_done);
 	for (i = 0; i < tc->num_waiters; i++) {
@@ -178,6 +194,11 @@ static void verify_futex_cmp_requeue(unsigned int n)
 
 static void setup(void)
 {
+	struct test_variants *tv = &variants[tst_variant];
+
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	futex_supported_by_kernel(tv->fntype);
+
 	max_sleep_ms = tst_multiply_timeout(5000);
 
 	sd = SAFE_MMAP(NULL, sizeof(*sd), PROT_READ | PROT_WRITE,
@@ -198,5 +219,6 @@ static struct tst_test test = {
 	.cleanup = cleanup,
 	.tcnt = ARRAY_SIZE(tcases),
 	.test = verify_futex_cmp_requeue,
+	.test_variants = ARRAY_SIZE(variants),
 	.forks_child = 1,
 };
diff --git a/testcases/kernel/syscalls/futex/futex_cmp_requeue02.c b/testcases/kernel/syscalls/futex/futex_cmp_requeue02.c
index 228d8cff6ea0..dd8fafb3ee38 100644
--- a/testcases/kernel/syscalls/futex/futex_cmp_requeue02.c
+++ b/testcases/kernel/syscalls/futex/futex_cmp_requeue02.c
@@ -32,12 +32,26 @@ static struct tcase {
 	{1, 1, FUTEX_INITIALIZER + 1, EAGAIN},
 };
 
+static struct test_variants {
+	enum futex_fn_type fntype;
+	char *desc;
+} variants[] = {
+#if (__NR_futex != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_futex_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX64, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
 static void verify_futex_cmp_requeue(unsigned int n)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	struct tcase *tc = &tcases[n];
 
-	TEST(futex_cmp_requeue(&futexes[0], tc->exp_val, &futexes[1],
-	     tc->set_wakes, tc->set_requeues, 0));
+	TEST(futex_cmp_requeue(tv->fntype, &futexes[0], tc->exp_val,
+			&futexes[1], tc->set_wakes, tc->set_requeues, 0));
 	if (TST_RET != -1) {
 		tst_res(TFAIL, "futex_cmp_requeue() succeeded unexpectedly");
 		return;
@@ -55,6 +69,11 @@ static void verify_futex_cmp_requeue(unsigned int n)
 
 static void setup(void)
 {
+	struct test_variants *tv = &variants[tst_variant];
+
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	futex_supported_by_kernel(tv->fntype);
+
 	futexes = SAFE_MMAP(NULL, sizeof(futex_t) * 2, PROT_READ | PROT_WRITE,
 			    MAP_ANONYMOUS | MAP_SHARED, -1, 0);
 
@@ -73,6 +92,7 @@ static struct tst_test test = {
 	.cleanup = cleanup,
 	.test = verify_futex_cmp_requeue,
 	.tcnt = ARRAY_SIZE(tcases),
+	.test_variants = ARRAY_SIZE(variants),
 	.tags = (const struct tst_tag[]) {
 		{"CVE", "2018-6927"},
 		{"linux-git", "fbe0e839d1e2"},
diff --git a/testcases/kernel/syscalls/futex/futex_utils.h b/testcases/kernel/syscalls/futex/futex_utils.h
index 63b97c00b631..f77b9d6b3b8a 100644
--- a/testcases/kernel/syscalls/futex/futex_utils.h
+++ b/testcases/kernel/syscalls/futex/futex_utils.h
@@ -20,10 +20,13 @@
 #ifndef FUTEX_UTILS_H__
 #define FUTEX_UTILS_H__
 
+#include <stdio.h>
+#include <stdlib.h>
+
 /*
  * Wait for nr_threads to be sleeping
  */
-static int wait_for_threads(unsigned int nr_threads)
+static inline int wait_for_threads(unsigned int nr_threads)
 {
 	char thread_state, name[1024];
 	DIR *dir;
@@ -32,34 +35,63 @@ static int wait_for_threads(unsigned int nr_threads)
 
 	snprintf(name, sizeof(name), "/proc/%i/task/", getpid());
 
-	dir = SAFE_OPENDIR(NULL, name);
+	dir = SAFE_OPENDIR(name);
 
-	while ((dent = SAFE_READDIR(NULL, dir))) {
+	while ((dent = SAFE_READDIR(dir))) {
 		/* skip ".", ".." and the main thread */
 		if (atoi(dent->d_name) == getpid() || atoi(dent->d_name) == 0)
 			continue;
 
 		snprintf(name, sizeof(name), "/proc/%i/task/%s/stat",
-		         getpid(), dent->d_name);
+			 getpid(), dent->d_name);
 
-		SAFE_FILE_SCANF(NULL, name, "%*i %*s %c", &thread_state);
+		SAFE_FILE_SCANF(name, "%*i %*s %c", &thread_state);
 
 		if (thread_state != 'S') {
-			tst_resm(TINFO, "Thread %s not sleeping yet", dent->d_name);
-			SAFE_CLOSEDIR(NULL, dir);
+			tst_res(TINFO, "Thread %s not sleeping yet", dent->d_name);
+			SAFE_CLOSEDIR(dir);
 			return 1;
 		}
 		cnt++;
 	}
 
-	SAFE_CLOSEDIR(NULL, dir);
+	SAFE_CLOSEDIR(dir);
 
 	if (cnt != nr_threads) {
-		tst_resm(TINFO, "%u threads sleeping, expected %u",
-	                  cnt, nr_threads);
+		tst_res(TINFO, "%u threads sleeping, expected %u", cnt,
+			nr_threads);
 	}
 
 	return 0;
 }
 
+static inline int process_state_wait2(pid_t pid, const char state)
+{
+	char proc_path[128], cur_state;
+
+	snprintf(proc_path, sizeof(proc_path), "/proc/%i/stat", pid);
+
+	for (;;) {
+		FILE *f = fopen(proc_path, "r");
+		if (!f) {
+			tst_res(TFAIL, "Failed to open '%s': %s\n", proc_path,
+				strerror(errno));
+			return 1;
+		}
+
+		if (fscanf(f, "%*i %*s %c", &cur_state) != 1) {
+			fclose(f);
+			tst_res(TFAIL, "Failed to read '%s': %s\n", proc_path,
+				strerror(errno));
+			return 1;
+		}
+		fclose(f);
+
+		if (state == cur_state)
+			return 0;
+
+		usleep(10000);
+	}
+}
+
 #endif /* FUTEX_UTILS_H__ */
diff --git a/testcases/kernel/syscalls/futex/futex_wait01.c b/testcases/kernel/syscalls/futex/futex_wait01.c
index 51a540d9e315..e884e696ef55 100644
--- a/testcases/kernel/syscalls/futex/futex_wait01.c
+++ b/testcases/kernel/syscalls/futex/futex_wait01.c
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (C) 2015 Cyril Hrubis <chrubis@suse.cz>
  *
@@ -5,34 +6,15 @@
  * written by Darren Hart <dvhltc@us.ibm.com>
  *            Gowrishankar <gowrishankar.m@in.ibm.com>
  *
- * Licensed under the GNU GPLv2 or later.
- * This program is free software;  you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY;  without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program;  if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * 1. Block on a futex and wait for timeout.
+ * 2. Test if FUTEX_WAIT op returns -EWOULDBLOCK if the futex value differs
+ *    from the expected one.
  */
- /*
-  * 1. Block on a futex and wait for timeout.
-  * 2. Test if FUTEX_WAIT op returns -EWOULDBLOCK if the futex value differs
-  *    from the expected one.
-  */
 
 #include <errno.h>
 
-#include "test.h"
 #include "futextest.h"
 
-const char *TCID="futex_wait01";
-
 struct testcase {
 	futex_t *f_addr;
 	futex_t f_val;
@@ -41,7 +23,6 @@ struct testcase {
 };
 
 static futex_t futex = FUTEX_INITIALIZER;
-static struct timespec to = {.tv_sec = 0, .tv_nsec = 10000};
 
 static struct testcase testcases[] = {
 	{&futex, FUTEX_INITIALIZER, 0, ETIMEDOUT},
@@ -50,38 +31,58 @@ static struct testcase testcases[] = {
 	{&futex, FUTEX_INITIALIZER+1, FUTEX_PRIVATE_FLAG, EWOULDBLOCK},
 };
 
-const int TST_TOTAL=ARRAY_SIZE(testcases);
+static struct test_variants {
+	enum futex_fn_type fntype;
+	enum tst_ts_type tstype;
+	char *desc;
+} variants[] = {
+#if (__NR_futex != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX, .tstype = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_futex_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX64, .tstype = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
 
-static void verify_futex_wait(struct testcase *tc)
+static void run(unsigned int n)
 {
+	struct test_variants *tv = &variants[tst_variant];
+	struct testcase *tc = &testcases[n];
+	static struct tst_ts to;
 	int res;
 
-	res = futex_wait(tc->f_addr, tc->f_val, &to, tc->opflags);
+	to.type = tv->tstype;
+	tst_ts_set_sec(&to, 0);
+	tst_ts_set_nsec(&to, 10000);
+
+	res = futex_wait(tv->fntype, tc->f_addr, tc->f_val, &to, tc->opflags);
 
 	if (res != -1) {
-		tst_resm(TFAIL, "futex_wait() returned %i, expected -1", res);
+		tst_res(TFAIL, "futex_wait() succeeded unexpectedly");
 		return;
 	}
 
 	if (errno != tc->exp_errno) {
-		tst_resm(TFAIL | TERRNO, "expected errno=%s",
+		tst_res(TFAIL | TTERRNO, "futex_wait() failed with incorrect error, expected errno=%s",
 		         tst_strerrno(tc->exp_errno));
 		return;
 	}
 
-	tst_resm(TPASS | TERRNO, "futex_wait()");
+	tst_res(TPASS | TERRNO, "futex_wait() passed");
 }
 
-int main(int argc, char *argv[])
+static void setup(void)
 {
-	int lc, i;
+	struct test_variants *tv = &variants[tst_variant];
 
-	tst_parse_opts(argc, argv, NULL, NULL);
-
-	for (lc = 0; TEST_LOOPING(lc); lc++) {
-		for (i = 0; i < TST_TOTAL; i++)
-			verify_futex_wait(testcases + i);
-	}
-
-	tst_exit();
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	futex_supported_by_kernel(tv->fntype);
 }
+
+static struct tst_test test = {
+	.setup = setup,
+	.test = run,
+	.tcnt = ARRAY_SIZE(testcases),
+	.test_variants = ARRAY_SIZE(variants),
+};
diff --git a/testcases/kernel/syscalls/futex/futex_wait02.c b/testcases/kernel/syscalls/futex/futex_wait02.c
index 1ca1df457b4a..34b78357f6e6 100644
--- a/testcases/kernel/syscalls/futex/futex_wait02.c
+++ b/testcases/kernel/syscalls/futex/futex_wait02.c
@@ -1,105 +1,93 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (C) 2015 Cyril Hrubis <chrubis@suse.cz>
  *
- * Licensed under the GNU GPLv2 or later.
- * This program is free software;  you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * Block on a futex and wait for wakeup.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY;  without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program;  if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * This tests uses shared memory page to store the mutex variable.
  */
- /*
-  * Block on a futex and wait for wakeup.
-  *
-  * This tests uses shared memory page to store the mutex variable.
-  */
 
 #include <sys/mman.h>
 #include <sys/wait.h>
 #include <errno.h>
 
-#include "test.h"
-#include "safe_macros.h"
 #include "futextest.h"
-
-const char *TCID="futex_wait02";
-const int TST_TOTAL=1;
+#include "futex_utils.h"
 
 static futex_t *futex;
 
+static struct test_variants {
+	enum futex_fn_type fntype;
+	char *desc;
+} variants[] = {
+#if (__NR_futex != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_futex_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX64, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
 static void do_child(void)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	int ret;
 
-	tst_process_state_wait2(getppid(), 'S');
+	process_state_wait2(getppid(), 'S');
 
-	ret = futex_wake(futex, 1, 0);
+	ret = futex_wake(tv->fntype, futex, 1, 0);
 
 	if (ret != 1)
-		tst_brkm(TFAIL, NULL, "futex_wake() returned %i", ret);
+		tst_res(TFAIL | TTERRNO, "futex_wake() failed");
 
-	exit(TPASS);
+	exit(0);
 }
 
-static void verify_futex_wait(void)
+static void run(void)
 {
-	int res;
-	int pid;
+	struct test_variants *tv = &variants[tst_variant];
+	int res, pid;
 
-	pid = tst_fork();
+	pid = SAFE_FORK();
 
 	switch (pid) {
 	case 0:
 		do_child();
-	break;
-	case -1:
-		tst_brkm(TBROK | TERRNO, NULL, "fork() failed");
-	break;
 	default:
-	break;
+		break;
 	}
 
-	res = futex_wait(futex, *futex, NULL, 0);
-
+	res = futex_wait(tv->fntype, futex, *futex, NULL, 0);
 	if (res) {
-		tst_resm(TFAIL, "futex_wait() returned %i, errno %s",
-		         res, tst_strerrno(errno));
+		tst_res(TFAIL | TTERRNO, "futex_wait() failed");
+		return;
 	}
 
-	SAFE_WAIT(NULL, &res);
+	SAFE_WAIT(&res);
 
 	if (WIFEXITED(res) && WEXITSTATUS(res) == TPASS)
-		tst_resm(TPASS, "futex_wait() woken up");
+		tst_res(TPASS, "futex_wait() woken up");
 	else
-		tst_resm(TFAIL, "child failed");
+		tst_res(TFAIL, "child failed");
 }
 
 static void setup(void)
 {
-	futex = SAFE_MMAP(NULL, NULL, sizeof(*futex), PROT_READ | PROT_WRITE,
+	struct test_variants *tv = &variants[tst_variant];
+
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	futex_supported_by_kernel(tv->fntype);
+
+	futex = SAFE_MMAP(NULL, sizeof(*futex), PROT_READ | PROT_WRITE,
 			  MAP_ANONYMOUS | MAP_SHARED, -1, 0);
 
 	*futex = FUTEX_INITIALIZER;
 }
 
-int main(int argc, char *argv[])
-{
-	int lc;
-
-	tst_parse_opts(argc, argv, NULL, NULL);
-
-	setup();
-
-	for (lc = 0; TEST_LOOPING(lc); lc++)
-		verify_futex_wait();
-
-	tst_exit();
-}
+static struct tst_test test = {
+	.setup = setup,
+	.test_all = run,
+	.test_variants = ARRAY_SIZE(variants),
+	.forks_child = 1,
+};
diff --git a/testcases/kernel/syscalls/futex/futex_wait03.c b/testcases/kernel/syscalls/futex/futex_wait03.c
index 9683e76503c0..e436b238a165 100644
--- a/testcases/kernel/syscalls/futex/futex_wait03.c
+++ b/testcases/kernel/syscalls/futex/futex_wait03.c
@@ -1,87 +1,86 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (C) 2015 Cyril Hrubis <chrubis@suse.cz>
  *
- * Licensed under the GNU GPLv2 or later.
- * This program is free software;  you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * Block on a futex and wait for wakeup.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY;  without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program;  if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * This tests uses private mutexes with threads.
  */
- /*
-  * Block on a futex and wait for wakeup.
-  *
-  * This tests uses private mutexes with threads.
-  */
 
 #include <errno.h>
 #include <pthread.h>
 
-#include "test.h"
 #include "futextest.h"
-
-const char *TCID="futex_wait03";
-const int TST_TOTAL=1;
+#include "futex_utils.h"
 
 static futex_t futex = FUTEX_INITIALIZER;
 
+static struct test_variants {
+	enum futex_fn_type fntype;
+	char *desc;
+} variants[] = {
+#if (__NR_futex != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_futex_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX64, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
 static void *threaded(void *arg LTP_ATTRIBUTE_UNUSED)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	long ret;
 
-	tst_process_state_wait2(getpid(), 'S');
+	process_state_wait2(getpid(), 'S');
 
-	ret = futex_wake(&futex, 1, FUTEX_PRIVATE_FLAG);
+	ret = futex_wake(tv->fntype, &futex, 1, FUTEX_PRIVATE_FLAG);
 
 	return (void*)ret;
 }
 
-static void verify_futex_wait(void)
+static void run(void)
 {
-	long ret;
-	int res;
+	struct test_variants *tv = &variants[tst_variant];
+	long ret, res;
 	pthread_t t;
 
 	res = pthread_create(&t, NULL, threaded, NULL);
 	if (res) {
-		tst_brkm(TBROK, NULL, "pthread_create(): %s",
-	                 tst_strerrno(res));
+		tst_res(TFAIL | TTERRNO, "pthread_create() failed");
+		return;
 	}
 
-	res = futex_wait(&futex, futex, NULL, FUTEX_PRIVATE_FLAG);
+	res = futex_wait(tv->fntype, &futex, futex, NULL, FUTEX_PRIVATE_FLAG);
 	if (res) {
-		tst_resm(TFAIL, "futex_wait() returned %i, errno %s",
-	                 res, tst_strerrno(errno));
+		tst_res(TFAIL | TTERRNO, "futex_wait() failed");
 		pthread_join(t, NULL);
 		return;
 	}
 
 	res = pthread_join(t, (void*)&ret);
-	if (res)
-		tst_brkm(TBROK, NULL, "pthread_join(): %s", tst_strerrno(res));
+	if (res) {
+		tst_res(TFAIL | TTERRNO, "pthread_join() failed");
+		return;
+	}
 
 	if (ret != 1)
-		tst_resm(TFAIL, "futex_wake() returned %li", ret);
+		tst_res(TFAIL, "futex_wake() returned %li", ret);
 	else
-		tst_resm(TPASS, "futex_wait() woken up");
+		tst_res(TPASS, "futex_wait() woken up");
 }
 
-int main(int argc, char *argv[])
+static void setup(void)
 {
-	int lc;
+	struct test_variants *tv = &variants[tst_variant];
 
-	tst_parse_opts(argc, argv, NULL, NULL);
-
-	for (lc = 0; TEST_LOOPING(lc); lc++)
-		verify_futex_wait();
-
-	tst_exit();
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	futex_supported_by_kernel(tv->fntype);
 }
+
+static struct tst_test test = {
+	.setup = setup,
+	.test_all = run,
+	.test_variants = ARRAY_SIZE(variants),
+};
diff --git a/testcases/kernel/syscalls/futex/futex_wait04.c b/testcases/kernel/syscalls/futex/futex_wait04.c
index b8360ff80914..8de3c90b08d3 100644
--- a/testcases/kernel/syscalls/futex/futex_wait04.c
+++ b/testcases/kernel/syscalls/futex/futex_wait04.c
@@ -1,65 +1,66 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (C) 2015 Cyril Hrubis <chrubis@suse.cz>
  *
  * Based on futextest (futext_wait_uninitialized_heap.c)
  * written by KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
  *
- * Licensed under the GNU GPLv2 or later.
- * This program is free software;  you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY;  without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program;  if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * Wait on uninitialized heap. It shold be zero and FUTEX_WAIT should return
+ * immediately. This test tests zero page handling in futex code.
  */
- /*
-  * Wait on uninitialized heap. It shold be zero and FUTEX_WAIT should return
-  * immediately. This test tests zero page handling in futex code.
-  */
 
 #include <errno.h>
 
-#include "test.h"
-#include "safe_macros.h"
 #include "futextest.h"
 
-const char *TCID="futex_wait04";
-const int TST_TOTAL=1;
-static struct timespec to = {.tv_sec = 0, .tv_nsec = 10000};
+static struct test_variants {
+	enum futex_fn_type fntype;
+	enum tst_ts_type tstype;
+	char *desc;
+} variants[] = {
+#if (__NR_futex != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX, .tstype = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_futex_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX64, .tstype = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
 
-static void verify_futex_wait(void)
+static void run(void)
 {
-	int res;
-	void *buf;
+	struct test_variants *tv = &variants[tst_variant];
+	static struct tst_ts to;
 	size_t pagesize = getpagesize();
-	buf = SAFE_MMAP(NULL, NULL, pagesize, PROT_READ|PROT_WRITE,
-                        MAP_PRIVATE|MAP_ANONYMOUS, 0, 0);
+	void *buf;
+	int res;
+
+	buf = SAFE_MMAP(NULL, pagesize, PROT_READ|PROT_WRITE,
+			MAP_PRIVATE|MAP_ANONYMOUS, 0, 0);
 
-	res = futex_wait(buf, 1, &to, 0);
+	to.type = tv->tstype;
+	tst_ts_set_sec(&to, 0);
+	tst_ts_set_nsec(&to, 10000);
 
+	res = futex_wait(tv->fntype, buf, 1, &to, 0);
 	if (res == -1 && errno == EWOULDBLOCK)
-		tst_resm(TPASS | TERRNO, "futex_wait() returned %i", res);
+		tst_res(TPASS | TERRNO, "futex_wait() returned %i", res);
 	else
-		tst_resm(TFAIL | TERRNO, "futex_wait() returned %i", res);
+		tst_res(TFAIL | TERRNO, "futex_wait() returned %i", res);
 
-	SAFE_MUNMAP(NULL, buf, pagesize);
+	SAFE_MUNMAP(buf, pagesize);
 }
 
-int main(int argc, char *argv[])
+static void setup(void)
 {
-	int lc;
-
-	tst_parse_opts(argc, argv, NULL, NULL);
+	struct test_variants *tv = &variants[tst_variant];
 
-	for (lc = 0; TEST_LOOPING(lc); lc++)
-		verify_futex_wait();
-
-	tst_exit();
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	futex_supported_by_kernel(tv->fntype);
 }
+
+static struct tst_test test = {
+	.setup = setup,
+	.test_all = run,
+	.test_variants = ARRAY_SIZE(variants),
+};
diff --git a/testcases/kernel/syscalls/futex/futex_wait05.c b/testcases/kernel/syscalls/futex/futex_wait05.c
index 2573ae177d5b..8fad5d858716 100644
--- a/testcases/kernel/syscalls/futex/futex_wait05.c
+++ b/testcases/kernel/syscalls/futex/futex_wait05.c
@@ -19,7 +19,7 @@ int sample_fn(int clk_id, long long usec)
 	futex_t futex = FUTEX_INITIALIZER;
 
 	tst_timer_start(clk_id);
-	TEST(futex_wait(&futex, futex, &to, 0));
+	TEST(syscall(SYS_futex, &futex, FUTEX_WAIT, futex, &to, NULL, 0));
 	tst_timer_stop();
 	tst_timer_sample();
 
diff --git a/testcases/kernel/syscalls/futex/futex_wait_bitset01.c b/testcases/kernel/syscalls/futex/futex_wait_bitset01.c
index b8546c3e640c..a871af992572 100644
--- a/testcases/kernel/syscalls/futex/futex_wait_bitset01.c
+++ b/testcases/kernel/syscalls/futex/futex_wait_bitset01.c
@@ -23,22 +23,40 @@ static struct test_case_t {
 	{ CLOCK_REALTIME }
 };
 
+static struct test_variants {
+	enum futex_fn_type fntype;
+	enum tst_ts_type tstype;
+	int (*gettime)(clockid_t clk_id, void *ts);
+	char *desc;
+} variants[] = {
+#if (__NR_futex != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX, .tstype = TST_KERN_OLD_TIMESPEC, .gettime = sys_clock_gettime, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_futex_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX64, .tstype = TST_KERN_TIMESPEC, .gettime = sys_clock_gettime64, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
 static void verify_futex_wait_bitset(long long wait_us, clock_t clk_id)
 {
-	struct timespec start, to, end;
+	struct test_variants *tv = &variants[tst_variant];
+	struct tst_ts start, to, end;
 	futex_t futex = FUTEX_INITIALIZER;
 	u_int32_t bitset = 0xffffffff;
 	int flags = clk_id == CLOCK_REALTIME ? FUTEX_CLOCK_REALTIME : 0;
 
+	start.type = end.type = to.type = tv->tstype;
+
 	tst_res(TINFO, "testing futex_wait_bitset() timeout with %s",
 		clk_id == CLOCK_REALTIME ? "CLOCK_REALTIME" : "CLOCK_MONOTONIC");
 
-	clock_gettime(clk_id, &start);
-	to = tst_timespec_add_us(start, wait_us);
+	tv->gettime(clk_id, tst_ts_get(&start));
+	to = tst_ts_add_us(start, wait_us);
 
-	TEST(futex_wait_bitset(&futex, futex, &to, bitset, flags));
+	TEST(futex_wait_bitset(tv->fntype, &futex, futex, &to, bitset, flags));
 
-	clock_gettime(clk_id, &end);
+	tv->gettime(clk_id, tst_ts_get(&end));
 
 	if (TST_RET != -1) {
 		tst_res(TFAIL, "futex_wait_bitset() returned %li, expected -1",
@@ -58,22 +76,22 @@ static void verify_futex_wait_bitset(long long wait_us, clock_t clk_id)
 		return;
 	}
 
-	if (tst_timespec_lt(end, to)) {
+	if (tst_ts_lt(end, to)) {
 		tst_res(TFAIL,
 			"futex_wait_bitset() woken up prematurely %llius, expected %llius",
-			tst_timespec_diff_us(end, start), wait_us);
+			tst_ts_diff_us(end, start), wait_us);
 		return;
 	}
 
-	if (tst_timespec_diff_us(end, to) > THRESHOLD_US) {
+	if (tst_ts_diff_us(end, to) > THRESHOLD_US) {
 		tst_res(TFAIL,
 			"futex_wait_bitset() waited too long %llius, expected %llius",
-			tst_timespec_diff_us(end, start), wait_us);
+			tst_ts_diff_us(end, start), wait_us);
 		return;
 	}
 
 	tst_res(TPASS, "futex_wait_bitset() waited %llius, expected %llius",
-		tst_timespec_diff_us(end, start), wait_us);
+		tst_ts_diff_us(end, start), wait_us);
 }
 
 static void run(unsigned int n)
@@ -82,7 +100,17 @@ static void run(unsigned int n)
 	verify_futex_wait_bitset(DEFAULT_TIMEOUT_US, tcases[n].clk_id);
 }
 
+static void setup(void)
+{
+	struct test_variants *tv = &variants[tst_variant];
+
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	futex_supported_by_kernel(tv->fntype);
+}
+
 static struct tst_test test = {
+	.setup = setup,
 	.test = run,
 	.tcnt = ARRAY_SIZE(tcases),
+	.test_variants = ARRAY_SIZE(variants),
 };
diff --git a/testcases/kernel/syscalls/futex/futex_wake01.c b/testcases/kernel/syscalls/futex/futex_wake01.c
index 42ea6f6e6a75..2dbe8cc2f3aa 100644
--- a/testcases/kernel/syscalls/futex/futex_wake01.c
+++ b/testcases/kernel/syscalls/futex/futex_wake01.c
@@ -1,33 +1,15 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (C) 2015 Cyril Hrubis <chrubis@suse.cz>
  *
- * Licensed under the GNU GPLv2 or later.
- * This program is free software;  you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY;  without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program;  if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * futex_wake() returns 0 (0 woken up processes) when no processes wait on the mutex.
  */
- /*
-  * futex_wake() returns 0 (0 woken up processes) when no processes wait on the mutex.
-  */
 
 #include <errno.h>
 #include <limits.h>
 
-#include "test.h"
 #include "futextest.h"
 
-const char *TCID="futex_wake01";
-
 struct testcase {
 	futex_t *f_addr;
 	int nr_wake;
@@ -46,32 +28,45 @@ static struct testcase testcases[] = {
 	{&futex, INT_MAX, FUTEX_PRIVATE_FLAG},
 };
 
-const int TST_TOTAL=ARRAY_SIZE(testcases);
+static struct test_variants {
+	enum futex_fn_type fntype;
+	char *desc;
+} variants[] = {
+#if (__NR_futex != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX, .desc = "syscall with old kernel spec"},
+#endif
 
-static void verify_futex_wake(struct testcase *tc)
+#if (__NR_futex_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX64, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
+static void run(unsigned int n)
 {
+	struct test_variants *tv = &variants[tst_variant];
+	struct testcase *tc = &testcases[n];
 	int res;
 
-	res = futex_wake(tc->f_addr, tc->nr_wake, tc->opflags);
-
+	res = futex_wake(tv->fntype, tc->f_addr, tc->nr_wake, tc->opflags);
 	if (res != 0) {
-		tst_resm(TFAIL, "futex_wake() returned %i, expected 0", res);
+		tst_res(TFAIL | TTERRNO, "futex_wake() failed");
 		return;
 	}
 
-	tst_resm(TPASS, "futex_wake() returned 0");
+	tst_res(TPASS, "futex_wake() passed");
 }
 
-int main(int argc, char *argv[])
+static void setup(void)
 {
-	int lc, i;
+	struct test_variants *tv = &variants[tst_variant];
 
-	tst_parse_opts(argc, argv, NULL, NULL);
-
-	for (lc = 0; TEST_LOOPING(lc); lc++) {
-		for (i = 0; i < TST_TOTAL; i++)
-			verify_futex_wake(testcases + i);
-	}
-
-	tst_exit();
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	futex_supported_by_kernel(tv->fntype);
 }
+
+static struct tst_test test = {
+	.setup = setup,
+	.test = run,
+	.tcnt = ARRAY_SIZE(testcases),
+	.test_variants = ARRAY_SIZE(variants),
+};
diff --git a/testcases/kernel/syscalls/futex/futex_wake02.c b/testcases/kernel/syscalls/futex/futex_wake02.c
index 8a4c2d58e4b9..3491839872ac 100644
--- a/testcases/kernel/syscalls/futex/futex_wake02.c
+++ b/testcases/kernel/syscalls/futex/futex_wake02.c
@@ -1,40 +1,34 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (C) 2015 Cyril Hrubis <chrubis@suse.cz>
  *
- * Licensed under the GNU GPLv2 or later.
- * This program is free software;  you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY;  without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program;  if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * Block several threads on a private mutex, then wake them up.
  */
- /*
-  * Block several threads on a private mutex, then wake them up.
-  */
 
 #include <errno.h>
 #include <pthread.h>
+#include <sys/types.h>
 
-#include "test.h"
-#include "safe_macros.h"
 #include "futextest.h"
 #include "futex_utils.h"
 
-const char *TCID="futex_wake02";
-const int TST_TOTAL=11;
-
 static futex_t futex = FUTEX_INITIALIZER;
 
 static volatile int threads_flags[55];
 
+static struct test_variants {
+	enum futex_fn_type fntype;
+	char *desc;
+} variants[] = {
+#if (__NR_futex != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_futex_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX64, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
 static int threads_awake(void)
 {
 	int ret = 0;
@@ -58,9 +52,10 @@ static void clear_threads_awake(void)
 
 static void *threaded(void *arg)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	long i = (long)arg;
 
-	futex_wait(&futex, futex, NULL, FUTEX_PRIVATE_FLAG);
+	futex_wait(tv->fntype, &futex, futex, NULL, FUTEX_PRIVATE_FLAG);
 
 	threads_flags[i] = 1;
 
@@ -69,14 +64,15 @@ static void *threaded(void *arg)
 
 static void do_child(void)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	int res, i, j, awake;
 	pthread_t t[55];
 
 	for (i = 0; i < (int)ARRAY_SIZE(t); i++) {
 		res = pthread_create(&t[i], NULL, threaded, (void*)((long)i));
 		if (res) {
-			tst_brkm(TBROK, NULL, "pthread_create(): %s",
-			         tst_strerrno(res));
+			tst_res(TFAIL | TTERRNO, "pthread_create() failed");
+			return;
 		}
 	}
 
@@ -85,9 +81,9 @@ static void do_child(void)
 
 	for (i = 1; i <= 10; i++) {
 		clear_threads_awake();
-		res = futex_wake(&futex, i, FUTEX_PRIVATE_FLAG);
+		res = futex_wake(tv->fntype, &futex, i, FUTEX_PRIVATE_FLAG);
 		if (i != res) {
-			tst_resm(TFAIL,
+			tst_res(TFAIL | TTERRNO,
 			         "futex_wake() woken up %i threads, expected %i",
 			         res, i);
 		}
@@ -101,26 +97,26 @@ static void do_child(void)
 		}
 
 		if (awake == i) {
-			tst_resm(TPASS, "futex_wake() woken up %i threads", i);
+			tst_res(TPASS, "futex_wake() woken up %i threads", i);
 		} else {
-			tst_resm(TFAIL, "Woken up %i threads, expected %i",
-			         awake, i);
+			tst_res(TFAIL | TTERRNO, "Woken up %i threads, expected %i",
+				awake, i);
 		}
 	}
 
-	res = futex_wake(&futex, 1, FUTEX_PRIVATE_FLAG);
+	res = futex_wake(tv->fntype, &futex, 1, FUTEX_PRIVATE_FLAG);
 
 	if (res) {
-		tst_resm(TFAIL, "futex_wake() woken up %i, none were waiting",
-		         res);
+		tst_res(TFAIL | TTERRNO, "futex_wake() woken up %i, none were waiting",
+			res);
 	} else {
-		tst_resm(TPASS, "futex_wake() woken up 0 threads");
+		tst_res(TPASS, "futex_wake() woken up 0 threads");
 	}
 
 	for (i = 0; i < (int)ARRAY_SIZE(t); i++)
 		pthread_join(t[i], NULL);
 
-	tst_exit();
+	exit(0);
 }
 
 /*
@@ -135,30 +131,31 @@ static void do_child(void)
  * under /proc/$PID/tasks/, but the subsequent open() fails with ENOENT because
  * the thread was removed meanwhile.
  */
-static void verify_futex_wake(void)
+static void run(void)
 {
-	int pid;
+	int status, pid;
 
-	pid = tst_fork();
+	pid = SAFE_FORK();
 
 	switch (pid) {
 	case 0:
 		do_child();
-	case -1:
-		tst_brkm(TBROK | TERRNO, NULL, "fork() failed");
 	default:
-		tst_record_childstatus(NULL, pid);
+		SAFE_WAITPID(pid, &status, 0);
 	}
 }
 
-int main(int argc, char *argv[])
+static void setup(void)
 {
-	int lc;
-
-	tst_parse_opts(argc, argv, NULL, NULL);
+	struct test_variants *tv = &variants[tst_variant];
 
-	for (lc = 0; TEST_LOOPING(lc); lc++)
-		verify_futex_wake();
-
-	tst_exit();
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	futex_supported_by_kernel(tv->fntype);
 }
+
+static struct tst_test test = {
+	.setup = setup,
+	.test_all = run,
+	.test_variants = ARRAY_SIZE(variants),
+	.forks_child = 1,
+};
diff --git a/testcases/kernel/syscalls/futex/futex_wake03.c b/testcases/kernel/syscalls/futex/futex_wake03.c
index d6e5e5422db9..29e586c40132 100644
--- a/testcases/kernel/syscalls/futex/futex_wake03.c
+++ b/testcases/kernel/syscalls/futex/futex_wake03.c
@@ -1,54 +1,51 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (C) 2015 Cyril Hrubis <chrubis@suse.cz>
  *
- * Licensed under the GNU GPLv2 or later.
- * This program is free software;  you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY;  without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program;  if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * Block several processes on a mutex, then wake them up.
  */
- /*
-  * Block several processes on a mutex, then wake them up.
-  */
 
 #include <errno.h>
 #include <sys/types.h>
 #include <sys/wait.h>
 
-#include "test.h"
-#include "safe_macros.h"
 #include "futextest.h"
-
-const char *TCID="futex_wake03";
-const int TST_TOTAL=11;
+#include "futex_utils.h"
 
 static futex_t *futex;
 
+static struct test_variants {
+	enum futex_fn_type fntype;
+	char *desc;
+} variants[] = {
+#if (__NR_futex != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_futex_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX64, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
 static void do_child(void)
 {
-	futex_wait(futex, *futex, NULL, 0);
+	struct test_variants *tv = &variants[tst_variant];
+
+	futex_wait(tv->fntype, futex, *futex, NULL, 0);
 	exit(0);
 }
 
 static void do_wake(int nr_children)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	int res, i, cnt;
 
-	res = futex_wake(futex, nr_children, 0);
+	res = futex_wake(tv->fntype, futex, nr_children, 0);
 
 	if (res != nr_children) {
-		tst_resm(TFAIL,
-		         "futex_wake() woken up %i children, expected %i",
-		         res, nr_children);
+		tst_res(TFAIL | TTERRNO,
+		        "futex_wake() woken up %i children, expected %i",
+			res, nr_children);
 		return;
 	}
 
@@ -63,65 +60,63 @@ static void do_wake(int nr_children)
 	}
 
 	if (cnt != nr_children) {
-		tst_resm(TFAIL, "reaped only %i childs, expected %i",
-		         cnt, nr_children);
+		tst_res(TFAIL | TTERRNO, "reaped only %i childs, expected %i",
+		        cnt, nr_children);
 	} else {
-		tst_resm(TPASS, "futex_wake() woken up %i childs", cnt);
+		tst_res(TPASS, "futex_wake() woken up %i childs", cnt);
 	}
 }
 
-static void verify_futex_wake(void)
+static void run(void)
 {
-	int i, res;
+	struct test_variants *tv = &variants[tst_variant];
 	pid_t pids[55];
+	unsigned int i;
+	int res;
 
-	for (i = 0; i < (int)ARRAY_SIZE(pids); i++) {
-		pids[i] = tst_fork();
+	for (i = 0; i < ARRAY_SIZE(pids); i++) {
+		pids[i] = SAFE_FORK();
 
 		switch (pids[i]) {
-		case -1:
-			tst_brkm(TBROK | TERRNO, NULL, "fork()");
 		case 0:
 			do_child();
 		default:
-		break;
+			break;
 		}
 	}
 
-	for (i = 0; i < (int)ARRAY_SIZE(pids); i++)
-		tst_process_state_wait2(pids[i], 'S');
+	for (i = 0; i < ARRAY_SIZE(pids); i++)
+		process_state_wait2(pids[i], 'S');
 
 	for (i = 1; i <= 10; i++)
 		do_wake(i);
 
-	res = futex_wake(futex, 1, 0);
+	res = futex_wake(tv->fntype, futex, 1, 0);
 
 	if (res) {
-		tst_resm(TFAIL, "futex_wake() woken up %u, none were waiting",
-		         res);
+		tst_res(TFAIL | TTERRNO, "futex_wake() woken up %u, none were waiting",
+			res);
 	} else {
-		tst_resm(TPASS, "futex_wake() woken up 0 children");
+		tst_res(TPASS, "futex_wake() woken up 0 children");
 	}
 }
 
 static void setup(void)
 {
-	futex = SAFE_MMAP(NULL, NULL, sizeof(*futex), PROT_READ | PROT_WRITE,
+	struct test_variants *tv = &variants[tst_variant];
+
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	futex_supported_by_kernel(tv->fntype);
+
+	futex = SAFE_MMAP(NULL, sizeof(*futex), PROT_READ | PROT_WRITE,
 			  MAP_ANONYMOUS | MAP_SHARED, -1, 0);
 
 	*futex = FUTEX_INITIALIZER;
 }
 
-int main(int argc, char *argv[])
-{
-	int lc;
-
-	tst_parse_opts(argc, argv, NULL, NULL);
-
-	setup();
-
-	for (lc = 0; TEST_LOOPING(lc); lc++)
-		verify_futex_wake();
-
-	tst_exit();
-}
+static struct tst_test test = {
+	.setup = setup,
+	.test_all = run,
+	.test_variants = ARRAY_SIZE(variants),
+	.forks_child = 1,
+};
diff --git a/testcases/kernel/syscalls/futex/futex_wake04.c b/testcases/kernel/syscalls/futex/futex_wake04.c
index f92bda53f6c7..edbb9c644c57 100644
--- a/testcases/kernel/syscalls/futex/futex_wake04.c
+++ b/testcases/kernel/syscalls/futex/futex_wake04.c
@@ -1,23 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (C) 2015  Yi Zhang <wetpzy@gmail.com>
  *                     Li Wang <liwang@redhat.com>
  *
- * Licensed under the GNU GPLv2 or later.
- * This program is free software;  you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY;  without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program;  if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
- /* DESCRIPTION:
+ * DESCRIPTION:
  *
  *   It is a regression test for commit:
  *   http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/
@@ -42,53 +28,59 @@
 #include <sys/time.h>
 #include <string.h>
 
-#include "test.h"
-#include "safe_macros.h"
 #include "futextest.h"
 #include "futex_utils.h"
 #include "lapi/mmap.h"
+#include "tst_safe_stdio.h"
 
 #define PATH_MEMINFO "/proc/meminfo"
 #define PATH_NR_HUGEPAGES "/proc/sys/vm/nr_hugepages"
 #define PATH_HUGEPAGES	"/sys/kernel/mm/hugepages/"
 
-const char *TCID = "futex_wake04";
-const int TST_TOTAL = 1;
-
 static futex_t *futex1, *futex2;
 
-static struct timespec to = {.tv_sec = 30, .tv_nsec = 0};
+static struct tst_ts to;
 
 static long orig_hugepages;
 
+static struct test_variants {
+	enum futex_fn_type fntype;
+	enum tst_ts_type tstype;
+	char *desc;
+} variants[] = {
+#if (__NR_futex != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX, .tstype = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_futex_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX64, .tstype = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
 static void setup(void)
 {
-	tst_require_root();
+	struct test_variants *tv = &variants[tst_variant];
 
-	if ((tst_kvercmp(2, 6, 32)) < 0) {
-		tst_brkm(TCONF, NULL, "This test can only run on kernels "
-			"that are 2.6.32 or higher");
-	}
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	futex_supported_by_kernel(tv->fntype);
 
-	if (access(PATH_HUGEPAGES, F_OK))
-		tst_brkm(TCONF, NULL, "Huge page is not supported.");
+	to.type = tv->tstype;
+	tst_ts_set_sec(&to, 30);
+	tst_ts_set_nsec(&to, 0);
 
-	tst_tmpdir();
+	if (access(PATH_HUGEPAGES, F_OK))
+		tst_brk(TCONF, "Huge page is not supported.");
 
-	SAFE_FILE_SCANF(NULL, PATH_NR_HUGEPAGES, "%ld", &orig_hugepages);
+	SAFE_FILE_SCANF(PATH_NR_HUGEPAGES, "%ld", &orig_hugepages);
 
 	if (orig_hugepages <= 0)
-		SAFE_FILE_PRINTF(NULL, PATH_NR_HUGEPAGES, "%d", 1);
-
-	TEST_PAUSE;
+		SAFE_FILE_PRINTF(PATH_NR_HUGEPAGES, "%d", 1);
 }
 
 static void cleanup(void)
 {
 	if (orig_hugepages <= 0)
-		SAFE_FILE_PRINTF(NULL, PATH_NR_HUGEPAGES, "%ld", orig_hugepages);
-
-	tst_rmdir();
+		SAFE_FILE_PRINTF(PATH_NR_HUGEPAGES, "%ld", orig_hugepages);
 }
 
 static int read_hugepagesize(void)
@@ -97,60 +89,64 @@ static int read_hugepagesize(void)
 	char line[BUFSIZ], buf[BUFSIZ];
 	int val;
 
-	fp = SAFE_FOPEN(cleanup, PATH_MEMINFO, "r");
+	fp = SAFE_FOPEN(PATH_MEMINFO, "r");
 	while (fgets(line, BUFSIZ, fp) != NULL) {
 		if (sscanf(line, "%64s %d", buf, &val) == 2)
 			if (strcmp(buf, "Hugepagesize:") == 0) {
-				SAFE_FCLOSE(cleanup, fp);
+				SAFE_FCLOSE(fp);
 				return 1024 * val;
 			}
 	}
 
-	SAFE_FCLOSE(cleanup, fp);
-	tst_brkm(TBROK, NULL, "can't find \"%s\" in %s",
-			"Hugepagesize:", PATH_MEMINFO);
+	SAFE_FCLOSE(fp);
+	tst_res(TFAIL, "can't find \"%s\" in %s", "Hugepagesize:",
+		PATH_MEMINFO);
+	return 0;
 }
 
 static void *wait_thread1(void *arg LTP_ATTRIBUTE_UNUSED)
 {
-	futex_wait(futex1, *futex1, &to, 0);
+	struct test_variants *tv = &variants[tst_variant];
+
+	futex_wait(tv->fntype, futex1, *futex1, &to, 0);
 
 	return NULL;
 }
 
 static void *wait_thread2(void *arg LTP_ATTRIBUTE_UNUSED)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	int res;
 
-	res = futex_wait(futex2, *futex2, &to, 0);
+	res = futex_wait(tv->fntype, futex2, *futex2, &to, 0);
 	if (!res)
-		tst_resm(TPASS, "Hi hydra, thread2 awake!");
+		tst_res(TPASS, "Hi hydra, thread2 awake!");
 	else
-		tst_resm(TFAIL, "Bug: wait_thread2 did not wake after 30 secs.");
+		tst_res(TFAIL | TTERRNO, "Bug: wait_thread2 did not wake after 30 secs.");
 
 	return NULL;
 }
 
 static void wakeup_thread2(void)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	void *addr;
 	int hpsz, pgsz, res;
 	pthread_t th1, th2;
 
 	hpsz = read_hugepagesize();
-	tst_resm(TINFO, "Hugepagesize %i", hpsz);
+	tst_res(TINFO, "Hugepagesize %i", hpsz);
 
 	/*allocate some shared memory*/
 	addr = mmap(NULL, hpsz, PROT_WRITE | PROT_READ,
 	            MAP_SHARED | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0);
 
 	if (addr == MAP_FAILED) {
-		if (errno == ENOMEM) {
-			tst_brkm(TCONF, NULL,
-				 "Cannot allocate hugepage, memory too fragmented?");
-		}
+		if (errno == ENOMEM)
+			tst_res(TCONF, "Cannot allocate hugepage, memory too fragmented?");
 
-		tst_brkm(TBROK | TERRNO, NULL, "Cannot allocate hugepage");
+		tst_res(TFAIL | TERRNO, "Cannot allocate hugepage");
+		return;
 	}
 
 	pgsz = getpagesize();
@@ -165,45 +161,47 @@ static void wakeup_thread2(void)
 	/*thread1 block on futex1 first,then thread2 block on futex2*/
 	res = pthread_create(&th1, NULL, wait_thread1, NULL);
 	if (res) {
-		tst_brkm(TBROK, NULL, "pthread_create(): %s",
-				tst_strerrno(res));
+		tst_res(TFAIL | TTERRNO, "pthread_create() failed");
+		return;
 	}
 
 	res = pthread_create(&th2, NULL, wait_thread2, NULL);
 	if (res) {
-		tst_brkm(TBROK, NULL, "pthread_create(): %s",
-				tst_strerrno(res));
+		tst_res(TFAIL | TTERRNO, "pthread_create() failed");
+		return;
 	}
 
 	while (wait_for_threads(2))
 		usleep(1000);
 
-	futex_wake(futex2, 1, 0);
+	futex_wake(tv->fntype, futex2, 1, 0);
 
 	res = pthread_join(th2, NULL);
-	if (res)
-		tst_brkm(TBROK, NULL, "pthread_join(): %s", tst_strerrno(res));
+	if (res) {
+		tst_res(TFAIL | TTERRNO, "pthread_join() failed");
+		return;
+	}
 
-	futex_wake(futex1, 1, 0);
+	futex_wake(tv->fntype, futex1, 1, 0);
 
 	res = pthread_join(th1, NULL);
 	if (res)
-		tst_brkm(TBROK, NULL, "pthread_join(): %s", tst_strerrno(res));
+		tst_res(TFAIL | TTERRNO, "pthread_join() failed");
 
-	SAFE_MUNMAP(NULL, addr, hpsz);
+	SAFE_MUNMAP(addr, hpsz);
 }
 
-int main(int argc, char *argv[])
+static void run(void)
 {
-	int lc;
-
-	tst_parse_opts(argc, argv, NULL, NULL);
-
-	setup();
-
-	for (lc = 0; TEST_LOOPING(lc); lc++)
-		wakeup_thread2();
-
-	cleanup();
-	tst_exit();
+	wakeup_thread2();
 }
+
+static struct tst_test test = {
+	.setup = setup,
+	.cleanup = cleanup,
+	.test_all = run,
+	.test_variants = ARRAY_SIZE(variants),
+	.needs_root = 1,
+	.min_kver = "2.6.32",
+	.needs_tmpdir = 1,
+};
diff --git a/testcases/kernel/syscalls/futex/futextest.h b/testcases/kernel/syscalls/futex/futextest.h
index 5754d36dae51..b72d83bc711b 100644
--- a/testcases/kernel/syscalls/futex/futextest.h
+++ b/testcases/kernel/syscalls/futex/futextest.h
@@ -39,6 +39,7 @@
 #include <sys/types.h>
 #include <linux/futex.h>
 #include "lapi/futex.h"
+#include "tst_timer.h"
 
 #define FUTEX_INITIALIZER 0
 
@@ -82,18 +83,35 @@
 # define FUTEX_CLOCK_REALTIME 256
 #endif
 
+enum futex_fn_type {
+	FUTEX_FN_FUTEX,
+	FUTEX_FN_FUTEX64,
+};
+
+static inline void futex_supported_by_kernel(enum futex_fn_type fntype)
+{
+	if (fntype != FUTEX_FN_FUTEX64)
+		return;
+
+	/* Check if the syscall is implemented on the platform */
+	TEST(sys_futex_time64(NULL, 0, 0, NULL, NULL, 0));
+	if (TST_RET == -1 && TST_ERR == ENOSYS)
+		tst_brk(TCONF, "Test not supported on kernel/platform");
+}
+
 /**
- * futex() - SYS_futex syscall wrapper
+ * futex_syscall() - futex syscall wrapper
+ * @fntype:	Futex function type
  * @uaddr:	address of first futex
  * @op:		futex op code
  * @val:	typically expected value of uaddr, but varies by op
- * @timeout:	typically an absolute struct timespec (except where noted
+ * @timeout:	typically an absolute struct tst_ts (except where noted
  *		otherwise). Overloaded by some ops
  * @uaddr2:	address of second futex for some ops\
  * @val3:	varies by op
  * @opflags:	flags to be bitwise OR'd with op, such as FUTEX_PRIVATE_FLAG
  *
- * futex() is used by all the following futex op wrappers. It can also be
+ * futex_syscall() is used by all the following futex op wrappers. It can also be
  * used for misuse and abuse testing. Generally, the specific op wrappers
  * should be used instead. It is a macro instead of an static inline function as
  * some of the types over overloaded (timeout is used for nr_requeue for
@@ -102,17 +120,30 @@
  * These argument descriptions are the defaults for all
  * like-named arguments in the following wrappers except where noted below.
  */
-#define futex(uaddr, op, val, timeout, uaddr2, val3, opflags) \
-	syscall(SYS_futex, uaddr, op | opflags, val, timeout, uaddr2, val3)
+static inline int futex_syscall(enum futex_fn_type fntype, futex_t *uaddr,
+				int futex_op, futex_t val, void *timeout,
+				futex_t *uaddr2, int val3, int opflags)
+{
+	int (*func)(int *uaddr, int futex_op, int val, void *to, int *uaddr2, int val3);
+
+	if (fntype == FUTEX_FN_FUTEX)
+		func = sys_futex;
+	else
+		func = sys_futex_time64;
+
+	return func((int *)uaddr, futex_op | opflags, val, timeout, (int *)uaddr2, val3);
+}
 
 /**
  * futex_wait() - block on uaddr with optional timeout
  * @timeout:	relative timeout
  */
 static inline int
-futex_wait(futex_t *uaddr, futex_t val, struct timespec *timeout, int opflags)
+futex_wait(enum futex_fn_type fntype, futex_t *uaddr, futex_t val,
+	   struct tst_ts *timeout, int opflags)
 {
-	return futex(uaddr, FUTEX_WAIT, val, timeout, NULL, 0, opflags);
+	return futex_syscall(fntype, uaddr, FUTEX_WAIT, val,
+			     tst_ts_get(timeout), NULL, 0, opflags);
 }
 
 /**
@@ -120,9 +151,10 @@ futex_wait(futex_t *uaddr, futex_t val, struct timespec *timeout, int opflags)
  * @nr_wake:	wake up to this many tasks
  */
 static inline int
-futex_wake(futex_t *uaddr, int nr_wake, int opflags)
+futex_wake(enum futex_fn_type fntype, futex_t *uaddr, int nr_wake, int opflags)
 {
-	return futex(uaddr, FUTEX_WAKE, nr_wake, NULL, NULL, 0, opflags);
+	return futex_syscall(fntype, uaddr, FUTEX_WAKE, nr_wake, NULL, NULL, 0,
+			     opflags);
 }
 
 /**
@@ -130,11 +162,11 @@ futex_wake(futex_t *uaddr, int nr_wake, int opflags)
  * @bitset:	bitset to be used with futex_wake_bitset
  */
 static inline int
-futex_wait_bitset(futex_t *uaddr, futex_t val, struct timespec *timeout,
-		  u_int32_t bitset, int opflags)
+futex_wait_bitset(enum futex_fn_type fntype, futex_t *uaddr, futex_t val,
+		  struct tst_ts *timeout, u_int32_t bitset, int opflags)
 {
-	return futex(uaddr, FUTEX_WAIT_BITSET, val, timeout, NULL, bitset,
-		     opflags);
+	return futex_syscall(fntype, uaddr, FUTEX_WAIT_BITSET, val,
+			     tst_ts_get(timeout), NULL, bitset, opflags);
 }
 
 /**
@@ -142,10 +174,11 @@ futex_wait_bitset(futex_t *uaddr, futex_t val, struct timespec *timeout,
  * @bitset:	bitset to compare with that used in futex_wait_bitset
  */
 static inline int
-futex_wake_bitset(futex_t *uaddr, int nr_wake, u_int32_t bitset, int opflags)
+futex_wake_bitset(enum futex_fn_type fntype, futex_t *uaddr, int nr_wake,
+		  u_int32_t bitset, int opflags)
 {
-	return futex(uaddr, FUTEX_WAKE_BITSET, nr_wake, NULL, NULL, bitset,
-		     opflags);
+	return futex_syscall(fntype, uaddr, FUTEX_WAKE_BITSET, nr_wake, NULL,
+			     NULL, bitset, opflags);
 }
 
 /**
@@ -153,30 +186,32 @@ futex_wake_bitset(futex_t *uaddr, int nr_wake, u_int32_t bitset, int opflags)
  * @detect:	whether (1) or not (0) to perform deadlock detection
  */
 static inline int
-futex_lock_pi(futex_t *uaddr, struct timespec *timeout, int detect,
-	      int opflags)
+futex_lock_pi(enum futex_fn_type fntype, futex_t *uaddr, struct tst_ts *timeout,
+	      int detect, int opflags)
 {
-	return futex(uaddr, FUTEX_LOCK_PI, detect, timeout, NULL, 0, opflags);
+	return futex_syscall(fntype, uaddr, FUTEX_LOCK_PI, detect,
+			     tst_ts_get(timeout), NULL, 0, opflags);
 }
 
 /**
  * futex_unlock_pi() - release uaddr as a PI mutex, waking the top waiter
  */
 static inline int
-futex_unlock_pi(futex_t *uaddr, int opflags)
+futex_unlock_pi(enum futex_fn_type fntype, futex_t *uaddr, int opflags)
 {
-	return futex(uaddr, FUTEX_UNLOCK_PI, 0, NULL, NULL, 0, opflags);
-}
+	return futex_syscall(fntype, uaddr, FUTEX_UNLOCK_PI, 0, NULL, NULL, 0,
+			     opflags); }
 
 /**
  * futex_wake_op() - FIXME: COME UP WITH A GOOD ONE LINE DESCRIPTION
  */
 static inline int
-futex_wake_op(futex_t *uaddr, futex_t *uaddr2, int nr_wake, int nr_wake2,
-	      int wake_op, int opflags)
+futex_wake_op(enum futex_fn_type fntype, futex_t *uaddr, futex_t *uaddr2,
+	      int nr_wake, int nr_wake2, int wake_op, int opflags)
 {
-	return futex(uaddr, FUTEX_WAKE_OP, nr_wake, nr_wake2, uaddr2, wake_op,
-		     opflags);
+	return futex_syscall(fntype, uaddr, FUTEX_WAKE_OP, nr_wake,
+			     (void *)((unsigned long)nr_wake2), uaddr2, wake_op,
+			     opflags);
 }
 
 /**
@@ -188,11 +223,12 @@ futex_wake_op(futex_t *uaddr, futex_t *uaddr2, int nr_wake, int nr_wake2,
  * favor of futex_cmp_requeue().
  */
 static inline int
-futex_requeue(futex_t *uaddr, futex_t *uaddr2, int nr_wake, int nr_requeue,
-	      int opflags)
+futex_requeue(enum futex_fn_type fntype, futex_t *uaddr, futex_t *uaddr2,
+	      int nr_wake, int nr_requeue, int opflags)
 {
-	return futex(uaddr, FUTEX_REQUEUE, nr_wake, nr_requeue, uaddr2, 0,
-		     opflags);
+	return futex_syscall(fntype, uaddr, FUTEX_REQUEUE, nr_wake,
+			     (void *)((unsigned long)nr_requeue), uaddr2, 0,
+			     opflags);
 }
 
 /**
@@ -201,11 +237,12 @@ futex_requeue(futex_t *uaddr, futex_t *uaddr2, int nr_wake, int nr_requeue,
  * @nr_requeue:	requeue up to this many tasks
  */
 static inline int
-futex_cmp_requeue(futex_t *uaddr, futex_t val, futex_t *uaddr2, int nr_wake,
-		  int nr_requeue, int opflags)
+futex_cmp_requeue(enum futex_fn_type fntype, futex_t *uaddr, futex_t val,
+		  futex_t *uaddr2, int nr_wake, int nr_requeue, int opflags)
 {
-	return futex(uaddr, FUTEX_CMP_REQUEUE, nr_wake, nr_requeue, uaddr2,
-		     val, opflags);
+	return futex_syscall(fntype, uaddr, FUTEX_CMP_REQUEUE, nr_wake,
+			     (void *)((unsigned long)nr_requeue), uaddr2, val,
+			     opflags);
 }
 
 /**
@@ -217,11 +254,11 @@ futex_cmp_requeue(futex_t *uaddr, futex_t val, futex_t *uaddr2, int nr_wake,
  * paired with futex_cmp_requeue_pi().
  */
 static inline int
-futex_wait_requeue_pi(futex_t *uaddr, futex_t val, futex_t *uaddr2,
-		      struct timespec *timeout, int opflags)
+futex_wait_requeue_pi(enum futex_fn_type fntype, futex_t *uaddr, futex_t val,
+		      futex_t *uaddr2, struct tst_ts *timeout, int opflags)
 {
-	return futex(uaddr, FUTEX_WAIT_REQUEUE_PI, val, timeout, uaddr2, 0,
-		     opflags);
+	return futex_syscall(fntype, uaddr, FUTEX_WAIT_REQUEUE_PI, val,
+			     tst_ts_get(timeout), uaddr2, 0, opflags);
 }
 
 /**
@@ -232,11 +269,12 @@ futex_wait_requeue_pi(futex_t *uaddr, futex_t val, futex_t *uaddr2,
  * @nr_requeue:	requeue up to this many tasks
  */
 static inline int
-futex_cmp_requeue_pi(futex_t *uaddr, futex_t val, futex_t *uaddr2, int nr_wake,
-		     int nr_requeue, int opflags)
+futex_cmp_requeue_pi(enum futex_fn_type fntype, futex_t *uaddr, futex_t val,
+		     futex_t *uaddr2, int nr_wake, int nr_requeue, int opflags)
 {
-	return futex(uaddr, FUTEX_CMP_REQUEUE_PI, nr_wake, nr_requeue, uaddr2, val,
-		     opflags);
+	return futex_syscall(fntype, uaddr, FUTEX_CMP_REQUEUE_PI, nr_wake,
+			     (void *)((unsigned long)nr_requeue), uaddr2, val,
+			     opflags);
 }
 
 /**
-- 
2.25.0.rc1.19.g042ed3e048af


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V4 07/17] syscalls/io_pgetevents: Add support for time64 tests
  2020-05-22 10:51 [LTP] [PATCH V4 00/17] Syscalls: Add support for time64 variants Viresh Kumar
                   ` (5 preceding siblings ...)
  2020-05-22 10:51 ` [LTP] [PATCH V4 06/17] syscalls/futex: Add support for time64 tests Viresh Kumar
@ 2020-05-22 10:51 ` Viresh Kumar
  2020-05-22 10:51 ` [LTP] [PATCH V4 08/17] syscalls/sigwaitinfo: Migrate to new test framework Viresh Kumar
                   ` (9 subsequent siblings)
  16 siblings, 0 replies; 33+ messages in thread
From: Viresh Kumar @ 2020-05-22 10:51 UTC (permalink / raw)
  To: ltp

This adds support for time64 tests to the existing io_pgetevents()
syscall tests.

While at it, also pass mode to SAFE_OPEN() to avoid any errors when the
tests are run for multiple variants together.

Also get rid of an extra copy of local fd variable, which is incorrect.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 include/lapi/io_pgetevents.h                  | 15 ++++--
 .../syscalls/io_pgetevents/io_pgetevents01.c  | 33 +++++++++++-
 .../syscalls/io_pgetevents/io_pgetevents02.c  | 51 +++++++++++++++----
 3 files changed, 83 insertions(+), 16 deletions(-)

diff --git a/include/lapi/io_pgetevents.h b/include/lapi/io_pgetevents.h
index 3c9d5b2d7618..5bb9a60c352a 100644
--- a/include/lapi/io_pgetevents.h
+++ b/include/lapi/io_pgetevents.h
@@ -16,15 +16,20 @@
 #ifdef HAVE_LIBAIO
 #include <libaio.h>
 
-#ifndef HAVE_IO_PGETEVENTS
-int io_pgetevents(io_context_t ctx, long min_nr, long max_nr,
-		 struct io_event *events, struct timespec *timeout,
-		 sigset_t *sigmask)
+static inline int sys_io_pgetevents(io_context_t ctx, long min_nr, long max_nr,
+		struct io_event *events, void *timeout, sigset_t *sigmask)
 {
 	return tst_syscall(__NR_io_pgetevents, ctx, min_nr, max_nr, events,
 			   timeout, sigmask);
 }
-#endif /* HAVE_IO_PGETEVENTS */
+
+static inline int sys_io_pgetevents_time64(io_context_t ctx, long min_nr, long max_nr,
+		struct io_event *events, void *timeout, sigset_t *sigmask)
+{
+	return tst_syscall(__NR_io_pgetevents_time64, ctx, min_nr, max_nr,
+			   events, timeout, sigmask);
+}
+
 #endif /* HAVE_LIBAIO */
 
 #endif /* IO_PGETEVENTS_H */
diff --git a/testcases/kernel/syscalls/io_pgetevents/io_pgetevents01.c b/testcases/kernel/syscalls/io_pgetevents/io_pgetevents01.c
index e6077e47984d..fea380e52f4d 100644
--- a/testcases/kernel/syscalls/io_pgetevents/io_pgetevents01.c
+++ b/testcases/kernel/syscalls/io_pgetevents/io_pgetevents01.c
@@ -6,11 +6,32 @@
  * Basic io_pgetevents() test to receive 1 event successfully.
  */
 #include "tst_test.h"
+#include "tst_timer.h"
 #include "lapi/io_pgetevents.h"
 
 #ifdef HAVE_LIBAIO
 static int fd;
 
+static struct test_variants {
+	int (*io_pgetevents)(io_context_t ctx, long min_nr, long max_nr,
+		struct io_event *events, void *timeout, sigset_t *sigmask);
+	enum tst_ts_type type;
+	char *desc;
+} variants[] = {
+#if (__NR_io_pgetevents != __LTP__NR_INVALID_SYSCALL)
+	{ .io_pgetevents = sys_io_pgetevents, .type = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_io_pgetevents_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .io_pgetevents = sys_io_pgetevents_time64, .type = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
+static void setup(void)
+{
+	tst_res(TINFO, "Testing variant: %s", variants[tst_variant].desc);
+}
+
 static void cleanup(void)
 {
 	if (fd > 0)
@@ -19,12 +40,18 @@ static void cleanup(void)
 
 static void run(void)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	struct io_event events[1];
 	struct iocb cb, *cbs[1];
 	io_context_t ctx = 0;
+	struct tst_ts to;
 	sigset_t sigmask;
 	char data[4096];
-	int ret, fd;
+	int ret;
+
+	to.type = tv->type;
+	tst_ts_set_sec(&to, 0);
+	tst_ts_set_nsec(&to, 10000);
 
 	cbs[0] = &cb;
 	sigemptyset(&sigmask);
@@ -41,7 +68,7 @@ static void run(void)
 		tst_brk(TBROK | TERRNO, "io_submit() failed");
 
 	/* get the reply */
-	ret = io_pgetevents(ctx, 1, 1, events, NULL, &sigmask);
+	ret = tv->io_pgetevents(ctx, 1, 1, events, tst_ts_get(&to), &sigmask);
 
 	if (ret == 1)
 		tst_res(TPASS, "io_pgetevents() works as expected");
@@ -55,8 +82,10 @@ static void run(void)
 static struct tst_test test = {
 	.min_kver = "4.18",
 	.test_all = run,
+	.test_variants = ARRAY_SIZE(variants),
 	.needs_tmpdir = 1,
 	.cleanup = cleanup,
+	.setup = setup,
 };
 
 #else
diff --git a/testcases/kernel/syscalls/io_pgetevents/io_pgetevents02.c b/testcases/kernel/syscalls/io_pgetevents/io_pgetevents02.c
index 62a8afba3bf1..a15b3d0dda92 100644
--- a/testcases/kernel/syscalls/io_pgetevents/io_pgetevents02.c
+++ b/testcases/kernel/syscalls/io_pgetevents/io_pgetevents02.c
@@ -6,6 +6,7 @@
  * Basic io_pgetevents() test to check various failures.
  */
 #include "tst_test.h"
+#include "tst_timer.h"
 #include "lapi/io_pgetevents.h"
 
 #ifdef HAVE_LIBAIO
@@ -14,30 +15,55 @@ static struct io_event events[1];
 static io_context_t ctx, invalid_ctx = 0;
 static int fd, ctx_initialized;
 
+static struct tst_ts to;
+static void *bad_addr;
+
 static struct tcase {
 	char *name;
 	io_context_t *ctx;
 	long min_nr;
 	long max_nr;
 	struct io_event *events;
-	struct timespec *timeout;
+	struct tst_ts *timeout;
 	sigset_t *sigmask;
 	int exp_errno;
 } tcases[] = {
-	{"invalid ctx", &invalid_ctx, 1, 1, events, NULL, &sigmask, EINVAL},
-	{"invalid min_nr", &ctx, -1, 1, events, NULL, &sigmask, EINVAL},
-	{"invalid max_nr", &ctx, 1, -1, events, NULL, &sigmask, EINVAL},
-	{"invalid events", &ctx, 1, 1, NULL, NULL, &sigmask, EFAULT},
-	{"invalid timeout", &ctx, 1, 1, events, (void *)(0xDEAD), &sigmask, EFAULT},
-	{"invalid sigmask", &ctx, 1, 1, events, NULL, (void *)(0xDEAD), EFAULT},
+	{"invalid ctx", &invalid_ctx, 1, 1, events, &to, &sigmask, EINVAL},
+	{"invalid min_nr", &ctx, -1, 1, events, &to, &sigmask, EINVAL},
+	{"invalid max_nr", &ctx, 1, -1, events, &to, &sigmask, EINVAL},
+	{"invalid events", &ctx, 1, 1, NULL, &to, &sigmask, EFAULT},
+	{"invalid timeout", &ctx, 1, 1, events, NULL, &sigmask, EFAULT},
+	{"invalid sigmask", &ctx, 1, 1, events, &to, NULL, EFAULT},
+};
+
+static struct test_variants {
+	int (*io_pgetevents)(io_context_t ctx, long min_nr, long max_nr,
+		struct io_event *events, void *timeout, sigset_t *sigmask);
+	enum tst_ts_type type;
+	char *desc;
+} variants[] = {
+#if (__NR_io_pgetevents != __LTP__NR_INVALID_SYSCALL)
+	{ .io_pgetevents = sys_io_pgetevents, .type = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_io_pgetevents_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .io_pgetevents = sys_io_pgetevents_time64, .type = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
 };
 
 static void setup(void)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	struct iocb cb, *cbs[1];
 	char data[4096];
 	int ret;
 
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	bad_addr = tst_get_bad_addr(NULL);
+	to.type = tv->type;
+	tst_ts_set_sec(&to, 0);
+	tst_ts_set_nsec(&to, 10000);
+
 	cbs[0] = &cb;
 
 	sigemptyset(&sigmask);
@@ -69,10 +95,16 @@ static void cleanup(void)
 
 static void run(unsigned int n)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	struct tcase *tc = &tcases[n];
+	struct timespec *to;
+	sigset_t *sigmask;
+
+	sigmask = tc->sigmask ? tc->sigmask : bad_addr;
+	to = tc->timeout ? tc->timeout : bad_addr;
 
-	TEST(io_pgetevents(*tc->ctx, tc->min_nr, tc->max_nr, tc->events,
-			   tc->timeout, tc->sigmask));
+	TEST(tv->io_pgetevents(*tc->ctx, tc->min_nr, tc->max_nr, tc->events, to,
+			       sigmask));
 
 	if (TST_RET == 1) {
 		tst_res(TFAIL, "%s: io_pgetevents() passed unexpectedly",
@@ -95,6 +127,7 @@ static struct tst_test test = {
 	.needs_tmpdir = 1,
 	.tcnt = ARRAY_SIZE(tcases),
 	.test = run,
+	.test_variants = ARRAY_SIZE(variants),
 	.setup = setup,
 	.cleanup = cleanup,
 };
-- 
2.25.0.rc1.19.g042ed3e048af


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V4 08/17] syscalls/sigwaitinfo: Migrate to new test framework
  2020-05-22 10:51 [LTP] [PATCH V4 00/17] Syscalls: Add support for time64 variants Viresh Kumar
                   ` (6 preceding siblings ...)
  2020-05-22 10:51 ` [LTP] [PATCH V4 07/17] syscalls/io_pgetevents: " Viresh Kumar
@ 2020-05-22 10:51 ` Viresh Kumar
  2020-05-22 10:51 ` [LTP] [PATCH V4 09/17] syscalls/rt_sigtimedwait: Add support for time64 tests Viresh Kumar
                   ` (8 subsequent siblings)
  16 siblings, 0 replies; 33+ messages in thread
From: Viresh Kumar @ 2020-05-22 10:51 UTC (permalink / raw)
  To: ltp

This migrates the sigwaitinfo tests to use the new test framework.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 .../syscalls/sigwaitinfo/sigwaitinfo01.c      | 209 +++++++-----------
 1 file changed, 84 insertions(+), 125 deletions(-)

diff --git a/testcases/kernel/syscalls/sigwaitinfo/sigwaitinfo01.c b/testcases/kernel/syscalls/sigwaitinfo/sigwaitinfo01.c
index 6a30c27f6f2f..1b976a271d28 100644
--- a/testcases/kernel/syscalls/sigwaitinfo/sigwaitinfo01.c
+++ b/testcases/kernel/syscalls/sigwaitinfo/sigwaitinfo01.c
@@ -1,93 +1,58 @@
-/*
- * Copyright (c) Jiri Palecek<jpalecek@web.de>, 2009
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like.  Any license provided herein, whether implied or
- * otherwise, applies only to this software file.  Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-#include "test.h"
+// SPDX-License-Identifier: GPL-2.0-or-later
+/* Copyright (c) Jiri Palecek<jpalecek@web.de>, 2009 */
+
+#include "tst_test.h"
 #include <errno.h>
+#include <stdlib.h>
 #include <signal.h>
-#include "../utils/include_j_h.h"
-#include "../utils/common_j_h.c"
 #include <limits.h>
 #include "lapi/syscalls.h"
+#include "tst_sig_proc.h"
 
 #define SUCCEED_OR_DIE(syscall, message, ...)				 \
 	(errno = 0,							 \
 		({int ret=syscall(__VA_ARGS__);				 \
 			if (ret==-1)					 \
-				tst_brkm(TBROK|TERRNO, cleanup, message);\
+				tst_brk(TBROK|TERRNO, message);\
 			ret;}))
 
-/* Report success iff TEST_RETURN and TEST_ERRNO are equal to
+/* Report success iff TST_RET and TST_ERR are equal to
 	 exp_return and exp_errno, resp., and cond is true. If cond is not
 	 true, report condition_errmsg
 */
-static void report_success_cond(const char *func, const char *file, int line,
+static void report_success_cond(const char *func, int line,
 				long exp_return, int exp_errno, int condition,
 				char *condition_errmsg)
 {
-	if (exp_return == TEST_RETURN
-	    && (exp_return != -1 || exp_errno == TEST_ERRNO))
+	if (exp_return == TST_RET
+	    && (exp_return != -1 || exp_errno == TST_ERR))
 		if (condition)
-			tst_resm(TPASS, "Test passed");
+			tst_res(TPASS, "%s (%d): Test passed", func, line);
 		else
-			tst_resm(TFAIL, "%s (%s: %d): %s", func, file, line,
+			tst_res(TFAIL, "%s (%d): %s", func, line,
 				 condition_errmsg);
-	else if (TEST_RETURN != -1)
-		tst_resm(TFAIL,
-			 "%s (%s: %d): Unexpected return value; expected %ld, got %ld",
-			 func, file, line, exp_return, TEST_RETURN);
+	else if (TST_RET != -1)
+		tst_res(TFAIL,
+			 "%s (%d): Unexpected return value; expected %ld, got %ld",
+			 func, line, exp_return, TST_RET);
 	else
-		tst_resm(TFAIL | TTERRNO, "%s (%s: %d): Unexpected failure",
-			 func, file, line);
+		tst_res(TFAIL | TTERRNO, "%s (%d): Unexpected failure",
+			 func, line);
 }
 
 #define REPORT_SUCCESS_COND(exp_return, exp_errno, condition, condition_errmsg)	\
-	report_success_cond(__FUNCTION__, __FILE__, __LINE__, exp_return, exp_errno, condition, condition_errmsg);
+	report_success_cond(__FUNCTION__, __LINE__, exp_return, exp_errno, condition, condition_errmsg);
 
-/* Report success iff TEST_RETURN and TEST_ERRNO are equal to
+/* Report success iff TST_RET and TST_ERR are equal to
 	 exp_return and exp_errno, resp.
 */
 #define REPORT_SUCCESS(exp_return, exp_errno)					\
 	REPORT_SUCCESS_COND(exp_return, exp_errno, 1, "");
 
-static void cleanup(void);
-
 static void empty_handler(int sig)
 {
 }
 
-static void setup(void)
-{
-	tst_sig(FORK, DEF_HANDLER, cleanup);
-	signal(SIGUSR1, empty_handler);
-	signal(SIGALRM, empty_handler);
-	signal(SIGUSR2, SIG_IGN);
-
-	TEST_PAUSE;
-}
-
-static void cleanup(void)
-{
-}
-
 typedef int (*swi_func) (const sigset_t * set, siginfo_t * info,
 			 struct timespec * timeout);
 typedef void (*test_func) (swi_func, int);
@@ -110,7 +75,6 @@ static int my_sigwait(const sigset_t * set, siginfo_t * info,
 static int my_sigwaitinfo(const sigset_t * set, siginfo_t * info,
 			  struct timespec *timeout)
 {
-
 	return sigwaitinfo(set, info);
 }
 #endif
@@ -119,7 +83,6 @@ static int my_sigwaitinfo(const sigset_t * set, siginfo_t * info,
 static int my_sigtimedwait(const sigset_t * set, siginfo_t * info,
 			   struct timespec *timeout)
 {
-
 	return sigtimedwait(set, info, timeout);
 }
 #endif
@@ -129,7 +92,7 @@ static int my_rt_sigtimedwait(const sigset_t * set, siginfo_t * info,
 			      struct timespec *timeout)
 {
 	/* _NSIG is always the right number of bits of signal map for all arches */
-	return ltp_syscall(__NR_rt_sigtimedwait, set, info, timeout, _NSIG/8);
+	return tst_syscall(__NR_rt_sigtimedwait, set, info, timeout, _NSIG/8);
 }
 #endif
 
@@ -141,12 +104,13 @@ void test_empty_set(swi_func sigwaitinfo, int signo)
 
 	SUCCEED_OR_DIE(sigemptyset, "sigemptyset failed", &sigs);
 	/* Run a child that will wake us up */
-	child = create_sig_proc(100000, signo, UINT_MAX);
+	child = create_sig_proc(signo, INT_MAX, 100000);
 
 	TEST(sigwaitinfo(&sigs, &si, NULL));
 	REPORT_SUCCESS(-1, EINTR);
 
-	kill(child, SIGTERM);
+	SAFE_KILL(child, SIGTERM);
+	SAFE_WAIT(NULL);
 }
 
 void test_timeout(swi_func sigwaitinfo, int signo)
@@ -159,12 +123,13 @@ void test_timeout(swi_func sigwaitinfo, int signo)
 	SUCCEED_OR_DIE(sigemptyset, "sigemptyset failed", &sigs);
 
 	/* Run a child that will wake us up */
-	child = create_sig_proc(100000, signo, UINT_MAX);
+	child = create_sig_proc(signo, INT_MAX, 100000);
 
 	TEST(sigwaitinfo(&sigs, &si, &ts));
 	REPORT_SUCCESS(-1, EAGAIN);
 
-	kill(child, SIGTERM);
+	SAFE_KILL(child, SIGTERM);
+	SAFE_WAIT(NULL);
 }
 
 /* Note: sigwait-ing for a signal that is not blocked is unspecified
@@ -180,14 +145,15 @@ void test_unmasked_matching(swi_func sigwaitinfo, int signo)
 	SUCCEED_OR_DIE(sigaddset, "sigaddset failed", &sigs, signo);
 
 	/* Run a child that will wake us up */
-	child = create_sig_proc(100000, signo, UINT_MAX);
+	child = create_sig_proc(signo, INT_MAX, 100000);
 
 	TEST(sigwaitinfo(&sigs, &si, NULL));
 	REPORT_SUCCESS_COND(signo, 0, si.si_pid == child
 			    && si.si_code == SI_USER
 			    && si.si_signo == signo, "Struct siginfo mismatch");
 
-	kill(child, SIGTERM);
+	SAFE_KILL(child, SIGTERM);
+	SAFE_WAIT(NULL);
 }
 
 void test_unmasked_matching_noinfo(swi_func sigwaitinfo, int signo)
@@ -198,12 +164,13 @@ void test_unmasked_matching_noinfo(swi_func sigwaitinfo, int signo)
 	SUCCEED_OR_DIE(sigemptyset, "sigemptyset failed", &sigs);
 	SUCCEED_OR_DIE(sigaddset, "sigaddset failed", &sigs, signo);
 	/* Run a child that will wake us up */
-	child = create_sig_proc(100000, signo, UINT_MAX);
+	child = create_sig_proc(signo, INT_MAX, 100000);
 
 	TEST(sigwaitinfo(&sigs, NULL, NULL));
 	REPORT_SUCCESS(signo, 0);
 
-	kill(child, SIGTERM);
+	SAFE_KILL(child, SIGTERM);
+	SAFE_WAIT(NULL);
 }
 
 void test_masked_matching(swi_func sigwaitinfo, int signo)
@@ -224,7 +191,7 @@ void test_masked_matching(swi_func sigwaitinfo, int signo)
 	SUCCEED_OR_DIE(sigdelset, "sigaddset failed", &sigs, SIGCHLD);
 
 	/* Run a child that will wake us up */
-	child = create_sig_proc(0, signo, 1);
+	child = create_sig_proc(signo, 1, 0);
 
 	TEST(sigwaitinfo(&sigs, &si, NULL));
 	REPORT_SUCCESS_COND(signo, 0, si.si_pid == child
@@ -234,13 +201,14 @@ void test_masked_matching(swi_func sigwaitinfo, int signo)
 	SUCCEED_OR_DIE(sigprocmask, "restoring original signal mask failed",
 		       SIG_SETMASK, &oldmask, &oldmask);
 
-	tst_count--;
-
 	if (sigismember(&oldmask, signo))
-		tst_resm(TPASS, "sigwaitinfo restored the original mask");
+		tst_res(TPASS, "sigwaitinfo restored the original mask");
 	else
-		tst_resm(TFAIL,
+		tst_res(TFAIL,
 			 "sigwaitinfo failed to restore the original mask");
+
+	SAFE_KILL(child, SIGTERM);
+	SAFE_WAIT(NULL);
 }
 
 void test_masked_matching_rt(swi_func sigwaitinfo, int signo)
@@ -265,12 +233,12 @@ void test_masked_matching_rt(swi_func sigwaitinfo, int signo)
 	SUCCEED_OR_DIE(sigdelset, "sigdelset failed", &sigs, SIGCHLD);
 
 	/* Run a child that will wake us up */
-	child[0] = create_sig_proc(0, signo, 1);
-	child[1] = create_sig_proc(0, signo + 1, 1);
+	child[0] = create_sig_proc(signo, 1, 0);
+	child[1] = create_sig_proc(signo + 1, 1, 0);
 
 	/* Ensure that the signals have been sent */
-	waitpid(child[0], &status, 0);
-	waitpid(child[1], &status, 0);
+	SAFE_WAITPID(child[0], &status, 0);
+	SAFE_WAITPID(child[1], &status, 0);
 
 	TEST(sigwaitinfo(&sigs, &si, NULL));
 	REPORT_SUCCESS_COND(signo, 0, si.si_pid == child[0]
@@ -278,7 +246,6 @@ void test_masked_matching_rt(swi_func sigwaitinfo, int signo)
 			    && si.si_signo == signo, "Struct siginfo mismatch");
 
 	/* eat the other signal */
-	tst_count--;
 	TEST(sigwaitinfo(&sigs, &si, NULL));
 	REPORT_SUCCESS_COND(signo + 1, 0, si.si_pid == child[1]
 			    && si.si_code == SI_USER
@@ -288,12 +255,10 @@ void test_masked_matching_rt(swi_func sigwaitinfo, int signo)
 	SUCCEED_OR_DIE(sigprocmask, "restoring original signal mask failed",
 		       SIG_SETMASK, &oldmask, &oldmask);
 
-	tst_count--;
-
 	if (sigismember(&oldmask, signo))
-		tst_resm(TPASS, "sigwaitinfo restored the original mask");
+		tst_res(TPASS, "sigwaitinfo restored the original mask");
 	else
-		tst_resm(TFAIL,
+		tst_res(TFAIL,
 			 "sigwaitinfo failed to restore the original mask");
 }
 
@@ -314,7 +279,7 @@ void test_masked_matching_noinfo(swi_func sigwaitinfo, int signo)
 	SUCCEED_OR_DIE(sigdelset, "sigaddset failed", &sigs, SIGCHLD);
 
 	/* Run a child that will wake us up */
-	child = create_sig_proc(0, signo, 1);
+	child = create_sig_proc(signo, 1, 0);
 
 	TEST(sigwaitinfo(&sigs, NULL, NULL));
 	REPORT_SUCCESS(signo, 0);
@@ -322,14 +287,14 @@ void test_masked_matching_noinfo(swi_func sigwaitinfo, int signo)
 	SUCCEED_OR_DIE(sigprocmask, "restoring original signal mask failed",
 		       SIG_SETMASK, &oldmask, &oldmask);
 
-	tst_count--;
-
 	if (sigismember(&oldmask, signo))
-		tst_resm(TPASS, "sigwaitinfo restored the original mask");
+		tst_res(TPASS, "sigwaitinfo restored the original mask");
 	else
-		tst_resm(TFAIL,
+		tst_res(TFAIL,
 			 "sigwaitinfo failed to restore the original mask");
 
+	SAFE_KILL(child, SIGTERM);
+	SAFE_WAIT(NULL);
 }
 
 void test_bad_address(swi_func sigwaitinfo, int signo)
@@ -349,7 +314,7 @@ void test_bad_address(swi_func sigwaitinfo, int signo)
 	SUCCEED_OR_DIE(sigdelset, "sigaddset failed", &sigs, SIGCHLD);
 
 	/* Run a child that will wake us up */
-	child = create_sig_proc(0, signo, 1);
+	child = create_sig_proc(signo, 1, 0);
 
 	TEST(sigwaitinfo(&sigs, (void *)1, NULL));
 	REPORT_SUCCESS(-1, EFAULT);
@@ -357,7 +322,8 @@ void test_bad_address(swi_func sigwaitinfo, int signo)
 	SUCCEED_OR_DIE(sigprocmask, "sigprocmask failed", SIG_SETMASK, &oldmask,
 		       &oldmask);
 
-	kill(child, SIGTERM);
+	SAFE_KILL(child, SIGTERM);
+	SAFE_WAIT(NULL);
 }
 
 void test_bad_address2(swi_func sigwaitinfo, int signo)
@@ -367,7 +333,7 @@ void test_bad_address2(swi_func sigwaitinfo, int signo)
 
 	switch (pid = fork()) {
 	case -1:
-		tst_brkm(TBROK | TERRNO, NULL, "fork() failed");
+		tst_brk(TBROK | TERRNO, "fork() failed");
 	case 0:
 		signal(SIGSEGV, SIG_DFL);
 
@@ -377,31 +343,31 @@ void test_bad_address2(swi_func sigwaitinfo, int signo)
 		 */
 		TEST(sigwaitinfo((void *)1, NULL, NULL));
 
-		if (TEST_RETURN == -1 && TEST_ERRNO == EFAULT)
+		if (TST_RET == -1 && TST_ERR == EFAULT)
 			_exit(0);
 
-		tst_resm(TINFO | TTERRNO, "swi_func returned: %ld",
-			TEST_RETURN);
+		tst_res(TINFO | TTERRNO, "swi_func returned: %ld",
+			TST_RET);
 		_exit(1);
 		break;
 	default:
 		break;
 	}
 
-	SUCCEED_OR_DIE(waitpid, "waitpid failed", pid, &status, 0);
+	SAFE_WAITPID(pid, &status, 0);
 
 	if ((WIFSIGNALED(status) && WTERMSIG(status) == SIGSEGV)
 		|| (WIFEXITED(status) && WEXITSTATUS(status) == 0)) {
-		tst_resm(TPASS, "Test passed");
+		tst_res(TPASS, "Test passed");
 		return;
 	}
 
 	if (WIFEXITED(status)) {
-		tst_resm(TFAIL, "Unrecognised child exit code: %d",
+		tst_res(TFAIL, "Unrecognised child exit code: %d",
 			WEXITSTATUS(status));
 	}
 	if (WIFSIGNALED(status)) {
-		tst_resm(TFAIL, "Unrecognised child termsig: %d",
+		tst_res(TFAIL, "Unrecognised child termsig: %d",
 			WTERMSIG(status));
 	}
 }
@@ -474,38 +440,31 @@ struct test_desc {
 #endif
 };
 
-#if defined TEST_SIGWAITINFO
-const char *TCID = "sigwaitinfo01";
-#elif defined TEST_RT_SIGTIMEDWAIT
-const char *TCID = "rt_sigtimedwait01";
-#elif defined TEST_SIGTIMEDWAIT
-const char *TCID = "sigtimedwait01";
-#elif defined TEST_SIGWAIT
-const char *TCID = "sigwait01";
-#endif
-
-int TST_TOTAL = ARRAY_SIZE(tests);
-
-int main(int argc, char **argv)
+static void run(unsigned int i)
 {
-	unsigned i;
-	int lc;
-
-	tst_parse_opts(argc, argv, NULL, NULL);
+	struct test_desc *tc = &tests[i];
 
-	setup();
+	tc->tf(tc->swi, tc->signo);
+}
 
-	for (lc = 0; TEST_LOOPING(lc); ++lc) {
-		tst_count = 0;
+static void setup(void)
+{
+	signal(SIGUSR1, empty_handler);
+	signal(SIGALRM, empty_handler);
+	signal(SIGUSR2, SIG_IGN);
 
-		for (i = 0; i < ARRAY_SIZE(tests); i++) {
-			alarm(10);	/* arrange a 10 second timeout */
-			tst_resm(TINFO, "%p, %d", tests[i].swi, tests[i].signo);
-			tests[i].tf(tests[i].swi, tests[i].signo);
-		}
-		alarm(0);
-	}
+	alarm(10);	/* arrange a 10 second timeout */
+}
 
-	cleanup();
-	tst_exit();
+static void cleanup(void)
+{
+	alarm(0);
 }
+
+static struct tst_test test = {
+	.test= run,
+	.tcnt = ARRAY_SIZE(tests),
+	.setup = setup,
+	.cleanup = cleanup,
+	.forks_child = 1,
+};
-- 
2.25.0.rc1.19.g042ed3e048af


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V4 09/17] syscalls/rt_sigtimedwait: Add support for time64 tests
  2020-05-22 10:51 [LTP] [PATCH V4 00/17] Syscalls: Add support for time64 variants Viresh Kumar
                   ` (7 preceding siblings ...)
  2020-05-22 10:51 ` [LTP] [PATCH V4 08/17] syscalls/sigwaitinfo: Migrate to new test framework Viresh Kumar
@ 2020-05-22 10:51 ` Viresh Kumar
  2020-05-22 10:51 ` [LTP] [PATCH V4 10/17] syscalls/mq_timed{send|receive}: " Viresh Kumar
                   ` (7 subsequent siblings)
  16 siblings, 0 replies; 33+ messages in thread
From: Viresh Kumar @ 2020-05-22 10:51 UTC (permalink / raw)
  To: ltp

This adds support for time64 tests to the existing rt_sigtimedwait()
syscall tests.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 .../syscalls/sigwaitinfo/sigwaitinfo01.c      | 112 +++++++++++++-----
 1 file changed, 80 insertions(+), 32 deletions(-)

diff --git a/testcases/kernel/syscalls/sigwaitinfo/sigwaitinfo01.c b/testcases/kernel/syscalls/sigwaitinfo/sigwaitinfo01.c
index 1b976a271d28..05e62999ca6c 100644
--- a/testcases/kernel/syscalls/sigwaitinfo/sigwaitinfo01.c
+++ b/testcases/kernel/syscalls/sigwaitinfo/sigwaitinfo01.c
@@ -2,6 +2,7 @@
 /* Copyright (c) Jiri Palecek<jpalecek@web.de>, 2009 */
 
 #include "tst_test.h"
+#include "tst_timer.h"
 #include <errno.h>
 #include <stdlib.h>
 #include <signal.h>
@@ -54,12 +55,12 @@ static void empty_handler(int sig)
 }
 
 typedef int (*swi_func) (const sigset_t * set, siginfo_t * info,
-			 struct timespec * timeout);
-typedef void (*test_func) (swi_func, int);
+			 void * timeout);
+typedef void (*test_func) (swi_func, int, enum tst_ts_type type);
 
 #ifdef TEST_SIGWAIT
 static int my_sigwait(const sigset_t * set, siginfo_t * info,
-		      struct timespec *timeout)
+		      void *timeout)
 {
 	int ret;
 	int err = sigwait(set, &ret);
@@ -73,7 +74,7 @@ static int my_sigwait(const sigset_t * set, siginfo_t * info,
 
 #ifdef TEST_SIGWAITINFO
 static int my_sigwaitinfo(const sigset_t * set, siginfo_t * info,
-			  struct timespec *timeout)
+			  void *timeout)
 {
 	return sigwaitinfo(set, info);
 }
@@ -81,7 +82,7 @@ static int my_sigwaitinfo(const sigset_t * set, siginfo_t * info,
 
 #ifdef TEST_SIGTIMEDWAIT
 static int my_sigtimedwait(const sigset_t * set, siginfo_t * info,
-			   struct timespec *timeout)
+			   void *timeout)
 {
 	return sigtimedwait(set, info, timeout);
 }
@@ -89,14 +90,23 @@ static int my_sigtimedwait(const sigset_t * set, siginfo_t * info,
 
 #ifdef TEST_RT_SIGTIMEDWAIT
 static int my_rt_sigtimedwait(const sigset_t * set, siginfo_t * info,
-			      struct timespec *timeout)
+			      void *timeout)
 {
 	/* _NSIG is always the right number of bits of signal map for all arches */
 	return tst_syscall(__NR_rt_sigtimedwait, set, info, timeout, _NSIG/8);
 }
+
+#if (__NR_rt_sigtimedwait_time64 != __LTP__NR_INVALID_SYSCALL)
+static int my_rt_sigtimedwait_time64(const sigset_t * set, siginfo_t * info,
+				     void *timeout)
+{
+	/* _NSIG is always the right number of bits of signal map for all arches */
+	return tst_syscall(__NR_rt_sigtimedwait_time64, set, info, timeout, _NSIG/8);
+}
+#endif
 #endif
 
-void test_empty_set(swi_func sigwaitinfo, int signo)
+void test_empty_set(swi_func sigwaitinfo, int signo, enum tst_ts_type type)
 {
 	sigset_t sigs;
 	siginfo_t si;
@@ -113,19 +123,23 @@ void test_empty_set(swi_func sigwaitinfo, int signo)
 	SAFE_WAIT(NULL);
 }
 
-void test_timeout(swi_func sigwaitinfo, int signo)
+void test_timeout(swi_func sigwaitinfo, int signo, enum tst_ts_type type)
 {
 	sigset_t sigs;
 	siginfo_t si;
 	pid_t child;
-	struct timespec ts = {.tv_sec = 1 };
+	struct tst_ts ts;
+
+	ts.type = type;
+	tst_ts_set_sec(&ts, 1);
+	tst_ts_set_nsec(&ts, 0);
 
 	SUCCEED_OR_DIE(sigemptyset, "sigemptyset failed", &sigs);
 
 	/* Run a child that will wake us up */
 	child = create_sig_proc(signo, INT_MAX, 100000);
 
-	TEST(sigwaitinfo(&sigs, &si, &ts));
+	TEST(sigwaitinfo(&sigs, &si, tst_ts_get(&ts)));
 	REPORT_SUCCESS(-1, EAGAIN);
 
 	SAFE_KILL(child, SIGTERM);
@@ -135,7 +149,8 @@ void test_timeout(swi_func sigwaitinfo, int signo)
 /* Note: sigwait-ing for a signal that is not blocked is unspecified
  * by POSIX; but works for non-ignored signals under Linux
  */
-void test_unmasked_matching(swi_func sigwaitinfo, int signo)
+void test_unmasked_matching(swi_func sigwaitinfo, int signo,
+			    enum tst_ts_type type)
 {
 	sigset_t sigs;
 	siginfo_t si;
@@ -156,7 +171,8 @@ void test_unmasked_matching(swi_func sigwaitinfo, int signo)
 	SAFE_WAIT(NULL);
 }
 
-void test_unmasked_matching_noinfo(swi_func sigwaitinfo, int signo)
+void test_unmasked_matching_noinfo(swi_func sigwaitinfo, int signo,
+				   enum tst_ts_type type)
 {
 	sigset_t sigs;
 	pid_t child;
@@ -173,7 +189,8 @@ void test_unmasked_matching_noinfo(swi_func sigwaitinfo, int signo)
 	SAFE_WAIT(NULL);
 }
 
-void test_masked_matching(swi_func sigwaitinfo, int signo)
+void test_masked_matching(swi_func sigwaitinfo, int signo,
+			  enum tst_ts_type type)
 {
 	sigset_t sigs, oldmask;
 	siginfo_t si;
@@ -211,7 +228,8 @@ void test_masked_matching(swi_func sigwaitinfo, int signo)
 	SAFE_WAIT(NULL);
 }
 
-void test_masked_matching_rt(swi_func sigwaitinfo, int signo)
+void test_masked_matching_rt(swi_func sigwaitinfo, int signo,
+			     enum tst_ts_type type)
 {
 	sigset_t sigs, oldmask;
 	siginfo_t si;
@@ -262,7 +280,8 @@ void test_masked_matching_rt(swi_func sigwaitinfo, int signo)
 			 "sigwaitinfo failed to restore the original mask");
 }
 
-void test_masked_matching_noinfo(swi_func sigwaitinfo, int signo)
+void test_masked_matching_noinfo(swi_func sigwaitinfo, int signo,
+				 enum tst_ts_type type)
 {
 	sigset_t sigs, oldmask;
 	pid_t child;
@@ -297,7 +316,7 @@ void test_masked_matching_noinfo(swi_func sigwaitinfo, int signo)
 	SAFE_WAIT(NULL);
 }
 
-void test_bad_address(swi_func sigwaitinfo, int signo)
+void test_bad_address(swi_func sigwaitinfo, int signo, enum tst_ts_type type)
 {
 	sigset_t sigs, oldmask;
 	pid_t child;
@@ -326,7 +345,7 @@ void test_bad_address(swi_func sigwaitinfo, int signo)
 	SAFE_WAIT(NULL);
 }
 
-void test_bad_address2(swi_func sigwaitinfo, int signo)
+void test_bad_address2(swi_func sigwaitinfo, int signo, enum tst_ts_type type)
 {
 	pid_t pid;
 	int status;
@@ -372,7 +391,7 @@ void test_bad_address2(swi_func sigwaitinfo, int signo)
 	}
 }
 
-void test_bad_address3(swi_func sigwaitinfo, int signo)
+void test_bad_address3(swi_func sigwaitinfo, int signo, enum tst_ts_type type)
 {
 	sigset_t sigs;
 	SUCCEED_OR_DIE(sigemptyset, "sigemptyset failed", &sigs);
@@ -388,28 +407,28 @@ struct test_desc {
 } tests[] = {
 #ifdef TEST_RT_SIGTIMEDWAIT
 	{
-	test_empty_set, my_rt_sigtimedwait, SIGUSR1}, {
-	test_unmasked_matching, my_rt_sigtimedwait, SIGUSR1}, {
-	test_masked_matching, my_rt_sigtimedwait, SIGUSR1}, {
-	test_unmasked_matching_noinfo, my_rt_sigtimedwait, SIGUSR1}, {
-	test_masked_matching_noinfo, my_rt_sigtimedwait, SIGUSR1}, {
-	test_bad_address, my_rt_sigtimedwait, SIGUSR1}, {
-	test_bad_address2, my_rt_sigtimedwait, SIGUSR1}, {
-	test_bad_address3, my_rt_sigtimedwait, SIGUSR1}, {
-	test_timeout, my_rt_sigtimedwait, 0},
+	test_empty_set, NULL, SIGUSR1}, {
+	test_unmasked_matching, NULL, SIGUSR1}, {
+	test_masked_matching, NULL, SIGUSR1}, {
+	test_unmasked_matching_noinfo, NULL, SIGUSR1}, {
+	test_masked_matching_noinfo, NULL, SIGUSR1}, {
+	test_bad_address, NULL, SIGUSR1}, {
+	test_bad_address2, NULL, SIGUSR1}, {
+	test_bad_address3, NULL, SIGUSR1}, {
+	test_timeout, NULL, 0},
 	    /* Special cases */
 	    /* 1: sigwaitinfo does respond to ignored signal */
 	{
-	test_masked_matching, my_rt_sigtimedwait, SIGUSR2},
+	test_masked_matching, NULL, SIGUSR2},
 	    /* 2: An ignored signal doesn't cause sigwaitinfo to return EINTR */
 	{
-	test_timeout, my_rt_sigtimedwait, SIGUSR2},
+	test_timeout, NULL, SIGUSR2},
 	    /* 3: The handler is not called when the signal is waited for by sigwaitinfo */
 	{
-	test_masked_matching, my_rt_sigtimedwait, SIGTERM},
+	test_masked_matching, NULL, SIGTERM},
 	    /* 4: Simultaneous realtime signals are delivered in the order of increasing signal number */
 	{
-	test_masked_matching_rt, my_rt_sigtimedwait, -1},
+	test_masked_matching_rt, NULL, -1},
 #endif
 #if defined TEST_SIGWAIT
 	{
@@ -440,15 +459,43 @@ struct test_desc {
 #endif
 };
 
+static struct test_variants {
+	swi_func swi;
+	enum tst_ts_type type;
+	char *desc;
+} variants[] = {
+#ifdef TEST_RT_SIGTIMEDWAIT
+
+#if (__NR_rt_sigtimedwait != __LTP__NR_INVALID_SYSCALL)
+	{ .swi = my_rt_sigtimedwait, .type = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_rt_sigtimedwait_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .swi = my_rt_sigtimedwait_time64, .type = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+
+#else /* !TEST_RT_SIGTIMEDWAIT */
+
+	{ .swi = NULL, .type = TST_LIBC_TIMESPEC, .desc = "syscall with libc spec"},
+
+#endif /* TEST_RT_SIGTIMEDWAIT */
+};
+
 static void run(unsigned int i)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	struct test_desc *tc = &tests[i];
+	swi_func swi;
 
-	tc->tf(tc->swi, tc->signo);
+	swi = tv->swi ? tv->swi : tc->swi;
+
+	tc->tf(swi, tc->signo, tv->type);
 }
 
 static void setup(void)
 {
+	tst_res(TINFO, "Testing variant: %s", variants[tst_variant].desc);
+
 	signal(SIGUSR1, empty_handler);
 	signal(SIGALRM, empty_handler);
 	signal(SIGUSR2, SIG_IGN);
@@ -464,6 +511,7 @@ static void cleanup(void)
 static struct tst_test test = {
 	.test= run,
 	.tcnt = ARRAY_SIZE(tests),
+	.test_variants = ARRAY_SIZE(variants),
 	.setup = setup,
 	.cleanup = cleanup,
 	.forks_child = 1,
-- 
2.25.0.rc1.19.g042ed3e048af


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V4 10/17] syscalls/mq_timed{send|receive}: Add support for time64 tests
  2020-05-22 10:51 [LTP] [PATCH V4 00/17] Syscalls: Add support for time64 variants Viresh Kumar
                   ` (8 preceding siblings ...)
  2020-05-22 10:51 ` [LTP] [PATCH V4 09/17] syscalls/rt_sigtimedwait: Add support for time64 tests Viresh Kumar
@ 2020-05-22 10:51 ` Viresh Kumar
  2020-05-22 10:51 ` [LTP] [PATCH V4 11/17] syscalls/recvmmsg: " Viresh Kumar
                   ` (6 subsequent siblings)
  16 siblings, 0 replies; 33+ messages in thread
From: Viresh Kumar @ 2020-05-22 10:51 UTC (permalink / raw)
  To: ltp

This adds support for time64 tests to the existing
mq_timed{send|receive}() syscall tests.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 include/tst_timer.h                           | 41 ++++++++
 .../mq_timedreceive/mq_timedreceive01.c       | 92 ++++++++++++------
 .../syscalls/mq_timedsend/mq_timedsend01.c    | 96 +++++++++++++------
 testcases/kernel/syscalls/utils/mq_timed.h    | 42 +++-----
 4 files changed, 182 insertions(+), 89 deletions(-)

diff --git a/include/tst_timer.h b/include/tst_timer.h
index 11869257c3d7..144acfe7b8f9 100644
--- a/include/tst_timer.h
+++ b/include/tst_timer.h
@@ -14,6 +14,7 @@
 
 #include <sched.h>
 #include <sys/time.h>
+#include <mqueue.h>
 #include <time.h>
 #include "tst_test.h"
 #include "lapi/common_timers.h"
@@ -260,6 +261,46 @@ static inline int sys_futex_time64(int *uaddr, int futex_op, int val, void *to,
 	return tst_syscall(__NR_futex_time64, uaddr, futex_op, val, to, uaddr2, val3);
 }
 
+static inline int libc_mq_timedsend(mqd_t mqdes, const char *msg_ptr,
+		size_t msg_len, unsigned int msg_prio, void *abs_timeout)
+{
+	return mq_timedsend(mqdes, msg_ptr, msg_len, msg_prio, abs_timeout);
+}
+
+static inline int sys_mq_timedsend(mqd_t mqdes, const char *msg_ptr,
+		size_t msg_len, unsigned int msg_prio, void *abs_timeout)
+{
+	return tst_syscall(__NR_mq_timedsend, mqdes, msg_ptr, msg_len, msg_prio,
+			   abs_timeout);
+}
+
+static inline int sys_mq_timedsend64(mqd_t mqdes, const char *msg_ptr,
+		size_t msg_len, unsigned int msg_prio, void *abs_timeout)
+{
+	return tst_syscall(__NR_mq_timedsend_time64, mqdes, msg_ptr, msg_len,
+			   msg_prio, abs_timeout);
+}
+
+static inline ssize_t libc_mq_timedreceive(mqd_t mqdes, char *msg_ptr,
+		size_t msg_len, unsigned int *msg_prio, void *abs_timeout)
+{
+	return mq_timedreceive(mqdes, msg_ptr, msg_len, msg_prio, abs_timeout);
+}
+
+static inline ssize_t sys_mq_timedreceive(mqd_t mqdes, char *msg_ptr,
+		size_t msg_len, unsigned int *msg_prio, void *abs_timeout)
+{
+	return tst_syscall(__NR_mq_timedreceive, mqdes, msg_ptr, msg_len,
+			   msg_prio, abs_timeout);
+}
+
+static inline ssize_t sys_mq_timedreceive64(mqd_t mqdes, char *msg_ptr,
+		size_t msg_len, unsigned int *msg_prio, void *abs_timeout)
+{
+	return tst_syscall(__NR_mq_timedreceive_time64, mqdes, msg_ptr, msg_len,
+			   msg_prio, abs_timeout);
+}
+
 static inline int libc_sched_rr_get_interval(pid_t pid, void *ts)
 {
 	return sched_rr_get_interval(pid, ts);
diff --git a/testcases/kernel/syscalls/mq_timedreceive/mq_timedreceive01.c b/testcases/kernel/syscalls/mq_timedreceive/mq_timedreceive01.c
index 1be515ced671..876b54c81332 100644
--- a/testcases/kernel/syscalls/mq_timedreceive/mq_timedreceive01.c
+++ b/testcases/kernel/syscalls/mq_timedreceive/mq_timedreceive01.c
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (c) Crackerjack Project., 2007-2008, Hitachi, Ltd
  * Copyright (c) 2017 Petr Vorel <pvorel@suse.cz>
@@ -6,19 +7,6 @@
  * Takahiro Yasui <takahiro.yasui.mp@hitachi.com>,
  * Yumiko Sugita <yumiko.sugita.yf@hitachi.com>,
  * Satoshi Fujiwara <sa-fuji@sdl.hitachi.co.jp>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it would be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <errno.h>
@@ -28,7 +16,7 @@ static int fd, fd_root, fd_nonblock, fd_maxint = INT_MAX - 1, fd_invalid = -1;
 
 #include "mq_timed.h"
 
-static struct timespec ts;
+static struct tst_ts ts;
 
 static struct test_case tcase[] = {
 	{
@@ -95,21 +83,27 @@ static struct test_case tcase[] = {
 	{
 		.fd = &fd,
 		.len = 16,
-		.rq = &(struct timespec) {.tv_sec = -1, .tv_nsec = 0},
+		.tv_sec = -1,
+		.tv_nsec = 0,
+		.rq = &ts,
 		.ret = -1,
 		.err = EINVAL,
 	},
 	{
 		.fd = &fd,
 		.len = 16,
-		.rq = &(struct timespec) {.tv_sec = 0, .tv_nsec = -1},
+		.tv_sec = 0,
+		.tv_nsec = -1,
+		.rq = &ts,
 		.ret = -1,
 		.err = EINVAL,
 	},
 	{
 		.fd = &fd,
 		.len = 16,
-		.rq = &(struct timespec) {.tv_sec = 0, .tv_nsec = 1000000000},
+		.tv_sec = 0,
+		.tv_nsec = 1000000000,
+		.rq = &ts,
 		.ret = -1,
 		.err = EINVAL,
 	},
@@ -131,8 +125,40 @@ static struct test_case tcase[] = {
 	},
 };
 
+static struct test_variants {
+	int (*send)(mqd_t mqdes, const char *msg_ptr, size_t msg_len,
+		    unsigned int msg_prio, void *abs_timeout);
+	ssize_t (*receive)(mqd_t mqdes, char *msg_ptr, size_t msg_len,
+			   unsigned int *msg_prio, void *abs_timeout);
+
+	int (*gettime)(clockid_t clk_id, void *ts);
+	enum tst_ts_type type;
+	char *desc;
+} variants[] = {
+	{ .gettime = libc_clock_gettime, .send = libc_mq_timedsend, .receive = libc_mq_timedreceive, .type = TST_LIBC_TIMESPEC, .desc = "vDSO or syscall with libc spec"},
+
+#if (__NR_mq_timedsend != __LTP__NR_INVALID_SYSCALL)
+	{ .gettime = sys_clock_gettime, .send = sys_mq_timedsend, .receive = sys_mq_timedreceive, .type = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_mq_timedsend_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .gettime = sys_clock_gettime64, .send = sys_mq_timedsend64, .receive = sys_mq_timedreceive64, .type = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
+static void setup(void)
+{
+	struct test_variants *tv = &variants[tst_variant];
+
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	ts.type = tv->type;
+
+	setup_common();
+}
+
 static void do_test(unsigned int i)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	const struct test_case *tc = &tcase[i];
 	unsigned int j;
 	unsigned int prio;
@@ -140,19 +166,26 @@ static void do_test(unsigned int i)
 	char rmsg[len];
 	pid_t pid = -1;
 
+	tst_ts_set_sec(&ts, tc->tv_sec);
+	tst_ts_set_nsec(&ts, tc->tv_nsec);
+
 	if (tc->signal)
-		pid = set_sig(tc->rq);
+		pid = set_sig(tc->rq, tv->gettime);
 
 	if (tc->timeout)
-		set_timeout(tc->rq);
+		set_timeout(tc->rq, tv->gettime);
 
-	if (tc->send)
-		send_msg(*tc->fd, tc->len, tc->prio);
+	if (tc->send) {
+		if (tv->send(*tc->fd, smsg, tc->len, tc->prio, NULL) < 0) {
+			tst_res(TFAIL | TTERRNO, "mq_timedsend() failed");
+			return;
+		}
+	}
 
 	if (tc->invalid_msg)
 		len -= 1;
 
-	TEST(mq_timedreceive(*tc->fd, rmsg, len, &prio, tc->rq));
+	TEST(tv->receive(*tc->fd, rmsg, len, &prio, tst_ts_get(tc->rq)));
 
 	if (pid > 0)
 		kill_pid(pid);
@@ -163,22 +196,22 @@ static void do_test(unsigned int i)
 	if (TST_RET < 0) {
 		if (tc->err != TST_ERR)
 			tst_res(TFAIL | TTERRNO,
-				"mq_timedreceive failed unexpectedly, expected %s",
+				"mq_timedreceive() failed unexpectedly, expected %s",
 				tst_strerrno(tc->err));
 		else
-			tst_res(TPASS | TTERRNO, "mq_timedreceive failed expectedly");
+			tst_res(TPASS | TTERRNO, "mq_timedreceive() failed expectedly");
 
 		return;
 	}
 
 	if (tc->len != TST_RET) {
-		tst_res(TFAIL, "mq_timedreceive wrong length %ld, expected %zu",
+		tst_res(TFAIL, "mq_timedreceive() wrong length %ld, expected %u",
 			TST_RET, tc->len);
 		return;
 	}
 
 	if (tc->prio != prio) {
-		tst_res(TFAIL, "mq_timedreceive wrong prio %d, expected %d",
+		tst_res(TFAIL, "mq_timedreceive() wrong prio %d, expected %d",
 			prio, tc->prio);
 		return;
 	}
@@ -186,20 +219,21 @@ static void do_test(unsigned int i)
 	for (j = 0; j < tc->len; j++) {
 		if (rmsg[j] != smsg[j]) {
 			tst_res(TFAIL,
-				"mq_timedreceive wrong data %d in %u, expected %d",
+				"mq_timedreceive() wrong data %d in %u, expected %d",
 				rmsg[j], i, smsg[j]);
 			return;
 		}
 	}
 
-	tst_res(TPASS, "mq_timedreceive returned %ld, priority %u, length: %zu",
+	tst_res(TPASS, "mq_timedreceive() returned %ld, priority %u, length: %zu",
 			TST_RET, prio, len);
 }
 
 static struct tst_test test = {
 	.tcnt = ARRAY_SIZE(tcase),
 	.test = do_test,
-	.setup = setup_common,
+	.test_variants = ARRAY_SIZE(variants),
+	.setup = setup,
 	.cleanup = cleanup_common,
 	.forks_child = 1,
 };
diff --git a/testcases/kernel/syscalls/mq_timedsend/mq_timedsend01.c b/testcases/kernel/syscalls/mq_timedsend/mq_timedsend01.c
index 8f209d396040..4ff1da65c570 100644
--- a/testcases/kernel/syscalls/mq_timedsend/mq_timedsend01.c
+++ b/testcases/kernel/syscalls/mq_timedsend/mq_timedsend01.c
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (c) Crackerjack Project., 2007-2008, Hitachi, Ltd
  * Copyright (c) 2017 Petr Vorel <pvorel@suse.cz>
@@ -6,29 +7,17 @@
  * Takahiro Yasui <takahiro.yasui.mp@hitachi.com>,
  * Yumiko Sugita <yumiko.sugita.yf@hitachi.com>,
  * Satoshi Fujiwara <sa-fuji@sdl.hitachi.co.jp>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it would be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <errno.h>
 #include <limits.h>
 
 static int fd, fd_root, fd_nonblock, fd_maxint = INT_MAX - 1, fd_invalid = -1;
-static struct timespec ts;
 
 #include "mq_timed.h"
 
+static struct tst_ts ts;
+
 static struct test_case tcase[] = {
 	{
 		.fd = &fd,
@@ -95,7 +84,9 @@ static struct test_case tcase[] = {
 	{
 		.fd = &fd,
 		.len = 16,
-		.rq = &(struct timespec) {.tv_sec = -1, .tv_nsec = 0},
+		.tv_sec = -1,
+		.tv_nsec = 0,
+		.rq = &ts,
 		.send = 1,
 		.ret = -1,
 		.err = EINVAL,
@@ -103,7 +94,9 @@ static struct test_case tcase[] = {
 	{
 		.fd = &fd,
 		.len = 16,
-		.rq = &(struct timespec) {.tv_sec = 0, .tv_nsec = -1},
+		.tv_sec = 0,
+		.tv_nsec = -1,
+		.rq = &ts,
 		.send = 1,
 		.ret = -1,
 		.err = EINVAL,
@@ -111,7 +104,9 @@ static struct test_case tcase[] = {
 	{
 		.fd = &fd,
 		.len = 16,
-		.rq = &(struct timespec) {.tv_sec = 0, .tv_nsec = 1000000000},
+		.tv_sec = 0,
+		.tv_nsec = 1000000000,
+		.rq = &ts,
 		.send = 1,
 		.ret = -1,
 		.err = EINVAL,
@@ -136,8 +131,40 @@ static struct test_case tcase[] = {
 	},
 };
 
+static struct test_variants {
+	int (*send)(mqd_t mqdes, const char *msg_ptr, size_t msg_len,
+		    unsigned int msg_prio, void *abs_timeout);
+	ssize_t (*receive)(mqd_t mqdes, char *msg_ptr, size_t msg_len,
+			   unsigned int *msg_prio, void *abs_timeout);
+
+	int (*gettime)(clockid_t clk_id, void *ts);
+	enum tst_ts_type type;
+	char *desc;
+} variants[] = {
+	{ .gettime = libc_clock_gettime, .send = libc_mq_timedsend, .receive = libc_mq_timedreceive, .type = TST_LIBC_TIMESPEC, .desc = "vDSO or syscall with libc spec"},
+
+#if (__NR_mq_timedsend != __LTP__NR_INVALID_SYSCALL)
+	{ .gettime = sys_clock_gettime, .send = sys_mq_timedsend, .receive = sys_mq_timedreceive, .type = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_mq_timedsend_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .gettime = sys_clock_gettime64, .send = sys_mq_timedsend64, .receive = sys_mq_timedreceive64, .type = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
+static void setup(void)
+{
+	struct test_variants *tv = &variants[tst_variant];
+
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	ts.type = tv->type;
+
+	setup_common();
+}
+
 static void do_test(unsigned int i)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	const struct test_case *tc = &tcase[i];
 	unsigned int j;
 	unsigned int prio;
@@ -145,18 +172,24 @@ static void do_test(unsigned int i)
 	char rmsg[len];
 	pid_t pid = -1;
 
+	tst_ts_set_sec(&ts, tc->tv_sec);
+	tst_ts_set_nsec(&ts, tc->tv_nsec);
+
 	if (tc->signal)
-		pid = set_sig(tc->rq);
+		pid = set_sig(tc->rq, tv->gettime);
 
 	if (tc->timeout)
-		set_timeout(tc->rq);
+		set_timeout(tc->rq, tv->gettime);
 
 	if (tc->send) {
 		for (j = 0; j < MSG_LENGTH; j++)
-			send_msg(*tc->fd, tc->len, tc->prio);
+			if (tv->send(*tc->fd, smsg, tc->len, tc->prio, NULL) < 0) {
+				tst_res(TFAIL | TTERRNO, "mq_timedsend() failed");
+				return;
+			}
 	}
 
-	TEST(mq_timedsend(*tc->fd, smsg, tc->len, tc->prio, tc->rq));
+	TEST(tv->send(*tc->fd, smsg, tc->len, tc->prio, tst_ts_get(tc->rq)));
 
 	if (pid > 0)
 		kill_pid(pid);
@@ -164,10 +197,10 @@ static void do_test(unsigned int i)
 	if (TST_RET < 0) {
 		if (tc->err != TST_ERR)
 			tst_res(TFAIL | TTERRNO,
-				"mq_timedsend failed unexpectedly, expected %s",
+				"mq_timedsend() failed unexpectedly, expected %s",
 				tst_strerrno(tc->err));
 		else
-			tst_res(TPASS | TTERRNO, "mq_timedreceive failed expectedly");
+			tst_res(TPASS | TTERRNO, "mq_timedreceive() failed expectedly");
 
 		if (*tc->fd == fd)
 			cleanup_queue(fd);
@@ -175,7 +208,7 @@ static void do_test(unsigned int i)
 		return;
 	}
 
-	TEST(mq_timedreceive(*tc->fd, rmsg, len, &prio, tc->rq));
+	TEST(tv->receive(*tc->fd, rmsg, len, &prio, tst_ts_get(tc->rq)));
 
 	if (*tc->fd == fd)
 		cleanup_queue(fd);
@@ -183,26 +216,26 @@ static void do_test(unsigned int i)
 	if (TST_RET < 0) {
 		if (tc->err != TST_ERR) {
 			tst_res(TFAIL | TTERRNO,
-				"mq_timedreceive failed unexpectedly, expected %s",
+				"mq_timedreceive() failed unexpectedly, expected %s",
 				tst_strerrno(tc->err));
 			return;
 		}
 
 		if (tc->ret >= 0) {
-			tst_res(TFAIL | TTERRNO, "mq_timedreceive returned %ld, expected %d",
+			tst_res(TFAIL | TTERRNO, "mq_timedreceive() returned %ld, expected %d",
 					TST_RET, tc->ret);
 			return;
 		}
 	}
 
 	if (tc->len != TST_RET) {
-		tst_res(TFAIL, "mq_timedreceive wrong length %ld, expected %d",
+		tst_res(TFAIL, "mq_timedreceive() wrong length %ld, expected %u",
 			TST_RET, tc->len);
 		return;
 	}
 
 	if (tc->prio != prio) {
-		tst_res(TFAIL, "mq_timedreceive wrong prio %d, expected %d",
+		tst_res(TFAIL, "mq_timedreceive() wrong prio %d, expected %d",
 			prio, tc->prio);
 		return;
 	}
@@ -210,20 +243,21 @@ static void do_test(unsigned int i)
 	for (j = 0; j < tc->len; j++) {
 		if (rmsg[j] != smsg[j]) {
 			tst_res(TFAIL,
-				"mq_timedreceive wrong data %d in %u, expected %d",
+				"mq_timedreceive() wrong data %d in %u, expected %d",
 				rmsg[j], i, smsg[j]);
 			return;
 		}
 	}
 
-	tst_res(TPASS, "mq_timedreceive returned %ld, priority %u, length: %zu",
+	tst_res(TPASS, "mq_timedreceive() returned %ld, priority %u, length: %zu",
 			TST_RET, prio, len);
 }
 
 static struct tst_test test = {
 	.tcnt = ARRAY_SIZE(tcase),
 	.test = do_test,
-	.setup = setup_common,
+	.test_variants = ARRAY_SIZE(variants),
+	.setup = setup,
 	.cleanup = cleanup_common,
 	.forks_child = 1,
 };
diff --git a/testcases/kernel/syscalls/utils/mq_timed.h b/testcases/kernel/syscalls/utils/mq_timed.h
index a163ddcee3af..1d5515f9d629 100644
--- a/testcases/kernel/syscalls/utils/mq_timed.h
+++ b/testcases/kernel/syscalls/utils/mq_timed.h
@@ -1,30 +1,21 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (c) 2017 Petr Vorel <pvorel@suse.cz>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it would be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
 #ifndef MQ_TIMED_H
 #define MQ_TIMED_H
 
 #include "mq.h"
+#include "tst_timer.h"
 
 struct test_case {
 	int *fd;
 	unsigned int len;
 	unsigned int prio;
-	struct timespec *rq;
+	struct tst_ts *rq;
+	long tv_sec;
+	long tv_nsec;
 	int invalid_msg;
 	int send;
 	int signal;
@@ -33,27 +24,20 @@ struct test_case {
 	int err;
 };
 
-static pid_t set_sig(struct timespec *ts)
+static pid_t set_sig(struct tst_ts *ts,
+		     int (*gettime)(clockid_t clk_id, void *ts))
 {
-	clock_gettime(CLOCK_REALTIME, ts);
-	ts->tv_sec += 3;
+	gettime(CLOCK_REALTIME, tst_ts_get(ts));
+	*ts = tst_ts_add_us(*ts, 3000000);
 
 	return create_sig_proc(SIGINT, 40, 200000);
 }
 
-static void set_timeout(struct timespec *ts)
+static void set_timeout(struct tst_ts *ts,
+			int (*gettime)(clockid_t clk_id, void *ts))
 {
-	clock_gettime(CLOCK_REALTIME, ts);
-	ts->tv_nsec += 50000000;
-	ts->tv_sec += ts->tv_nsec / 1000000000;
-	ts->tv_nsec %= 1000000000;
-}
-
-static void send_msg(int fd, int len, int prio)
-{
-	if (mq_timedsend(fd, smsg, len, prio,
-		&((struct timespec){0})) < 0)
-		tst_brk(TBROK | TERRNO, "mq_timedsend failed");
+	gettime(CLOCK_REALTIME, tst_ts_get(ts));
+	*ts = tst_ts_add_us(*ts, 50000);
 }
 
 static void kill_pid(pid_t pid)
-- 
2.25.0.rc1.19.g042ed3e048af


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V4 11/17] syscalls/recvmmsg: Add support for time64 tests
  2020-05-22 10:51 [LTP] [PATCH V4 00/17] Syscalls: Add support for time64 variants Viresh Kumar
                   ` (9 preceding siblings ...)
  2020-05-22 10:51 ` [LTP] [PATCH V4 10/17] syscalls/mq_timed{send|receive}: " Viresh Kumar
@ 2020-05-22 10:51 ` Viresh Kumar
  2020-05-22 10:51 ` [LTP] [PATCH V4 12/17] syscalls/ppoll: " Viresh Kumar
                   ` (5 subsequent siblings)
  16 siblings, 0 replies; 33+ messages in thread
From: Viresh Kumar @ 2020-05-22 10:51 UTC (permalink / raw)
  To: ltp

This adds support for time64 tests to the existing recvmmsg() syscall
tests.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 .../kernel/syscalls/sendmmsg/sendmmsg01.c     | 40 ++++++++++----
 .../kernel/syscalls/sendmmsg/sendmmsg_var.h   | 55 ++++++++-----------
 2 files changed, 53 insertions(+), 42 deletions(-)

diff --git a/testcases/kernel/syscalls/sendmmsg/sendmmsg01.c b/testcases/kernel/syscalls/sendmmsg/sendmmsg01.c
index 37084102ee09..016bbc6813c4 100644
--- a/testcases/kernel/syscalls/sendmmsg/sendmmsg01.c
+++ b/testcases/kernel/syscalls/sendmmsg/sendmmsg01.c
@@ -14,7 +14,6 @@
 #include "tst_test.h"
 #include "lapi/socket.h"
 #include "tst_safe_macros.h"
-
 #include "sendmmsg_var.h"
 
 #define BUFSIZE 16
@@ -25,27 +24,48 @@ static int receive_sockfd;
 static struct mmsghdr *snd_msg, *rcv_msg;
 static struct iovec *snd1, *snd2, *rcv1, *rcv2;
 
+static struct test_variants {
+	int (*receive)(int sockfd, struct mmsghdr *msgvec, unsigned int vlen,
+		       unsigned int flags, void *timeout);
+	int (*send)(int sockfd, struct mmsghdr *msgvec, unsigned int vlen,
+		    unsigned int flags);
+	enum tst_ts_type type;
+	char *desc;
+} variants[] = {
+	{ .receive = libc_recvmmsg, .send = libc_sendmmsg, .type = TST_LIBC_TIMESPEC, .desc = "vDSO or syscall with libc spec"},
+
+#if (__NR_recvmmsg != __LTP__NR_INVALID_SYSCALL)
+	{ .receive = sys_recvmmsg, .send = sys_sendmmsg, .type = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_recvmmsg_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .receive = sys_recvmmsg64, .send = sys_sendmmsg, .type = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
 static void run(void)
 {
-	struct timespec timeout;
+	struct test_variants *tv = &variants[tst_variant];
+	struct tst_ts timeout;
 	int retval;
 
-	retval = do_sendmmsg(send_sockfd, snd_msg, VLEN, 0);
+	retval = tv->send(send_sockfd, snd_msg, VLEN, 0);
 	if (retval < 0 || snd_msg[0].msg_len != 6 || snd_msg[1].msg_len != 6) {
-		tst_res(TFAIL|TTERRNO, "sendmmsg failed");
+		tst_res(TFAIL|TTERRNO, "sendmmsg() failed");
 		return;
 	}
 
 	memset(rcv1->iov_base, 0, rcv1->iov_len);
 	memset(rcv2->iov_base, 0, rcv2->iov_len);
 
-	timeout.tv_sec = 1;
-	timeout.tv_nsec = 0;
+	timeout.type = tv->type;
+	tst_ts_set_sec(&timeout, 1);
+	tst_ts_set_nsec(&timeout, 0);
 
-	retval = do_recvmmsg(receive_sockfd, rcv_msg, VLEN, 0, &timeout);
+	retval = tv->receive(receive_sockfd, rcv_msg, VLEN, 0, tst_ts_get(&timeout));
 
 	if (retval == -1) {
-		tst_res(TFAIL | TTERRNO, "recvmmsg failed");
+		tst_res(TFAIL | TTERRNO, "recvmmsg() failed");
 		return;
 	}
 	if (retval != 2) {
@@ -96,7 +116,7 @@ static void setup(void)
 	rcv_msg[1].msg_hdr.msg_iov = rcv2;
 	rcv_msg[1].msg_hdr.msg_iovlen = 1;
 
-	test_info();
+	tst_res(TINFO, "Testing variant: %s", variants[tst_variant].desc);
 }
 
 static void cleanup(void)
@@ -111,7 +131,7 @@ static struct tst_test test = {
 	.test_all = run,
 	.setup = setup,
 	.cleanup = cleanup,
-	.test_variants = TEST_VARIANTS,
+	.test_variants = ARRAY_SIZE(variants),
 	.bufs = (struct tst_buffers []) {
 		{&snd1, .iov_sizes = (int[]){3, 3, -1}},
 		{&snd2, .iov_sizes = (int[]){6, -1}},
diff --git a/testcases/kernel/syscalls/sendmmsg/sendmmsg_var.h b/testcases/kernel/syscalls/sendmmsg/sendmmsg_var.h
index f00cf056a747..a142b17f9718 100644
--- a/testcases/kernel/syscalls/sendmmsg/sendmmsg_var.h
+++ b/testcases/kernel/syscalls/sendmmsg/sendmmsg_var.h
@@ -6,55 +6,46 @@
 #ifndef SENDMMSG_VAR__
 #define SENDMMSG_VAR__
 
+#include "tst_timer.h"
 #include "lapi/syscalls.h"
 
-static int do_sendmmsg(int sockfd, struct mmsghdr *msgvec, unsigned int vlen,
-		       int flags)
+static inline int libc_sendmmsg(int sockfd, struct mmsghdr *msgvec,
+				unsigned int vlen, unsigned int flags)
 {
-	switch (tst_variant) {
-	case 0:
-		return tst_syscall(__NR_sendmmsg, sockfd, msgvec, vlen, flags);
-	case 1:
 #ifdef HAVE_SENDMMSG
-		return sendmmsg(sockfd, msgvec, vlen, flags);
+	return sendmmsg(sockfd, msgvec, vlen, flags);
 #else
-		tst_brk(TCONF, "libc sendmmsg not present");
+	tst_brk(TCONF, "libc sendmmsg not present");
 #endif
-	}
+}
 
-	return -1;
+static inline int sys_sendmmsg(int sockfd, struct mmsghdr *msgvec,
+			       unsigned int vlen, unsigned int flags)
+{
+	return tst_syscall(__NR_sendmmsg, sockfd, msgvec, vlen, flags);
 }
 
-static int do_recvmmsg(int sockfd, struct mmsghdr *msgvec, unsigned int vlen,
-		       int flags, struct timespec *timeout)
+static inline int libc_recvmmsg(int sockfd, struct mmsghdr *msgvec,
+			unsigned int vlen, unsigned int flags, void *timeout)
 {
-	switch (tst_variant) {
-	case 0:
-		return tst_syscall(__NR_recvmmsg, sockfd, msgvec, vlen, flags,
-				   timeout);
-	case 1:
 #ifdef HAVE_RECVMMSG
-		return recvmmsg(sockfd, msgvec, vlen, flags, timeout);
+	return recvmmsg(sockfd, msgvec, vlen, flags, timeout);
 #else
-		tst_brk(TCONF, "libc recvmmsg not present");
+	tst_brk(TCONF, "libc recvmmsg not present");
 #endif
-	}
-
-	return -1;
 }
 
-static void test_info(void)
+static inline int sys_recvmmsg(int sockfd, struct mmsghdr *msgvec,
+			unsigned int vlen, unsigned int flags, void *timeout)
 {
-	switch (tst_variant) {
-	case 0:
-		tst_res(TINFO, "Testing direct sendmmsg and recvmmsg syscalls");
-		break;
-	case 1:
-		tst_res(TINFO, "Testing libc sendmmsg and recvmmsg syscalls");
-		break;
-	}
+	return tst_syscall(__NR_recvmmsg, sockfd, msgvec, vlen, flags, timeout);
 }
 
-#define TEST_VARIANTS 2
+static inline int sys_recvmmsg64(int sockfd, struct mmsghdr *msgvec,
+			unsigned int vlen, unsigned int flags, void *timeout)
+{
+	return tst_syscall(__NR_recvmmsg_time64, sockfd, msgvec, vlen, flags,
+			   timeout);
+}
 
 #endif /* SENDMMSG_VAR__ */
-- 
2.25.0.rc1.19.g042ed3e048af


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V4 12/17] syscalls/ppoll: Add support for time64 tests
  2020-05-22 10:51 [LTP] [PATCH V4 00/17] Syscalls: Add support for time64 variants Viresh Kumar
                   ` (10 preceding siblings ...)
  2020-05-22 10:51 ` [LTP] [PATCH V4 11/17] syscalls/recvmmsg: " Viresh Kumar
@ 2020-05-22 10:51 ` Viresh Kumar
  2020-05-22 10:51 ` [LTP] [PATCH V4 13/17] syscalls/select6: " Viresh Kumar
                   ` (4 subsequent siblings)
  16 siblings, 0 replies; 33+ messages in thread
From: Viresh Kumar @ 2020-05-22 10:51 UTC (permalink / raw)
  To: ltp

This adds support for time64 tests to the existing ppoll() syscall
tests.

Note that the O_EXCL flag is removed from SAFE_OPEN() calls as it made
the tests failed when run for the second variant as the file existed.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 testcases/kernel/syscalls/ppoll/ppoll01.c | 71 ++++++++++++++++++-----
 1 file changed, 55 insertions(+), 16 deletions(-)

diff --git a/testcases/kernel/syscalls/ppoll/ppoll01.c b/testcases/kernel/syscalls/ppoll/ppoll01.c
index 2fadd0653948..a217254022d4 100644
--- a/testcases/kernel/syscalls/ppoll/ppoll01.c
+++ b/testcases/kernel/syscalls/ppoll/ppoll01.c
@@ -21,6 +21,7 @@
 #include "ltp_signal.h"
 #include "tst_sig_proc.h"
 #include "tst_test.h"
+#include "tst_timer.h"
 
 /* Older versions of glibc don't publish this constant's value. */
 #ifndef POLLRDHUP
@@ -38,7 +39,7 @@ struct test_case {
 	unsigned int nfds;	   /* nfds ppoll parameter */
 	sigset_t *sigmask;	   /* sigmask ppoll parameter */
 	sigset_t *sigmask_cur;	   /* sigmask set for current process */
-	struct timespec *ts;	   /* ts ppoll parameter */
+	struct tst_ts *ts;	   /* ts ppoll parameter */
 	struct pollfd *fds;	   /* fds ppoll parameter */
 	int sigint_count;	   /* if > 0, spawn process to send SIGINT */
 				   /* 'count' times to current process */
@@ -60,14 +61,7 @@ static int fd1 = -1;
 static sigset_t sigmask_empty, sigmask_sigint;
 static struct pollfd fds_good[1], fds_already_closed[1];
 
-static struct timespec ts_short = {
-	.tv_sec = 0,
-	.tv_nsec = 200000000,
-};
-static struct timespec ts_long = {
-	.tv_sec = 2,
-	.tv_nsec = 0,
-};
+static struct tst_ts ts_short, ts_long;
 
 /* Test cases
  *
@@ -160,14 +154,53 @@ static struct test_case tcase[] = {
 	},
 };
 
+static inline int libc_ppoll(struct pollfd *fds, nfds_t nfds, void *tmo_p,
+			     const sigset_t *sigmask, size_t sigsetsize)
+{
+	return ppoll(fds, nfds, tmo_p, sigmask);
+}
+
+static inline int sys_ppoll(struct pollfd *fds, nfds_t nfds, void *tmo_p,
+			    const sigset_t *sigmask, size_t sigsetsize)
+{
+	return tst_syscall(__NR_ppoll, fds, nfds, tmo_p, sigmask, sigsetsize);
+}
+
+static inline int sys_ppoll_time64(struct pollfd *fds, nfds_t nfds, void *tmo_p,
+				   const sigset_t *sigmask, size_t sigsetsize)
+{
+	return tst_syscall(__NR_ppoll_time64, fds, nfds, tmo_p, sigmask,
+			   sigsetsize);
+}
+
+static struct test_variants {
+	int (*ppoll)(struct pollfd *fds, nfds_t nfds, void *tmo_p,
+		     const sigset_t *sigmask, size_t sigsetsize);
+
+	enum tst_ts_type type;
+	char *desc;
+} variants[] = {
+	{ .ppoll = libc_ppoll, .type = TST_LIBC_TIMESPEC, .desc = "vDSO or syscall with libc spec"},
+
+#if (__NR_ppoll != __LTP__NR_INVALID_SYSCALL)
+	{ .ppoll = sys_ppoll, .type = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_ppoll_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .ppoll = sys_ppoll_time64, .type = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
 static void sighandler(int sig LTP_ATTRIBUTE_UNUSED)
 {
 }
 
 static void setup(void)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	int fd2;
 
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
 	SAFE_SIGNAL(SIGINT, sighandler);
 
 	if (sigemptyset(&sigmask_empty) == -1)
@@ -177,18 +210,22 @@ static void setup(void)
 	if (sigaddset(&sigmask_sigint, SIGINT) == -1)
 		tst_brk(TBROK | TERRNO, "sigaddset");
 
-	fd1 = SAFE_OPEN("testfile1", O_CREAT | O_EXCL | O_RDWR,
-		S_IRUSR | S_IWUSR);
+	fd1 = SAFE_OPEN("testfile1", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
 	fds_good[0].fd = fd1;
 	fds_good[0].events = POLLIN | POLLPRI | POLLOUT | POLLRDHUP;
 	fds_good[0].revents = 0;
 
-	fd2 = SAFE_OPEN("testfile2", O_CREAT | O_EXCL | O_RDWR,
-		S_IRUSR | S_IWUSR);
+	fd2 = SAFE_OPEN("testfile2", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
 	fds_already_closed[0].fd = fd2;
 	fds_already_closed[0].events = POLLIN | POLLPRI | POLLOUT | POLLRDHUP;
 	fds_already_closed[0].revents = 0;
 	SAFE_CLOSE(fd2);
+
+	ts_short.type = ts_long.type = tv->type;
+	tst_ts_set_sec(&ts_short, 0);
+	tst_ts_set_nsec(&ts_short, 200000000);
+	tst_ts_set_sec(&ts_long, 2);
+	tst_ts_set_nsec(&ts_long, 0);
 }
 
 static void cleanup(void)
@@ -199,10 +236,11 @@ static void cleanup(void)
 
 static void do_test(unsigned int i)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	pid_t pid = 0;
 	int sys_ret, sys_errno = 0, dummy;
 	struct test_case *tc = &tcase[i];
-	struct timespec ts, *tsp = NULL;
+	struct tst_ts ts, *tsp = NULL;
 
 	if (tc->ts) {
 		memcpy(&ts, tc->ts, sizeof(ts));
@@ -223,8 +261,8 @@ static void do_test(unsigned int i)
 
 	/* test */
 	errno = 0;
-	sys_ret = tst_syscall(__NR_ppoll, tc->fds, tc->nfds, tsp,
-		tc->sigmask, SIGSETSIZE);
+	sys_ret = tv->ppoll(tc->fds, tc->nfds, tst_ts_get(tsp), tc->sigmask,
+			    SIGSETSIZE);
 	sys_errno = errno;
 
 	/* cleanup */
@@ -261,6 +299,7 @@ static void do_test(unsigned int i)
 static struct tst_test test = {
 	.tcnt = ARRAY_SIZE(tcase),
 	.test = do_test,
+	.test_variants = ARRAY_SIZE(variants),
 	.setup = setup,
 	.cleanup = cleanup,
 	.forks_child = 1,
-- 
2.25.0.rc1.19.g042ed3e048af


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V4 13/17] syscalls/select6: Add support for time64 tests
  2020-05-22 10:51 [LTP] [PATCH V4 00/17] Syscalls: Add support for time64 variants Viresh Kumar
                   ` (11 preceding siblings ...)
  2020-05-22 10:51 ` [LTP] [PATCH V4 12/17] syscalls/ppoll: " Viresh Kumar
@ 2020-05-22 10:51 ` Viresh Kumar
  2020-05-22 10:51 ` [LTP] [PATCH V4 14/17] syscalls/semop: Migrate to new test framework Viresh Kumar
                   ` (3 subsequent siblings)
  16 siblings, 0 replies; 33+ messages in thread
From: Viresh Kumar @ 2020-05-22 10:51 UTC (permalink / raw)
  To: ltp

This adds support for time64 tests to the existing select6() syscall
tests.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 testcases/kernel/syscalls/select/select_var.h | 25 ++++++++++++++++---
 1 file changed, 22 insertions(+), 3 deletions(-)

diff --git a/testcases/kernel/syscalls/select/select_var.h b/testcases/kernel/syscalls/select/select_var.h
index b19a1d1bf085..2c7604807cf6 100644
--- a/testcases/kernel/syscalls/select/select_var.h
+++ b/testcases/kernel/syscalls/select/select_var.h
@@ -6,6 +6,7 @@
 #define SELECT_VAR__
 
 #include "lapi/syscalls.h"
+#include "tst_timer.h"
 
 struct compat_sel_arg_struct {
 	long _n;
@@ -38,7 +39,7 @@ static int do_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *except
 	}
 	case 2: {
 		int ret;
-		struct timespec ts = {
+		struct __kernel_old_timespec ts = {
 			.tv_sec = timeout->tv_sec,
 			.tv_nsec = timeout->tv_usec * 1000,
 		};
@@ -47,7 +48,22 @@ static int do_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *except
 		timeout->tv_usec = ts.tv_nsec / 1000;
 		return ret;
 	}
-	case 3:
+	case 3: {
+		int ret = 0;
+#if (__NR_clock_settime64 != __LTP__NR_INVALID_SYSCALL)
+		struct __kernel_timespec ts = {
+			.tv_sec = timeout->tv_sec,
+			.tv_nsec = timeout->tv_usec * 1000,
+		};
+		ret = tst_syscall(__NR_pselect6_time64, nfds, readfds, writefds, exceptfds, &ts, NULL);
+		timeout->tv_sec = ts.tv_sec;
+		timeout->tv_usec = ts.tv_nsec / 1000;
+#else
+		tst_brk(TCONF, "__NR_pselect6 time64 variant not supported");
+#endif
+		return ret;
+	}
+	case 4:
 #ifdef __NR__newselect
 		return tst_syscall(__NR__newselect, nfds, readfds, writefds, exceptfds, timeout);
 #else
@@ -72,11 +88,14 @@ static void select_info(void)
 		tst_res(TINFO, "Testing SYS_pselect6 syscall");
 	break;
 	case 3:
+		tst_res(TINFO, "Testing SYS_pselect6 time64 syscall");
+	break;
+	case 4:
 		tst_res(TINFO, "Testing SYS__newselect syscall");
 	break;
 	}
 }
 
-#define TEST_VARIANTS 4
+#define TEST_VARIANTS 5
 
 #endif /* SELECT_VAR__ */
-- 
2.25.0.rc1.19.g042ed3e048af


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V4 14/17] syscalls/semop: Migrate to new test framework
  2020-05-22 10:51 [LTP] [PATCH V4 00/17] Syscalls: Add support for time64 variants Viresh Kumar
                   ` (12 preceding siblings ...)
  2020-05-22 10:51 ` [LTP] [PATCH V4 13/17] syscalls/select6: " Viresh Kumar
@ 2020-05-22 10:51 ` Viresh Kumar
  2020-05-22 10:51 ` [LTP] [PATCH V4 15/17] syscalls/semtimedop: Add support for semtimedop and its time64 version Viresh Kumar
                   ` (2 subsequent siblings)
  16 siblings, 0 replies; 33+ messages in thread
From: Viresh Kumar @ 2020-05-22 10:51 UTC (permalink / raw)
  To: ltp

This migrates the semop tests to the new test framework.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 testcases/kernel/syscalls/ipc/semop/Makefile  |   2 +-
 testcases/kernel/syscalls/ipc/semop/semop01.c | 140 ++++----
 testcases/kernel/syscalls/ipc/semop/semop02.c | 145 +++------
 testcases/kernel/syscalls/ipc/semop/semop03.c | 150 +++------
 testcases/kernel/syscalls/ipc/semop/semop04.c | 165 ++++------
 testcases/kernel/syscalls/ipc/semop/semop05.c | 303 ++++++++----------
 6 files changed, 347 insertions(+), 558 deletions(-)

diff --git a/testcases/kernel/syscalls/ipc/semop/Makefile b/testcases/kernel/syscalls/ipc/semop/Makefile
index 401e5e8cbb9f..5e4c695dd310 100644
--- a/testcases/kernel/syscalls/ipc/semop/Makefile
+++ b/testcases/kernel/syscalls/ipc/semop/Makefile
@@ -4,5 +4,5 @@
 top_srcdir              ?= ../../../../..
 
 include $(top_srcdir)/include/mk/testcases.mk
-include $(abs_srcdir)/../Makefile.inc
+include $(abs_srcdir)/../Makefile2.inc
 include $(top_srcdir)/include/mk/generic_leaf_target.mk
diff --git a/testcases/kernel/syscalls/ipc/semop/semop01.c b/testcases/kernel/syscalls/ipc/semop/semop01.c
index ea05c53eb919..bcb45fa69320 100644
--- a/testcases/kernel/syscalls/ipc/semop/semop01.c
+++ b/testcases/kernel/syscalls/ipc/semop/semop01.c
@@ -1,21 +1,5 @@
-/*
- *
- *   Copyright (c) International Business Machines  Corp., 2001
- *
- *   This program is free software;  you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License as published by
- *   the Free Software Foundation; either version 2 of the License, or
- *   (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- *   the GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program;  if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
+// SPDX-License-Identifier: GPL-2.0-or-later
+/* Copyright (c) International Business Machines  Corp., 2001 */
 
 /*
  * NAME
@@ -52,92 +36,73 @@
  *	none
  */
 
-#include "ipcsem.h"
+#include <stdlib.h>
+#include <sys/sem.h>
+#include "tst_test.h"
+#include "libnewipc.h"
+#include "lapi/semun.h"
 
 #define NSEMS	4		/* the number of primitive semaphores to test */
 
-char *TCID = "semop01";
-int TST_TOTAL = 1;
-
-int sem_id_1 = -1;		/* a semaphore set with read & alter permissions */
+static int sem_id = -1;		/* a semaphore set with read & alter permissions */
+static key_t semkey;
 
-union semun get_arr;
-struct sembuf sops[PSEMS];
+static union semun get_arr;
+static struct sembuf sops[PSEMS];
 
-int main(int ac, char **av)
+static void run(void)
 {
-	int lc;
-	int i;
+	union semun arr = { .val = 0 };
 	int fail = 0;
+	int i;
 
-	tst_parse_opts(ac, av, NULL, NULL);
-
-	setup();
-
-	for (lc = 0; TEST_LOOPING(lc); lc++) {
-		tst_count = 0;
-
-		TEST(semop(sem_id_1, sops, NSEMS));
-
-		if (TEST_RETURN == -1) {
-			tst_resm(TFAIL, "%s call failed - errno = %d : %s",
-				 TCID, TEST_ERRNO, strerror(TEST_ERRNO));
-		} else {
-			/* get the values and make sure they */
-			/* are the same as what was set      */
-			if (semctl(sem_id_1, 0, GETALL, get_arr) == -1) {
-				tst_brkm(TBROK, cleanup,
-					 "semctl() failed in functional test");
-			}
-
-			for (i = 0; i < NSEMS; i++) {
-				if (get_arr.array[i] != i * i) {
-					fail = 1;
-				}
-			}
-			if (fail)
-				tst_resm(TFAIL,
-					 "semaphore values are wrong");
-			else
-				tst_resm(TPASS,
-					 "semaphore values are correct");
-		}
+	TEST(semop(sem_id, sops, NSEMS));
 
+	if (TST_RET == -1) {
+		tst_res(TFAIL | TTERRNO, "semop() failed");
+	} else {
 		/*
-		 * clean up things in case we are looping
+		 * Get the values and make sure they are the same as what was
+		 * set
 		 */
-		union semun set_arr;
-		set_arr.val = 0;
+		if (semctl(sem_id, 0, GETALL, get_arr) == -1) {
+			tst_brk(TBROK | TERRNO, "semctl() failed in functional test");
+		}
+
 		for (i = 0; i < NSEMS; i++) {
-			if (semctl(sem_id_1, i, SETVAL, set_arr) == -1) {
-				tst_brkm(TBROK, cleanup, "semctl failed");
+			if (get_arr.array[i] != i * i) {
+				fail = 1;
 			}
 		}
+		if (fail)
+			tst_res(TFAIL | TERRNO, "semaphore values are wrong");
+		else
+			tst_res(TPASS, "semaphore values are correct");
 	}
 
-	cleanup();
-	tst_exit();
+	/*
+	 * clean up things in case we are looping
+	 */
+	for (i = 0; i < NSEMS; i++) {
+		if (semctl(sem_id, i, SETVAL, arr) == -1) {
+			tst_brk(TBROK | TERRNO, "semctl failed");
+		}
+	}
 }
 
-void setup(void)
+static void setup(void)
 {
 	int i;
 
-	tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
-	TEST_PAUSE;
-
-	tst_tmpdir();
-
 	get_arr.array = malloc(sizeof(unsigned short int) * PSEMS);
 	if (get_arr.array == NULL)
-		tst_brkm(TBROK, cleanup, "malloc failed");
+		tst_brk(TBROK, "malloc failed");
 
-	semkey = getipckey();
+	semkey = GETIPCKEY();
 
-	sem_id_1 = semget(semkey, PSEMS, IPC_CREAT | IPC_EXCL | SEM_RA);
-	if (sem_id_1 == -1)
-		tst_brkm(TBROK, cleanup, "couldn't create semaphore in setup");
+	sem_id = semget(semkey, PSEMS, IPC_CREAT | IPC_EXCL | SEM_RA);
+	if (sem_id == -1)
+		tst_brk(TBROK | TERRNO, "couldn't create semaphore in setup");
 
 	for (i = 0; i < NSEMS; i++) {
 		sops[i].sem_num = i;
@@ -146,11 +111,20 @@ void setup(void)
 	}
 }
 
-void cleanup(void)
+static void cleanup(void)
 {
-	rm_sema(sem_id_1);
+	union semun arr;
 
+	if (sem_id != -1) {
+		if (semctl(sem_id, 0, IPC_RMID, arr) == -1)
+			tst_res(TINFO, "WARNING: semaphore deletion failed.");
+	}
 	free(get_arr.array);
-
-	tst_rmdir();
 }
+
+static struct tst_test test = {
+	.test_all = run,
+	.setup = setup,
+	.cleanup = cleanup,
+	.needs_tmpdir = 1,
+};
diff --git a/testcases/kernel/syscalls/ipc/semop/semop02.c b/testcases/kernel/syscalls/ipc/semop/semop02.c
index f067229b1cf5..f24d284776a4 100644
--- a/testcases/kernel/syscalls/ipc/semop/semop02.c
+++ b/testcases/kernel/syscalls/ipc/semop/semop02.c
@@ -1,21 +1,5 @@
-/*
- *
- *   Copyright (c) International Business Machines  Corp., 2001
- *
- *   This program is free software;  you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License as published by
- *   the Free Software Foundation; either version 2 of the License, or
- *   (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- *   the GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program;  if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
+// SPDX-License-Identifier: GPL-2.0-or-later
+/* Copyright (c) International Business Machines  Corp., 2001 */
 
 /*
  * DESCRIPTION
@@ -31,30 +15,27 @@
 
 #define _GNU_SOURCE
 #include <pwd.h>
-#include "test.h"
-#include "safe_macros.h"
-#include "ipcsem.h"
-
-char *TCID = "semop02";
-
-static void semop_verify(int i);
-int sem_id_1 = -1;	/* a semaphore set with read & alter permissions */
-int sem_id_2 = -1;	/* a semaphore set without read & alter permissions */
-int bad_id = -1;
-
-struct sembuf s_buf[PSEMS];
-
-int badbuf = -1;
+#include <sys/ipc.h>
+#include <sys/sem.h>
+#include "tst_test.h"
+#include "libnewipc.h"
+#include "lapi/semun.h"
+
+static int sem_id_1 = -1;	/* a semaphore set with read & alter permissions */
+static int sem_id_2 = -1;	/* a semaphore set without read & alter permissions */
+static int bad_id = -1;
+static key_t semkey;
+static struct sembuf s_buf[PSEMS];
 
 #define NSOPS	5		/* a resonable number of operations */
 #define	BIGOPS	1024		/* a value that is too large for the number */
 				/* of semop operations that are permitted   */
-struct test_case_t {
+static struct test_case_t {
 	int *semid;
 	struct sembuf *t_sbuf;
 	unsigned t_ops;
 	int error;
-} TC[] = {
+} tc[] = {
 	{&sem_id_1, (struct sembuf *)&s_buf, BIGOPS, E2BIG},
 	{&sem_id_2, (struct sembuf *)&s_buf, NSOPS, EACCES},
 	{&sem_id_1, (struct sembuf *)-1, NSOPS, EFAULT},
@@ -63,29 +44,7 @@ struct test_case_t {
 	{&sem_id_1, (struct sembuf *)&s_buf, 1, ERANGE}
 };
 
-int TST_TOTAL = ARRAY_SIZE(TC);
-
-int main(int ac, char **av)
-{
-	int lc;
-	int i;
-
-	tst_parse_opts(ac, av, NULL, NULL);
-
-	setup();
-
-	for (lc = 0; TEST_LOOPING(lc); lc++) {
-		tst_count = 0;
-
-		for (i = 0; i < TST_TOTAL; i++)
-			semop_verify(i);
-	}
-
-	cleanup();
-	tst_exit();
-}
-
-void setup(void)
+static void setup(void)
 {
 	char nobody_uid[] = "nobody";
 	struct passwd *ltpuser;
@@ -93,71 +52,73 @@ void setup(void)
 	struct seminfo ipc_buf;
 	union semun arr;
 
-	tst_require_root();
-
-	ltpuser = SAFE_GETPWNAM(NULL, nobody_uid);
-	SAFE_SETUID(NULL, ltpuser->pw_uid);
-
-	tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
-	TEST_PAUSE;
-
-	tst_tmpdir();
+	ltpuser = SAFE_GETPWNAM(nobody_uid);
+	SAFE_SETUID(ltpuser->pw_uid);
 
 	/* get an IPC resource key */
-	semkey = getipckey();
+	semkey = GETIPCKEY();
 
 	/* create a semaphore set with read and alter permissions */
 	sem_id_1 = semget(semkey, PSEMS, IPC_CREAT | IPC_EXCL | SEM_RA);
-	if (sem_id_1 == -1) {
-		tst_brkm(TBROK | TERRNO, cleanup,
-			 "couldn't create semaphore in setup");
-	}
+	if (sem_id_1 == -1)
+		tst_brk(TBROK | TERRNO, "couldn't create semaphore in setup");
 
 	/* Get an new IPC resource key. */
-	semkey2 = getipckey();
+	semkey2 = GETIPCKEY();
 
 	/* create a semaphore set without read and alter permissions */
 	sem_id_2 = semget(semkey2, PSEMS, IPC_CREAT | IPC_EXCL);
-	if (sem_id_2 == -1) {
-		tst_brkm(TBROK | TERRNO, cleanup,
-			 "couldn't create semaphore in setup");
-	}
+	if (sem_id_2 == -1)
+		tst_brk(TBROK | TERRNO, "couldn't create semaphore in setup");
 
 	arr.__buf = &ipc_buf;
 	if (semctl(sem_id_1, 0, IPC_INFO, arr) == -1)
-		tst_brkm(TBROK | TERRNO, cleanup, "semctl() IPC_INFO failed");
+		tst_brk(TBROK | TERRNO, "semctl() IPC_INFO failed");
 
 	/* for ERANGE errno test */
 	arr.val = 1;
 	s_buf[0].sem_op = ipc_buf.semvmx;
 	if (semctl(sem_id_1, 0, SETVAL, arr) == -1)
-		tst_brkm(TBROK | TERRNO, cleanup, "semctl() SETVAL failed");
+		tst_brk(TBROK | TERRNO, "semctl() SETVAL failed");
 }
 
-static void semop_verify(int i)
+static void run(unsigned int i)
 {
-	TEST(semop(*(TC[i].semid), TC[i].t_sbuf, TC[i].t_ops));
+	TEST(semop(*(tc[i].semid), tc[i].t_sbuf, tc[i].t_ops));
 
-	if (TEST_RETURN != -1) {
-		tst_resm(TFAIL, "call succeeded unexpectedly");
+	if (TST_RET != -1) {
+		tst_res(TFAIL | TTERRNO, "call succeeded unexpectedly");
 		return;
 	}
 
-	if (TEST_ERRNO == TC[i].error) {
-		tst_resm(TPASS | TTERRNO, "semop failed as expected");
+	if (TST_ERR == tc[i].error) {
+		tst_res(TPASS | TTERRNO, "semop failed as expected");
 	} else {
-		tst_resm(TFAIL | TTERRNO,
+		tst_res(TFAIL | TTERRNO,
 			 "semop failed unexpectedly; expected: "
-			 "%d - %s", TC[i].error, strerror(TC[i].error));
+			 "%d - %s", tc[i].error, strerror(tc[i].error));
 	}
 }
 
-void cleanup(void)
+static void cleanup(void)
 {
-	/* if they exist, remove the semaphore resources */
-	rm_sema(sem_id_1);
-	rm_sema(sem_id_2);
+	union semun arr;
 
-	tst_rmdir();
+	if (sem_id_1 != -1) {
+		if (semctl(sem_id_1, 0, IPC_RMID, arr) == -1)
+			tst_res(TINFO, "WARNING: semaphore deletion failed.");
+	}
+	if (sem_id_2 != -1) {
+		if (semctl(sem_id_2, 0, IPC_RMID, arr) == -1)
+			tst_res(TINFO, "WARNING: semaphore deletion failed.");
+	}
 }
+
+static struct tst_test test = {
+	.test = run,
+	.tcnt = ARRAY_SIZE(tc),
+	.setup = setup,
+	.cleanup = cleanup,
+	.needs_tmpdir = 1,
+	.needs_root = 1,
+};
diff --git a/testcases/kernel/syscalls/ipc/semop/semop03.c b/testcases/kernel/syscalls/ipc/semop/semop03.c
index a904e99439e2..4f5f78eb6d8d 100644
--- a/testcases/kernel/syscalls/ipc/semop/semop03.c
+++ b/testcases/kernel/syscalls/ipc/semop/semop03.c
@@ -1,21 +1,5 @@
-/*
- *
- *   Copyright (c) International Business Machines  Corp., 2001
- *
- *   This program is free software;  you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License as published by
- *   the Free Software Foundation; either version 2 of the License, or
- *   (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- *   the GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program;  if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
+// SPDX-License-Identifier: GPL-2.0-or-later
+/* Copyright (c) International Business Machines  Corp., 2001 */
 
 /*
  * NAME
@@ -50,109 +34,75 @@
  *	none
  */
 
-#include "ipcsem.h"
-
-char *TCID = "semop03";
-int TST_TOTAL = 2;
+#include <sys/sem.h>
+#include "tst_test.h"
+#include "libnewipc.h"
+#include "lapi/semun.h"
 
-int sem_id_1 = -1;
+static key_t semkey;
+static int sem_id = -1;
+static struct sembuf s_buf;
 
-struct sembuf s_buf;
+static int tc[] = { -1, PSEMS + 1 }; /* negative and too many "primitive" semas */
 
-int TC[] = { -1, PSEMS + 1 };	/* negative and too many "primitive" semas */
-
-int main(int ac, char **av)
+static void run(unsigned int i)
 {
-	int lc;
-	int i;
-
-	tst_parse_opts(ac, av, NULL, NULL);
-
-	setup();		/* global setup */
-
 	/* initialize two fields in the sembuf structure here */
 	s_buf.sem_op = 1;	/* add this value to struct sem.semval */
 	s_buf.sem_flg = SEM_UNDO;	/* undo when process exits */
 
-	/* The following loop checks looping state if -i option given */
-
-	for (lc = 0; TEST_LOOPING(lc); lc++) {
-		/* reset tst_count in case we are looping */
-		tst_count = 0;
-
-		for (i = 0; i < TST_TOTAL; i++) {
-
-			/* initialize the last field in the sembuf */
-			/* structure to the test dependent value   */
-			s_buf.sem_num = TC[i];
-
-			/*
-			 * use the TEST macro to make the call
-			 */
+	/*
+	 * initialize the last field in the sembuf structure to the test
+	 * dependent value.
+	 */
+	s_buf.sem_num = tc[i];
 
-			TEST(semop(sem_id_1, &s_buf, 1));
+	/*
+	 * use the TEST macro to make the call
+	 */
 
-			if (TEST_RETURN != -1) {
-				tst_resm(TFAIL, "call succeeded unexpectedly");
-				continue;
-			}
+	TEST(semop(sem_id, &s_buf, 1));
 
-			switch (TEST_ERRNO) {
-			case EFBIG:
-				tst_resm(TPASS, "expected failure - errno = "
-					 "%d : %s", TEST_ERRNO,
-					 strerror(TEST_ERRNO));
-				break;
-			default:
-				tst_resm(TFAIL, "unexpected error - "
-					 "%d : %s", TEST_ERRNO,
-					 strerror(TEST_ERRNO));
-				break;
-			}
-		}
+	if (TST_RET != -1) {
+		tst_res(TFAIL | TTERRNO, "call succeeded unexpectedly");
+		return;
 	}
 
-	cleanup();
-
-	tst_exit();
+	switch (TST_ERR) {
+	case EFBIG:
+		tst_res(TPASS | TTERRNO, "expected failure");
+		break;
+	default:
+		tst_res(TFAIL | TTERRNO, "unexpected failure");
+		break;
+	}
 }
 
-/*
- * setup() - performs all the ONE TIME setup for this test.
- */
-void setup(void)
+static void setup(void)
 {
-
-	tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
-	TEST_PAUSE;
-
-	/*
-	 * Create a temporary directory and cd into it.
-	 * This helps to ensure that a unique msgkey is created.
-	 * See ../lib/libipc.c for more information.
-	 */
-	tst_tmpdir();
-
 	/* get an IPC resource key */
-	semkey = getipckey();
+	semkey = GETIPCKEY();
 
 	/* create a semaphore with read and alter permissions */
-	if ((sem_id_1 =
-	     semget(semkey, PSEMS, IPC_CREAT | IPC_EXCL | SEM_RA)) == -1) {
-		tst_brkm(TBROK, cleanup, "couldn't create semaphore in setup");
-	}
+	if ((sem_id = semget(semkey, PSEMS, IPC_CREAT | IPC_EXCL | SEM_RA)) ==
+	    -1)
+		tst_brk(TBROK | TERRNO, "couldn't create semaphore in setup");
 }
 
-/*
- * cleanup() - performs all the ONE TIME cleanup for this test@completion
- * 	       or premature exit.
- */
-void cleanup(void)
+static void cleanup(void)
 {
-	/* if it exists, remove the semaphore resource */
-	rm_sema(sem_id_1);
-
-	tst_rmdir();
+	union semun arr;
 
+	if (sem_id != -1) {
+		if (semctl(sem_id, 0, IPC_RMID, arr) == -1)
+			tst_res(TINFO, "WARNING: semaphore deletion failed.");
+	}
 }
+
+static struct tst_test test = {
+	.test = run,
+	.tcnt = ARRAY_SIZE(tc),
+	.setup = setup,
+	.cleanup = cleanup,
+	.needs_tmpdir = 1,
+};
diff --git a/testcases/kernel/syscalls/ipc/semop/semop04.c b/testcases/kernel/syscalls/ipc/semop/semop04.c
index bf425b54bb4c..0faf00a3585f 100644
--- a/testcases/kernel/syscalls/ipc/semop/semop04.c
+++ b/testcases/kernel/syscalls/ipc/semop/semop04.c
@@ -1,21 +1,5 @@
-/*
- *
- *   Copyright (c) International Business Machines  Corp., 2001
- *
- *   This program is free software;  you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License as published by
- *   the Free Software Foundation; either version 2 of the License, or
- *   (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- *   the GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program;  if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
+// SPDX-License-Identifier: GPL-2.0-or-later
+/* Copyright (c) International Business Machines  Corp., 2001 */
 
 /*
  * NAME
@@ -50,22 +34,24 @@
  *	none
  */
 
-#include "ipcsem.h"
-
-char *TCID = "semop04";
-int TST_TOTAL = 2;
+#include <sys/sem.h>
+#include "tst_test.h"
+#include "libnewipc.h"
+#include "lapi/semun.h"
 
-int sem_id_1 = -1;
+static int sem_id = -1;
+static int val; /* value for SETVAL */
 
-struct sembuf s_buf;
+static key_t semkey;
+static struct sembuf s_buf;
 
-struct test_case_t {
+static struct test_case_t {
 	union semun get_arr;
 	short op;
 	short flg;
 	short num;
 	int error;
-} TC[] = {
+} tc[] = {
 	/* EAGAIN sem_op = 0 */
 	{ {
 	1}, 0, IPC_NOWAIT, 2, EAGAIN},
@@ -74,104 +60,61 @@ struct test_case_t {
 	0}, -1, IPC_NOWAIT, 2, EAGAIN}
 };
 
-int main(int ac, char **av)
+static void run(unsigned int i)
 {
-	int lc;
-	int val;		/* value for SETVAL */
-
-	int i;
-
-	tst_parse_opts(ac, av, NULL, NULL);
-
-	setup();		/* global setup */
-
-	/* The following loop checks looping state if -i option given */
-
-	for (lc = 0; TEST_LOOPING(lc); lc++) {
-		/* reset tst_count in case we are looping */
-		tst_count = 0;
-
-		val = 1;
-		for (i = 0; i < TST_TOTAL; i++) {
-
-			/* initialize the s_buf buffer */
-			s_buf.sem_op = TC[i].op;
-			s_buf.sem_flg = TC[i].flg;
-			s_buf.sem_num = TC[i].num;
-
-			/* initialize all the primitive semaphores */
-			TC[i].get_arr.val = val--;
-			if (semctl(sem_id_1, TC[i].num, SETVAL, TC[i].get_arr)
-			    == -1) {
-				tst_brkm(TBROK, cleanup, "semctl() failed");
-			}
-
-			/*
-			 * make the call with the TEST macro
-			 */
-
-			TEST(semop(sem_id_1, &s_buf, 1));
-
-			if (TEST_RETURN != -1) {
-				tst_resm(TFAIL, "call succeeded unexpectedly");
-				continue;
-			}
-
-			if (TEST_ERRNO == TC[i].error) {
-				tst_resm(TPASS,
-					 "expected failure - errno = %d"
-					 " : %s", TEST_ERRNO,
-					 strerror(TEST_ERRNO));
-			} else {
-				tst_resm(TFAIL, "unexpected error - "
-					 "%d : %s", TEST_ERRNO,
-					 strerror(TEST_ERRNO));
-			}
-		}
+	/* initialize the s_buf buffer */
+	s_buf.sem_op = tc[i].op;
+	s_buf.sem_flg = tc[i].flg;
+	s_buf.sem_num = tc[i].num;
+
+	/* initialize all the primitive semaphores */
+	tc[i].get_arr.val = val--;
+	if (semctl(sem_id, tc[i].num, SETVAL, tc[i].get_arr) == -1)
+		tst_brk(TBROK | TERRNO, "semctl() failed");
+
+	TEST(semop(sem_id, &s_buf, 1));
+	if (TST_RET != -1) {
+		tst_res(TFAIL, "call succeeded unexpectedly");
+		return;
 	}
 
-	cleanup();
-
-	tst_exit();
+	if (TST_ERR == tc[i].error)
+		tst_res(TPASS | TTERRNO, "expected failure");
+	else
+		tst_res(TFAIL | TTERRNO, "unexpected failure");
 }
 
-/*
- * setup() - performs all the ONE TIME setup for this test.
- */
-void setup(void)
+static void setup(void)
 {
+	val = 1;
 
-	tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
-	TEST_PAUSE;
+	/* get an IPC resource key */
+	semkey = GETIPCKEY();
 
 	/*
-	 * Create a temporary directory and cd into it.
-	 * This helps to ensure that a unique msgkey is created.
-	 * See ../lib/libipc.c for more information.
+	 * create a semaphore set with read and alter permissions and PSEMS
+	 * "primitive" semaphores.
 	 */
-	tst_tmpdir();
-
-	/* get an IPC resource key */
-	semkey = getipckey();
-
-	/* create a semaphore set with read and alter permissions */
-	/* and PSEMS "primitive" semaphores                       */
-	if ((sem_id_1 =
-	     semget(semkey, PSEMS, IPC_CREAT | IPC_EXCL | SEM_RA)) == -1) {
-		tst_brkm(TBROK, cleanup, "couldn't create semaphore in setup");
+	if ((sem_id = semget(semkey, PSEMS, IPC_CREAT | IPC_EXCL | SEM_RA)) ==
+	     -1) {
+		tst_brk(TBROK | TERRNO, "couldn't create semaphore in setup");
 	}
 }
 
-/*
- * cleanup() - performs all the ONE TIME cleanup for this test@completion
- * 	       or premature exit.
- */
-void cleanup(void)
+static void cleanup(void)
 {
-	/* if it exists, remove the semaphore resource */
-	rm_sema(sem_id_1);
-
-	tst_rmdir();
+	union semun arr;
 
+	if (sem_id != -1) {
+		if (semctl(sem_id, 0, IPC_RMID, arr) == -1)
+			tst_res(TINFO, "WARNING: semaphore deletion failed.");
+	}
 }
+
+static struct tst_test test = {
+	.test = run,
+	.tcnt = ARRAY_SIZE(tc),
+	.setup = setup,
+	.cleanup = cleanup,
+	.needs_tmpdir = 1,
+};
diff --git a/testcases/kernel/syscalls/ipc/semop/semop05.c b/testcases/kernel/syscalls/ipc/semop/semop05.c
index 6ed25014c7af..9e8e040b0b19 100644
--- a/testcases/kernel/syscalls/ipc/semop/semop05.c
+++ b/testcases/kernel/syscalls/ipc/semop/semop05.c
@@ -1,21 +1,5 @@
-/*
- *
- *   Copyright (c) International Business Machines  Corp., 2001
- *
- *   This program is free software;  you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License as published by
- *   the Free Software Foundation; either version 2 of the License, or
- *   (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- *   the GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program;  if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
+// SPDX-License-Identifier: GPL-2.0-or-later
+/* Copyright (c) International Business Machines  Corp., 2001 */
 
 /*
  * NAME
@@ -60,18 +44,18 @@
  *	none
  */
 
-#include "ipcsem.h"
-
+#include <stdio.h>
+#include <stdlib.h>
 #include <sys/types.h>
 #include <sys/wait.h>
-#include "safe_macros.h"
-
-char *TCID = "semop05";
-int TST_TOTAL = 4;
-
-int sem_id_1 = -1;
+#include <sys/sem.h>
+#include "tst_test.h"
+#include "libnewipc.h"
+#include "lapi/semun.h"
 
-struct sembuf s_buf;
+static key_t semkey;
+static int sem_id = -1;
+static struct sembuf s_buf;
 
 struct test_case_t {
 	union semun semunptr;
@@ -79,7 +63,7 @@ struct test_case_t {
 	short flg;
 	short num;
 	int error;
-} TC[] = {
+} tc[] = {
 	/* EIRDM sem_op = 0 */
 	{ {
 	1}, 0, 0, 2, EIDRM},
@@ -96,189 +80,166 @@ struct test_case_t {
 
 #ifdef UCLINUX
 #define PIPE_NAME	"semop05"
-void do_child_uclinux();
+static void do_child_uclinux();
 static int i_uclinux;
 #endif
 
-int main(int ac, char **av)
+static inline int process_state_wait2(pid_t pid, const char state)
 {
-	int lc;
-	int i;
-	pid_t pid;
-	void do_child();
+	char proc_path[128], cur_state;
 
-	tst_parse_opts(ac, av, NULL, NULL);
+	snprintf(proc_path, sizeof(proc_path), "/proc/%i/stat", pid);
 
-#ifdef UCLINUX
-	maybe_run_child(&do_child_uclinux, "dd", &i_uclinux, &sem_id_1);
-#endif
-
-	setup();		/* global setup */
-
-	/* The following loop checks looping state if -i option given */
-
-	for (lc = 0; TEST_LOOPING(lc); lc++) {
-		/* reset tst_count in case we are looping */
-		tst_count = 0;
-
-		for (i = 0; i < TST_TOTAL; i++) {
-
-			/* initialize the s_buf buffer */
-			s_buf.sem_op = TC[i].op;
-			s_buf.sem_flg = TC[i].flg;
-			s_buf.sem_num = TC[i].num;
-
-			/* initialize all of the primitive semaphores */
-			if (semctl(sem_id_1, TC[i].num, SETVAL, TC[i].semunptr)
-			    == -1) {
-				tst_brkm(TBROK, cleanup, "semctl() failed");
-			}
-
-			if ((pid = FORK_OR_VFORK()) == -1) {
-				tst_brkm(TBROK, cleanup, "could not fork");
-			}
-
-			if (pid == 0) {	/* child */
+	for (;;) {
+		FILE *f = fopen(proc_path, "r");
+		if (!f) {
+			tst_res(TFAIL, "Failed to open '%s': %s\n", proc_path,
+				strerror(errno));
+			return 1;
+		}
 
-#ifdef UCLINUX
-				if (self_exec(av[0], "dd", i, sem_id_1) < 0) {
-					tst_brkm(TBROK, cleanup,
-						 "could not self_exec");
-				}
-#else
-				do_child(i);
-#endif
-			} else {
-				TST_PROCESS_STATE_WAIT(cleanup, pid, 'S');
-
-				/*
-				 * If we are testing for EIDRM then remove
-				 * the semaphore, else send a signal that
-				 * must be caught as we are testing for
-				 * EINTR.
-				 */
-				if (TC[i].error == EIDRM) {
-					/* remove the semaphore resource */
-					rm_sema(sem_id_1);
-				} else {
-					SAFE_KILL(cleanup, pid, SIGHUP);
-				}
-
-				/* let the child carry on */
-				waitpid(pid, NULL, 0);
-			}
-
-			/*
-			 * recreate the semaphore resource if needed
-			 */
-			if (TC[i].error == EINTR) {
-				continue;
-			}
-
-			if ((sem_id_1 = semget(semkey, PSEMS, IPC_CREAT |
-					       IPC_EXCL | SEM_RA)) == -1) {
-				tst_brkm(TBROK, cleanup, "couldn't recreate "
-					 "semaphore");
-			}
+		if (fscanf(f, "%*i %*s %c", &cur_state) != 1) {
+			fclose(f);
+			tst_res(TFAIL, "Failed to read '%s': %s\n", proc_path,
+				strerror(errno));
+			return 1;
 		}
-	}
+		fclose(f);
 
-	cleanup();
+		if (state == cur_state)
+			return 0;
 
-	tst_exit();
+		usleep(10000);
+	}
 }
 
-/*
- * do_child()
- */
-void do_child(int i)
+static void do_child(int i)
 {
-	/*
-	 * make the call with the TEST macro
-	 */
-
-	TEST(semop(sem_id_1, &s_buf, 1));
-
-	if (TEST_RETURN != -1) {
-		tst_resm(TFAIL, "call succeeded when error expected");
+	TEST(semop(sem_id, &s_buf, 1));
+	if (TST_RET != -1) {
+		tst_res(TFAIL, "call succeeded when error expected");
 		exit(-1);
 	}
 
-	if (TEST_ERRNO == TC[i].error) {
-		tst_resm(TPASS, "expected failure - errno = %d"
-			 " : %s", TEST_ERRNO, strerror(TEST_ERRNO));
-	} else {
-		tst_resm(TFAIL, "unexpected error - "
-			 "%d : %s", TEST_ERRNO, strerror(TEST_ERRNO));
-	}
+	if (TST_ERR == tc[i].error)
+		tst_res(TPASS | TTERRNO, "expected failure");
+	else
+		tst_res(TFAIL | TTERRNO, "unexpected failure");
 
 	exit(0);
 }
 
-void sighandler(int sig)
+static void sighandler(int sig)
 {
-	if (sig == SIGHUP)
-		return;
-	else
-		tst_brkm(TBROK, NULL, "unexpected signal %d received", sig);
+	if (sig != SIGHUP)
+		tst_brk(TBROK, "unexpected signal %d received", sig);
 }
 
-#ifdef UCLINUX
-/*
- * do_child_uclinux() - capture signals, re-initialize s_buf then call do_child
- *                      with the appropriate argument
- */
-void do_child_uclinux(void)
+static void setup(void)
 {
-	int i = i_uclinux;
+	SAFE_SIGNAL(SIGHUP, sighandler);
 
-	tst_sig(FORK, sighandler, cleanup);
+	/* get an IPC resource key */
+	semkey = GETIPCKEY();
 
-	/* initialize the s_buf buffer */
-	s_buf.sem_op = TC[i].op;
-	s_buf.sem_flg = TC[i].flg;
-	s_buf.sem_num = TC[i].num;
+	/*
+	 * create a semaphore set with read and alter permissions and PSEMS
+	 * "primitive" semaphores.
+	 */
+	if ((sem_id = semget(semkey, PSEMS, IPC_CREAT | IPC_EXCL | SEM_RA)) ==
+	    -1)
+		tst_brk(TBROK | TERRNO, "couldn't create semaphore in setup");
+}
 
-	do_child(i);
+static void cleanup(void)
+{
+	union semun arr;
+
+	if (sem_id != -1) {
+		if (semctl(sem_id, 0, IPC_RMID, arr) == -1)
+			tst_res(TINFO, "WARNING: semaphore deletion failed.");
+	}
 }
-#endif
 
-/*
- * setup() - performs all the ONE TIME setup for this test.
- */
-void setup(void)
+static void run(unsigned int i)
 {
+	pid_t pid;
 
-	tst_sig(FORK, sighandler, cleanup);
+#ifdef UCLINUX
+	maybe_run_child(&do_child_uclinux, "dd", &i_uclinux, &sem_id);
+#endif
+	/* initialize the s_buf buffer */
+	s_buf.sem_op = tc[i].op;
+	s_buf.sem_flg = tc[i].flg;
+	s_buf.sem_num = tc[i].num;
 
-	TEST_PAUSE;
+	/* initialize all of the primitive semaphores */
+	if (semctl(sem_id, tc[i].num, SETVAL, tc[i].semunptr) == -1)
+		tst_brk(TBROK | TERRNO, "semctl() failed");
 
-	/*
-	 * Create a temporary directory and cd into it.
-	 * This helps to ensure that a unique msgkey is created.
-	 * See ../lib/libipc.c for more information.
-	 */
-	tst_tmpdir();
+	pid = SAFE_FORK();
 
-	/* get an IPC resource key */
-	semkey = getipckey();
+	if (pid == 0) {	/* child */
+#ifdef UCLINUX
+		if (self_exec(av[0], "dd", i, sem_id) < 0)
+			tst_brk(TBROK, "could not self_exec");
+#else
+		do_child(i);
+#endif
+	} else {
+		process_state_wait2(pid, 'S');
+
+		/*
+		 * If we are testing for EIDRM then remove
+		 * the semaphore, else send a signal that
+		 * must be caught as we are testing for
+		 * EINTR.
+		 */
+		if (tc[i].error == EIDRM) {
+			/* remove the semaphore resource */
+			cleanup();
+		} else {
+			SAFE_KILL(pid, SIGHUP);
+		}
 
-	/* create a semaphore set with read and alter permissions */
-	/* and PSEMS "primitive" semaphores                       */
-	if ((sem_id_1 =
-	     semget(semkey, PSEMS, IPC_CREAT | IPC_EXCL | SEM_RA)) == -1) {
-		tst_brkm(TBROK, cleanup, "couldn't create semaphore in setup");
+		/* let the child carry on */
+		waitpid(pid, NULL, 0);
 	}
+
+	/*
+	 * recreate the semaphore resource if needed
+	 */
+	if (tc[i].error == EINTR)
+		return;
+
+	if ((sem_id = semget(semkey, PSEMS, IPC_CREAT | IPC_EXCL | SEM_RA)) ==
+	    -1)
+		tst_brk(TBROK | TERRNO, "couldn't recreate semaphore");
 }
 
+#ifdef UCLINUX
 /*
- * cleanup() - performs all the ONE TIME cleanup for this test@completion
- *	       or premature exit.
+ * do_child_uclinux() - capture signals, re-initialize s_buf then call do_child
+ *                      with the appropriate argument
  */
-void cleanup(void)
+static void do_child_uclinux(void)
 {
-	/* if it exists, remove the semaphore resource */
-	rm_sema(sem_id_1);
+	int i = i_uclinux;
+
+	/* initialize the s_buf buffer */
+	s_buf.sem_op = tc[i].op;
+	s_buf.sem_flg = tc[i].flg;
+	s_buf.sem_num = tc[i].num;
 
-	tst_rmdir();
+	do_child(i);
 }
+#endif
+
+static struct tst_test test = {
+	.test = run,
+	.tcnt = ARRAY_SIZE(tc),
+	.setup = setup,
+	.cleanup = cleanup,
+	.needs_tmpdir = 1,
+	.forks_child = 1,
+};
-- 
2.25.0.rc1.19.g042ed3e048af


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V4 15/17] syscalls/semtimedop: Add support for semtimedop and its time64 version
  2020-05-22 10:51 [LTP] [PATCH V4 00/17] Syscalls: Add support for time64 variants Viresh Kumar
                   ` (13 preceding siblings ...)
  2020-05-22 10:51 ` [LTP] [PATCH V4 14/17] syscalls/semop: Migrate to new test framework Viresh Kumar
@ 2020-05-22 10:51 ` Viresh Kumar
  2020-05-22 10:51 ` [LTP] [PATCH V4 16/17] syscalls/utimensat: Migrate to new test framework Viresh Kumar
  2020-05-22 10:51 ` [LTP] [PATCH V4 17/17] syscalls/utimensat: Add support for time64 tests Viresh Kumar
  16 siblings, 0 replies; 33+ messages in thread
From: Viresh Kumar @ 2020-05-22 10:51 UTC (permalink / raw)
  To: ltp

This adds support for semtimedop() and its time64 variant to the
existing semop() syscall tests.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 testcases/kernel/syscalls/ipc/semop/semop.h   | 55 +++++++++++++++++++
 testcases/kernel/syscalls/ipc/semop/semop01.c | 14 ++++-
 testcases/kernel/syscalls/ipc/semop/semop02.c | 15 ++++-
 testcases/kernel/syscalls/ipc/semop/semop03.c | 16 +++++-
 testcases/kernel/syscalls/ipc/semop/semop04.c | 16 +++++-
 testcases/kernel/syscalls/ipc/semop/semop05.c | 16 +++++-
 6 files changed, 127 insertions(+), 5 deletions(-)
 create mode 100644 testcases/kernel/syscalls/ipc/semop/semop.h

diff --git a/testcases/kernel/syscalls/ipc/semop/semop.h b/testcases/kernel/syscalls/ipc/semop/semop.h
new file mode 100644
index 000000000000..584d12c68e0d
--- /dev/null
+++ b/testcases/kernel/syscalls/ipc/semop/semop.h
@@ -0,0 +1,55 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#ifndef SEMOP_VAR__
+#define SEMOP_VAR__
+
+#include <sys/sem.h>
+#include "tst_timer.h"
+
+static inline int sys_semtimedop(int semid, struct sembuf *sops, size_t nsops,
+		void *timeout)
+{
+	return tst_syscall(__NR_semtimedop, semid, sops, nsops, timeout);
+}
+
+static inline int sys_semtimedop_time64(int semid, struct sembuf *sops,
+					size_t nsops, void *timeout)
+{
+	return tst_syscall(__NR_semtimedop_time64, semid, sops, nsops, timeout);
+}
+
+struct test_variants {
+	int (*semop)(int semid, struct sembuf *sops, size_t nsops);
+	int (*semtimedop)(int semid, struct sembuf *sops, size_t nsops, void *timeout);
+	enum tst_ts_type type;
+	char *desc;
+} variants[] = {
+	{ .semop = semop, .type = TST_LIBC_TIMESPEC, .desc = "semop: vDSO or syscall"},
+
+#if (__NR_semtimedop != __LTP__NR_INVALID_SYSCALL)
+	{ .semtimedop = sys_semtimedop, .type = TST_KERN_OLD_TIMESPEC, .desc = "semtimedop: syscall with old kernel spec"},
+#endif
+
+#if (__NR_semtimedop_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .semtimedop = sys_semtimedop_time64, .type = TST_KERN_TIMESPEC, .desc = "semtimedop: syscall time64 with kernel spec"},
+#endif
+};
+
+static inline int call_semop(struct test_variants *tv, int semid,
+		struct sembuf *sops, size_t nsops, struct tst_ts *timeout)
+{
+	if (tv->semop)
+		return tv->semop(semid, sops, nsops);
+
+	return tv->semtimedop(semid, sops, nsops, tst_ts_get(timeout));
+}
+
+static inline void semop_supported_by_kernel(struct test_variants *tv)
+{
+       /* Check if the syscall is implemented on the platform */
+       TEST(call_semop(tv, 0, NULL, 0, NULL));
+       if (TST_RET == -1 && TST_ERR == ENOSYS)
+               tst_brk(TCONF, "Test not supported on kernel/platform");
+}
+
+#endif /* SEMOP_VAR__ */
diff --git a/testcases/kernel/syscalls/ipc/semop/semop01.c b/testcases/kernel/syscalls/ipc/semop/semop01.c
index bcb45fa69320..7947183c837b 100644
--- a/testcases/kernel/syscalls/ipc/semop/semop01.c
+++ b/testcases/kernel/syscalls/ipc/semop/semop01.c
@@ -41,6 +41,7 @@
 #include "tst_test.h"
 #include "libnewipc.h"
 #include "lapi/semun.h"
+#include "semop.h"
 
 #define NSEMS	4		/* the number of primitive semaphores to test */
 
@@ -52,11 +53,17 @@ static struct sembuf sops[PSEMS];
 
 static void run(void)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	union semun arr = { .val = 0 };
+	struct tst_ts timeout;
 	int fail = 0;
 	int i;
 
-	TEST(semop(sem_id, sops, NSEMS));
+	timeout.type = tv->type;
+	tst_ts_set_sec(&timeout, 1);
+	tst_ts_set_nsec(&timeout, 10000);
+
+	TEST(call_semop(tv, sem_id, sops, NSEMS, &timeout));
 
 	if (TST_RET == -1) {
 		tst_res(TFAIL | TTERRNO, "semop() failed");
@@ -92,8 +99,12 @@ static void run(void)
 
 static void setup(void)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	int i;
 
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	semop_supported_by_kernel(tv);
+
 	get_arr.array = malloc(sizeof(unsigned short int) * PSEMS);
 	if (get_arr.array == NULL)
 		tst_brk(TBROK, "malloc failed");
@@ -124,6 +135,7 @@ static void cleanup(void)
 
 static struct tst_test test = {
 	.test_all = run,
+	.test_variants = ARRAY_SIZE(variants),
 	.setup = setup,
 	.cleanup = cleanup,
 	.needs_tmpdir = 1,
diff --git a/testcases/kernel/syscalls/ipc/semop/semop02.c b/testcases/kernel/syscalls/ipc/semop/semop02.c
index f24d284776a4..4ffb9dd72c1c 100644
--- a/testcases/kernel/syscalls/ipc/semop/semop02.c
+++ b/testcases/kernel/syscalls/ipc/semop/semop02.c
@@ -20,6 +20,7 @@
 #include "tst_test.h"
 #include "libnewipc.h"
 #include "lapi/semun.h"
+#include "semop.h"
 
 static int sem_id_1 = -1;	/* a semaphore set with read & alter permissions */
 static int sem_id_2 = -1;	/* a semaphore set without read & alter permissions */
@@ -46,12 +47,16 @@ static struct test_case_t {
 
 static void setup(void)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	char nobody_uid[] = "nobody";
 	struct passwd *ltpuser;
 	key_t semkey2;
 	struct seminfo ipc_buf;
 	union semun arr;
 
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	semop_supported_by_kernel(tv);
+
 	ltpuser = SAFE_GETPWNAM(nobody_uid);
 	SAFE_SETUID(ltpuser->pw_uid);
 
@@ -84,7 +89,14 @@ static void setup(void)
 
 static void run(unsigned int i)
 {
-	TEST(semop(*(tc[i].semid), tc[i].t_sbuf, tc[i].t_ops));
+	struct test_variants *tv = &variants[tst_variant];
+	struct tst_ts timeout;
+
+	timeout.type = tv->type;
+	tst_ts_set_sec(&timeout, 1);
+	tst_ts_set_nsec(&timeout, 10000);
+
+	TEST(call_semop(tv, *(tc[i].semid), tc[i].t_sbuf, tc[i].t_ops, &timeout));
 
 	if (TST_RET != -1) {
 		tst_res(TFAIL | TTERRNO, "call succeeded unexpectedly");
@@ -117,6 +129,7 @@ static void cleanup(void)
 static struct tst_test test = {
 	.test = run,
 	.tcnt = ARRAY_SIZE(tc),
+	.test_variants = ARRAY_SIZE(variants),
 	.setup = setup,
 	.cleanup = cleanup,
 	.needs_tmpdir = 1,
diff --git a/testcases/kernel/syscalls/ipc/semop/semop03.c b/testcases/kernel/syscalls/ipc/semop/semop03.c
index 4f5f78eb6d8d..40a6b095c57d 100644
--- a/testcases/kernel/syscalls/ipc/semop/semop03.c
+++ b/testcases/kernel/syscalls/ipc/semop/semop03.c
@@ -38,6 +38,7 @@
 #include "tst_test.h"
 #include "libnewipc.h"
 #include "lapi/semun.h"
+#include "semop.h"
 
 static key_t semkey;
 static int sem_id = -1;
@@ -47,6 +48,13 @@ static int tc[] = { -1, PSEMS + 1 }; /* negative and too many "primitive" semas
 
 static void run(unsigned int i)
 {
+	struct test_variants *tv = &variants[tst_variant];
+	struct tst_ts timeout;
+
+	timeout.type = tv->type;
+	tst_ts_set_sec(&timeout, 1);
+	tst_ts_set_nsec(&timeout, 10000);
+
 	/* initialize two fields in the sembuf structure here */
 	s_buf.sem_op = 1;	/* add this value to struct sem.semval */
 	s_buf.sem_flg = SEM_UNDO;	/* undo when process exits */
@@ -61,7 +69,7 @@ static void run(unsigned int i)
 	 * use the TEST macro to make the call
 	 */
 
-	TEST(semop(sem_id, &s_buf, 1));
+	TEST(call_semop(tv, sem_id, &s_buf, 1, &timeout));
 
 	if (TST_RET != -1) {
 		tst_res(TFAIL | TTERRNO, "call succeeded unexpectedly");
@@ -80,6 +88,11 @@ static void run(unsigned int i)
 
 static void setup(void)
 {
+	struct test_variants *tv = &variants[tst_variant];
+
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	semop_supported_by_kernel(tv);
+
 	/* get an IPC resource key */
 	semkey = GETIPCKEY();
 
@@ -102,6 +115,7 @@ static void cleanup(void)
 static struct tst_test test = {
 	.test = run,
 	.tcnt = ARRAY_SIZE(tc),
+	.test_variants = ARRAY_SIZE(variants),
 	.setup = setup,
 	.cleanup = cleanup,
 	.needs_tmpdir = 1,
diff --git a/testcases/kernel/syscalls/ipc/semop/semop04.c b/testcases/kernel/syscalls/ipc/semop/semop04.c
index 0faf00a3585f..5e4bfeb625e2 100644
--- a/testcases/kernel/syscalls/ipc/semop/semop04.c
+++ b/testcases/kernel/syscalls/ipc/semop/semop04.c
@@ -38,6 +38,7 @@
 #include "tst_test.h"
 #include "libnewipc.h"
 #include "lapi/semun.h"
+#include "semop.h"
 
 static int sem_id = -1;
 static int val; /* value for SETVAL */
@@ -62,6 +63,13 @@ static struct test_case_t {
 
 static void run(unsigned int i)
 {
+	struct test_variants *tv = &variants[tst_variant];
+	struct tst_ts timeout;
+
+	timeout.type = tv->type;
+	tst_ts_set_sec(&timeout, 1);
+	tst_ts_set_nsec(&timeout, 10000);
+
 	/* initialize the s_buf buffer */
 	s_buf.sem_op = tc[i].op;
 	s_buf.sem_flg = tc[i].flg;
@@ -72,7 +80,7 @@ static void run(unsigned int i)
 	if (semctl(sem_id, tc[i].num, SETVAL, tc[i].get_arr) == -1)
 		tst_brk(TBROK | TERRNO, "semctl() failed");
 
-	TEST(semop(sem_id, &s_buf, 1));
+	TEST(call_semop(tv, sem_id, &s_buf, 1, &timeout));
 	if (TST_RET != -1) {
 		tst_res(TFAIL, "call succeeded unexpectedly");
 		return;
@@ -86,6 +94,11 @@ static void run(unsigned int i)
 
 static void setup(void)
 {
+	struct test_variants *tv = &variants[tst_variant];
+
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	semop_supported_by_kernel(tv);
+
 	val = 1;
 
 	/* get an IPC resource key */
@@ -114,6 +127,7 @@ static void cleanup(void)
 static struct tst_test test = {
 	.test = run,
 	.tcnt = ARRAY_SIZE(tc),
+	.test_variants = ARRAY_SIZE(variants),
 	.setup = setup,
 	.cleanup = cleanup,
 	.needs_tmpdir = 1,
diff --git a/testcases/kernel/syscalls/ipc/semop/semop05.c b/testcases/kernel/syscalls/ipc/semop/semop05.c
index 9e8e040b0b19..770646bc564c 100644
--- a/testcases/kernel/syscalls/ipc/semop/semop05.c
+++ b/testcases/kernel/syscalls/ipc/semop/semop05.c
@@ -52,6 +52,7 @@
 #include "tst_test.h"
 #include "libnewipc.h"
 #include "lapi/semun.h"
+#include "semop.h"
 
 static key_t semkey;
 static int sem_id = -1;
@@ -115,7 +116,14 @@ static inline int process_state_wait2(pid_t pid, const char state)
 
 static void do_child(int i)
 {
-	TEST(semop(sem_id, &s_buf, 1));
+	struct test_variants *tv = &variants[tst_variant];
+	struct tst_ts timeout;
+
+	timeout.type = tv->type;
+	tst_ts_set_sec(&timeout, 1);
+	tst_ts_set_nsec(&timeout, 10000);
+
+	TEST(call_semop(tv, sem_id, &s_buf, 1, &timeout));
 	if (TST_RET != -1) {
 		tst_res(TFAIL, "call succeeded when error expected");
 		exit(-1);
@@ -137,6 +145,11 @@ static void sighandler(int sig)
 
 static void setup(void)
 {
+	struct test_variants *tv = &variants[tst_variant];
+
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	semop_supported_by_kernel(tv);
+
 	SAFE_SIGNAL(SIGHUP, sighandler);
 
 	/* get an IPC resource key */
@@ -238,6 +251,7 @@ static void do_child_uclinux(void)
 static struct tst_test test = {
 	.test = run,
 	.tcnt = ARRAY_SIZE(tc),
+	.test_variants = ARRAY_SIZE(variants),
 	.setup = setup,
 	.cleanup = cleanup,
 	.needs_tmpdir = 1,
-- 
2.25.0.rc1.19.g042ed3e048af


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V4 16/17] syscalls/utimensat: Migrate to new test framework
  2020-05-22 10:51 [LTP] [PATCH V4 00/17] Syscalls: Add support for time64 variants Viresh Kumar
                   ` (14 preceding siblings ...)
  2020-05-22 10:51 ` [LTP] [PATCH V4 15/17] syscalls/semtimedop: Add support for semtimedop and its time64 version Viresh Kumar
@ 2020-05-22 10:51 ` Viresh Kumar
  2020-05-22 10:51 ` [LTP] [PATCH V4 17/17] syscalls/utimensat: Add support for time64 tests Viresh Kumar
  16 siblings, 0 replies; 33+ messages in thread
From: Viresh Kumar @ 2020-05-22 10:51 UTC (permalink / raw)
  To: ltp

This gets rid of the test script and updates the utimensat01.c file to
handle most of the tests covered earlier (apart from testing the same
for files owned by root, as the test is run as root right now).

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 .../kernel/syscalls/utimensat/utimensat01.c   | 424 ++++++--------
 .../syscalls/utimensat/utimensat_tests.sh     | 517 ------------------
 2 files changed, 179 insertions(+), 762 deletions(-)
 delete mode 100755 testcases/kernel/syscalls/utimensat/utimensat_tests.sh

diff --git a/testcases/kernel/syscalls/utimensat/utimensat01.c b/testcases/kernel/syscalls/utimensat/utimensat01.c
index 264ca1e15120..97a43713454f 100644
--- a/testcases/kernel/syscalls/utimensat/utimensat01.c
+++ b/testcases/kernel/syscalls/utimensat/utimensat01.c
@@ -1,282 +1,216 @@
-/*************************************************************************************/
-/*                                                                                   */
-/* Copyright (C) 2008, Michael Kerrisk <mtk.manpages@gmail.com>,                     */
-/* Copyright (C) 2008, Linux Foundation                                              */
-/*                                                                                   */
-/* This program is free software;  you can redistribute it and/or modify             */
-/* it under the terms of the GNU General Public License as published by              */
-/* the Free Software Foundation; either version 2 of the License, or                 */
-/* (at your option) any later version.                                               */
-/*                                                                                   */
-/* This program is distributed in the hope that it will be useful,                   */
-/* but WITHOUT ANY WARRANTY;  without even the implied warranty of                   */
-/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See                         */
-/* the GNU General Public License for more details.                                  */
-/*                                                                                   */
-/* You should have received a copy of the GNU General Public License                 */
-/* along with this program;  if not, write to the Free Software                      */
-/* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA           */
-/*************************************************************************************/
-/*                                                                                   */
-/* File: utimnsat01.c                                                                */
-/* Description: A command-line interface for testing the utimensat() system call.    */
-/* Author: Michael Kerrisk <mtk.manpages@gmail.com>                                  */
-/* History:                                                                          */
-/*	17 Mar  2008  Initial creation,                                              */
-/*	31 May  2008  Reworked for easier test automation,                           */
-/*	2  June 2008  Renamed from t_utimensat.c to test_utimensat.c,                */
-/*	05 June 2008  Submitted to LTP by Subrata Modak <subrata@linux.vnet.ibm.com> */
-/*************************************************************************************/
-
-#define _GNU_SOURCE
-#define _ATFILE_SOURCE
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2008 Michael Kerrisk <mtk.manpages@gmail.com>
+ * Copyright (c) 2008 Subrata Modak <subrata@linux.vnet.ibm.com>
+ * Copyright (c) 2020 Viresh Kumar <viresh.kumar@linaro.org>
+ *
+ * Basic utimnsat() test.
+ */
+
 #include <stdio.h>
 #include <time.h>
 #include <errno.h>
 #include <stdlib.h>
 #include <unistd.h>
-#include <sys/syscall.h>
 #include <fcntl.h>
 #include <string.h>
 #include <sys/stat.h>
-#include "test.h"
+#include "lapi/fs.h"
+#include "tst_test.h"
 #include "lapi/syscalls.h"
 
-char *TCID = "utimensat01";
-int TST_TOTAL = 0;
-
-#define cleanup tst_exit
+#define UTIME_NOW	((1l << 30) - 1l)
+#define UTIME_OMIT	((1l << 30) - 2l)
+
+#define TEST_FILE	"test_file"
+#define TEST_DIR	"test_dir"
+
+static void *bad_addr;
+
+struct mytime {
+	long access_tv_sec;
+	long access_tv_nsec;
+	long mod_tv_sec;
+	long mod_tv_nsec;
+};
+
+static struct mytime tnn = {0, UTIME_NOW, 0, UTIME_NOW}, *time_nn = &tnn;
+static struct mytime too = {0, UTIME_OMIT, 0, UTIME_OMIT}, *time_oo = &too;
+static struct mytime tno = {0, UTIME_NOW, 0, UTIME_OMIT}, *time_no = &tno;
+static struct mytime ton = {0, UTIME_OMIT, 0, UTIME_NOW}, *time_on = &ton;
+static struct mytime t11 = {1, 1, 1, 1}, *time_11 = &t11;
+
+struct test_case {
+	int dirfd;
+	char *pathname;
+	struct mytime **mytime;
+	int flags;
+	int oflags;
+	int attr;
+	int mode;
+	int exp_err;
+} tcase[] = {
+	/* Testing read-only file */
+	{AT_FDCWD, TEST_FILE, NULL, 0, O_RDONLY, 0, 0400, 0},
+	{AT_FDCWD, TEST_FILE, &time_nn, 0, O_RDONLY, 0, 0400, 0},
+	{AT_FDCWD, TEST_FILE, &time_oo, 0, O_RDONLY, 0, 0400, 0},
+	{AT_FDCWD, TEST_FILE, &time_no, 0, O_RDONLY, 0, 0400, 0},
+	{AT_FDCWD, TEST_FILE, &time_on, 0, O_RDONLY, 0, 0400, 0},
+	{AT_FDCWD, TEST_FILE, &time_11, 0, O_RDONLY, 0, 0400, 0},
+
+	/* Testing writable file */
+	{AT_FDCWD, TEST_FILE, NULL, 0, O_RDONLY, 0, 0666, 0},
+	{AT_FDCWD, TEST_FILE, &time_nn, 0, O_RDONLY, 0, 0666, 0},
+	{AT_FDCWD, TEST_FILE, &time_oo, 0, O_RDONLY, 0, 0666, 0},
+	{AT_FDCWD, TEST_FILE, &time_no, 0, O_RDONLY, 0, 0666, 0},
+	{AT_FDCWD, TEST_FILE, &time_on, 0, O_RDONLY, 0, 0666, 0},
+	{AT_FDCWD, TEST_FILE, &time_11, 0, O_RDONLY, 0, 0666, 0},
+
+	/* Testing append-only file */
+	{AT_FDCWD, TEST_FILE, NULL, 0, O_RDONLY, FS_APPEND_FL, 0600, 0},
+	{AT_FDCWD, TEST_FILE, &time_nn, 0, O_RDONLY, FS_APPEND_FL, 0600, 0},
+	{AT_FDCWD, TEST_FILE, &time_oo, 0, O_RDONLY, FS_APPEND_FL, 0600, 0},
+	{AT_FDCWD, TEST_FILE, &time_no, 0, O_RDONLY, FS_APPEND_FL, 0600, EPERM},
+	{AT_FDCWD, TEST_FILE, &time_on, 0, O_RDONLY, FS_APPEND_FL, 0600, EPERM},
+	{AT_FDCWD, TEST_FILE, &time_11, 0, O_RDONLY, FS_APPEND_FL, 0600, EPERM},
+
+	/* Testing immutable file */
+	{AT_FDCWD, TEST_FILE, NULL, 0, O_RDONLY, FS_IMMUTABLE_FL, 0600, -1},
+	{AT_FDCWD, TEST_FILE, &time_nn, 0, O_RDONLY, FS_IMMUTABLE_FL, 0600, -1},
+	{AT_FDCWD, TEST_FILE, &time_oo, 0, O_RDONLY, FS_IMMUTABLE_FL, 0600, 0},
+	{AT_FDCWD, TEST_FILE, &time_no, 0, O_RDONLY, FS_IMMUTABLE_FL, 0600, EPERM},
+	{AT_FDCWD, TEST_FILE, &time_on, 0, O_RDONLY, FS_IMMUTABLE_FL, 0600, EPERM},
+	{AT_FDCWD, TEST_FILE, &time_11, 0, O_RDONLY, FS_IMMUTABLE_FL, 0600, EPERM},
+
+	/* Testing immutable-append-only file */
+	{AT_FDCWD, TEST_FILE, NULL, 0, O_RDONLY, FS_APPEND_FL|FS_IMMUTABLE_FL, 0600, -1},
+	{AT_FDCWD, TEST_FILE, &time_nn, 0, O_RDONLY, FS_APPEND_FL|FS_IMMUTABLE_FL, 0600, -1},
+	{AT_FDCWD, TEST_FILE, &time_oo, 0, O_RDONLY, FS_APPEND_FL|FS_IMMUTABLE_FL, 0600, 0},
+	{AT_FDCWD, TEST_FILE, &time_no, 0, O_RDONLY, FS_APPEND_FL|FS_IMMUTABLE_FL, 0600, EPERM},
+	{AT_FDCWD, TEST_FILE, &time_on, 0, O_RDONLY, FS_APPEND_FL|FS_IMMUTABLE_FL, 0600, EPERM},
+	{AT_FDCWD, TEST_FILE, &time_11, 0, O_RDONLY, FS_APPEND_FL|FS_IMMUTABLE_FL, 0600, EPERM},
+
+	/* Other failure tests */
+	{AT_FDCWD, TEST_FILE, NULL, 0, O_RDONLY, 0, 0400, EFAULT},
+	{AT_FDCWD, NULL, &time_nn, 0, O_RDONLY, 0, 0400, EFAULT},
+	{-1, NULL, &time_nn, AT_SYMLINK_NOFOLLOW, O_RDONLY, 0, 0400, EINVAL},
+	{-1, TEST_FILE, &time_nn, 0, O_RDONLY, 0, 0400, ENOENT},
+};
+
+static inline int sys_utimensat(int dirfd, const char *pathname,
+				const struct timespec times[2], int flags)
+{
+	return tst_syscall(__NR_utimensat, dirfd, pathname, times, flags);
+}
 
-/* We use EXIT_FAILURE for an expected failure from utimensat()
-   (e.g., EACCES and EPERM), and one of the following for unexpected
-   failures (i.e., something broke in our test setup). */
+static void setup(void)
+{
+	bad_addr = tst_get_bad_addr(NULL);
+}
 
-#ifndef AT_FDCWD
-#define AT_FDCWD -100
-#endif
-#ifndef AT_SYMLINK_NOFOLLOW
-#define AT_SYMLINK_NOFOLLOW 0x100
-#endif
+static void update_error(struct test_case *tc)
+{
+	if (tc->exp_err != -1)
+		return;
+
+	/*
+	 * Starting with 4.8.0 operations on immutable files return EPERM
+	 * instead of EACCES.
+	 * This patch has also been merged to stable 4.4 with
+	 * b3b4283 ("vfs: move permission checking into notify_change() for utimes(NULL)")
+	 */
+	if (tst_kvercmp(4, 4, 27) < 0)
+		tc->exp_err = EACCES;
+	else
+		tc->exp_err = EPERM;
+}
 
-#define EXIT_bad_usage 3
-#define EXIT_failed_syscall 3
+static void change_attr(struct test_case *tc, int fd, int set)
+{
+	int attr;
 
-#define errExit(msg)    do { perror(msg); exit(EXIT_failed_syscall); \
-                        } while (0)
+	if (!tc->attr)
+		return;
 
-#define UTIME_NOW      ((1l << 30) - 1l)
-#define UTIME_OMIT     ((1l << 30) - 2l)
+	SAFE_IOCTL(fd, FS_IOC_GETFLAGS, &attr);
 
-static inline int
-utimensat_sc(int dirfd, const char *pathname,
-	     const struct timespec times[2], int flags)
-{
-	return ltp_syscall(__NR_utimensat, dirfd, pathname, times, flags);
-}
+	if (set)
+		attr |= tc->attr;
+	else
+		attr &= ~tc->attr;
 
-static void usageError(char *progName)
-{
-	fprintf(stderr, "Usage: %s pathname [atime-sec "
-		"atime-nsec mtime-sec mtime-nsec]\n\n", progName);
-	fprintf(stderr, "Permitted options are:\n");
-	fprintf(stderr, "    [-d path] "
-		"open a directory file descriptor"
-		" (instead of using AT_FDCWD)\n");
-	fprintf(stderr, "    -q        Quiet\n");
-	fprintf(stderr, "    -w        Open directory file "
-		"descriptor with O_RDWR|O_APPEND\n"
-		"              (instead of O_RDONLY)\n");
-	fprintf(stderr, "    -n        Use AT_SYMLINK_NOFOLLOW\n");
-	fprintf(stderr, "\n");
-
-	fprintf(stderr, "pathname can be \"NULL\" to use NULL "
-		"argument in call\n");
-	fprintf(stderr, "\n");
-
-	fprintf(stderr, "Either nsec field can be\n");
-	fprintf(stderr, "    'n' for UTIME_NOW\n");
-	fprintf(stderr, "    'o' for UTIME_OMIT\n");
-	fprintf(stderr, "\n");
-
-	fprintf(stderr, "If the time fields are omitted, "
-		"then a NULL 'times' argument is used\n");
-	fprintf(stderr, "\n");
-
-	exit(EXIT_bad_usage);
+	SAFE_IOCTL(fd, FS_IOC_SETFLAGS, &attr);
 }
 
-int main(int argc, char *argv[])
+static void run(unsigned int i)
 {
-	int flags, dirfd, opt, oflag;
+	struct test_case *tc = &tcase[i];
 	struct timespec ts[2];
-	struct timespec *tsp;
-	char *pathname, *dirfdPath;
+	void *tsp = NULL;
+	char *pathname = NULL;
+	int dfd = AT_FDCWD, fd = 0;
 	struct stat sb;
-	int verbose;
-
-	/* Command-line argument parsing */
-
-	flags = 0;
-	verbose = 1;
-	dirfd = AT_FDCWD;
-	dirfdPath = NULL;
-	oflag = O_RDONLY;
-
-	while ((opt = getopt(argc, argv, "d:nqw")) != -1) {
-		switch (opt) {
-		case 'd':
-			dirfdPath = optarg;
-			break;
-
-		case 'n':
-			flags |= AT_SYMLINK_NOFOLLOW;
-			if (verbose)
-				printf("Not following symbolic links\n");
-			break;
-
-		case 'q':
-			verbose = 0;
-			break;
-
-		case 'w':
-			oflag = O_RDWR | O_APPEND;
-			break;
-
-		default:
-			usageError(argv[0]);
-		}
-	}
-
-	if ((optind + 5 != argc) && (optind + 1 != argc))
-		usageError(argv[0]);
-
-	if (dirfdPath != NULL) {
-		dirfd = open(dirfdPath, oflag);
-		if (dirfd == -1)
-			errExit("open");
-
-		if (verbose) {
-			printf("Opened dirfd %d", oflag);
-			if ((oflag & O_ACCMODE) == O_RDWR)
-				printf(" O_RDWR");
-			if (oflag & O_APPEND)
-				printf(" O_APPEND");
-			printf(": %s\n", dirfdPath);
-		}
-	}
 
-	pathname = (strcmp(argv[optind], "NULL") == 0) ? NULL : argv[optind];
+	SAFE_MKDIR(TEST_DIR, 0700);
+	update_error(tc);
 
-	/* Either, we get no values for 'times' fields, in which case
-	   we give a NULL pointer to utimensat(), or we get four values,
-	   for secs+nsecs for each of atime and mtime.  The special
-	   values 'n' and 'o' can be used for tv_nsec settings of
-	   UTIME_NOW and UTIME_OMIT, respectively. */
+	if (tc->dirfd != AT_FDCWD)
+		dfd = SAFE_OPEN(TEST_DIR, tc->oflags);
 
-	if (argc == optind + 1) {
-		tsp = NULL;
-
-	} else {
-		ts[0].tv_sec = atoi(argv[optind + 1]);
-		if (argv[optind + 2][0] == 'n') {
-			ts[0].tv_nsec = UTIME_NOW;
-		} else if (argv[optind + 2][0] == 'o') {
-			ts[0].tv_nsec = UTIME_OMIT;
-		} else {
-			ts[0].tv_nsec = atoi(argv[optind + 2]);
-		}
-
-		ts[1].tv_sec = atoi(argv[optind + 3]);
-		if (argv[optind + 4][0] == 'n') {
-			ts[1].tv_nsec = UTIME_NOW;
-		} else if (argv[optind + 4][0] == 'o') {
-			ts[1].tv_nsec = UTIME_OMIT;
-		} else {
-			ts[1].tv_nsec = atoi(argv[optind + 4]);
-		}
+	if (tc->mytime) {
+		struct mytime *mytime = *tc->mytime;
 
+		ts[0].tv_sec = mytime->access_tv_sec;
+		ts[0].tv_nsec = mytime->access_tv_nsec;
+		ts[1].tv_sec = mytime->mod_tv_sec;
+		ts[1].tv_nsec = mytime->mod_tv_nsec;
 		tsp = ts;
+	} else if (tc->exp_err == EFAULT) {
+		tsp = bad_addr;
 	}
 
-	/* For testing purposes, it may have been useful to run this program
-	   as set-user-ID-root so that a directory file descriptor could be
-	   opened as root.  (This allows us to obtain a file descriptor even
-	   if normal user doesn't have permissions on the file.)  Now we
-	   reset to the real UID before making the utimensat() call, so that
-	   the permission checking for the utimensat() call is performed
-	   under that UID. */
-
-	if (geteuid() == 0) {
-		uid_t u;
-
-		u = getuid();
-
-		if (verbose)
-			printf("Resetting UIDs to %ld\n", (long)u);
-
-		if (setresuid(u, u, u) == -1)
-			errExit("setresuid");
+	if (tc->pathname) {
+		fd = SAFE_OPEN(tc->pathname, O_WRONLY | O_CREAT);
+		pathname = tc->pathname;
+		SAFE_CHMOD(tc->pathname, tc->mode);
+		change_attr(tc, fd, 1);
+	} else if (tc->exp_err == EFAULT) {
+		pathname = bad_addr;
 	}
 
-	/* Display information allowing user to verify arguments for call */
+	TEST(sys_utimensat(dfd, pathname, tsp, tc->flags));
+	if (tc->pathname)
+		change_attr(tc, fd, 0);
 
-	if (verbose) {
-		printf("dirfd is %d\n", dirfd);
-		printf("pathname is %s\n", pathname);
-		printf("tsp is %p", tsp);
-		if (tsp != NULL) {
-			printf("; struct  = { %ld, %ld } { %ld, %ld }",
-			       (long)tsp[0].tv_sec, (long)tsp[0].tv_nsec,
-			       (long)tsp[1].tv_sec, (long)tsp[1].tv_nsec);
-		}
-		printf("\n");
-		printf("flags is %d\n", flags);
-	}
-
-	/* Make the call and see what happened */
-
-	if (utimensat_sc(dirfd, pathname, tsp, flags) == -1) {
-		if (errno == EPERM) {
-			if (verbose)
-				printf("utimensat() failed with EPERM\n");
-			else
-				printf("EPERM\n");
-			exit(EXIT_FAILURE);
-
-		} else if (errno == EACCES) {
-			if (verbose)
-				printf("utimensat() failed with EACCES\n");
-			else
-				printf("EACCES\n");
-			exit(EXIT_FAILURE);
-
-		} else if (errno == EINVAL) {
-			if (verbose)
-				printf("utimensat() failed with EINVAL\n");
-			else
-				printf("EINVAL\n");
-			exit(EXIT_FAILURE);
-
-		} else {	/* Unexpected failure case from utimensat() */
-			errExit("utimensat");
+	if (TST_RET) {
+		if (!tc->exp_err) {
+			tst_res(TFAIL | TTERRNO, "%2d: utimensat() failed", i);
+		} else if (tc->exp_err == TST_ERR) {
+			tst_res(TPASS | TTERRNO, "%2d: utimensat() failed expectedly", i);
+		} else {
+			tst_res(TFAIL | TTERRNO, "%2d: utimensat() failed with incorrect error, expected %s",
+				i, tst_strerrno(tc->exp_err));
 		}
-	}
-
-	if (verbose)
-		printf("utimensat() succeeded\n");
-
-	if (stat((pathname != NULL) ? pathname : dirfdPath, &sb) == -1)
-		errExit("stat");
-
-	if (verbose) {
-		printf("Last file access:         %s", ctime(&sb.st_atime));
-		printf("Last file modification:   %s", ctime(&sb.st_mtime));
-		printf("Last status change:       %s", ctime(&sb.st_ctime));
-
+	} else if (tc->exp_err) {
+		tst_res(TFAIL, "%2d: utimensat() passed unexpectedly", i);
 	} else {
-		printf("SUCCESS %ld %ld\n", (long)sb.st_atime,
-		       (long)sb.st_mtime);
+		TEST(stat(tc->pathname ? tc->pathname : TEST_DIR, &sb));
+		tst_res(TPASS, "%2d: utimensat() passed: access time: %lu %lu", i,
+			sb.st_atime, sb.st_mtime);
 	}
 
-	exit(EXIT_SUCCESS);
+	if (dfd != AT_FDCWD)
+		SAFE_CLOSE(dfd);
+
+	if (tc->pathname)
+		SAFE_CLOSE(fd);
+	SAFE_RMDIR(TEST_DIR);
 }
+
+static struct tst_test test = {
+	.test = run,
+	.tcnt = ARRAY_SIZE(tcase),
+	.setup = setup,
+	.needs_root = 1,
+	.needs_tmpdir = 1,
+};
diff --git a/testcases/kernel/syscalls/utimensat/utimensat_tests.sh b/testcases/kernel/syscalls/utimensat/utimensat_tests.sh
deleted file mode 100755
index 46a0cc64bf90..000000000000
--- a/testcases/kernel/syscalls/utimensat/utimensat_tests.sh
+++ /dev/null
@@ -1,517 +0,0 @@
-#!/bin/sh
-#
-# Automated tests for utimensat()
-#
-# Copyright (C) 2008, Linux Foundation
-# Written by Michael Kerrisk <mtk.manpages@gmail.com>
-# Licensed under GPLv2 or later
-#
-# Not (yet) included in this automated test set:
-# * AT_SYMLINK_NOFOLLOW in flags: If pathname specifies a symbolic link,
-#   then update the timestamps of the link, rather than the file to which
-#   it refers.
-# * Setting of nanosecond components of timestamps (support for
-#   nanosecond timestamps is file-system-dependent)
-# * "Updated file timestamps are set to the greatest value supported
-#   by the file system that is not greater than the specified time."
-#   (i.e., if we set timestamp to {0, 999999999}, then the setting
-#   is rounded down, rather than up, to unit of timestamp resolution.
-# * Privileged processes should be able to bypass permission checks.
-#   (except when file is marked with the "Immutable" EFA).
-
-#=====================================================================
-
-export TCID=utimensat01
-export TST_TOTAL=99
-export TST_COUNT=0
-. test.sh
-
-if tst_kvcmp -lt "2.6.22"; then
-	tst_brkm TCONF "System kernel version is less than 2.6.22,cannot execute test"
-fi
-
-# Starting with 4.8.0 operations on immutable files return EPERM instead of
-# EACCES.
-# This patch has also been merged to stable 4.4 with
-# b3b4283 ("vfs: move permission checking into notify_change() for utimes(NULL)")
-if tst_kvcmp -ge "4.4.27" -a -lt "4.5.0"; then
-	imaccess=EPERM
-elif tst_kvcmp -lt "4.4.27"; then
-	imaccess=EACCES
-else
-	imaccess=EPERM
-fi
-
-
-RESULT_FILE=$TMPDIR/utimensat.result
-
-TEST_DIR=$TMPDIR/utimensat_tests
-FILE=$TEST_DIR/utimensat.test_file
-
-TEST_PROG=utimensat01
-
-if [ ! -f $LTPROOT/testcases/bin/$TEST_PROG ]; then
-	tst_brkm TBROK "$LTPROOT/testcases/bin/$TEST_PROG is missing (please check install)"
-fi
-
-# Summary counters of all test results
-
-test_num=0
-failed_cnt=0
-passed_cnt=0
-failed_list=""
-
-#=====================================================================
-
-setup_file()
-{
-# $1 is test file pathname
-# $2 is owner for test file (chown(1))
-# $3 is permissions for test file (chmod(1))
-# $4 is "ext2" extended file attributes for test file (chattr(1))
-
-    FILE=$1
-
-    # Make sure any old version of file is deleted
-
-    if test -e $FILE; then
-        sudo $s_arg chattr -ai $FILE || return $?
-        sudo $s_arg rm -f $FILE || return $?
-    fi
-
-    # Create file and make atime and mtime zero.
-
-    sudo $s_arg -u $test_user touch $FILE || return $?
-    if ! $TEST_PROG -q $FILE 0 0 0 0 > $RESULT_FILE; then
-        echo "Failed to set up test file $FILE" 1>&2
-        exit 1
-    fi
-
-    read res atime mtime < $RESULT_FILE
-    if test "X$res" != "XSUCCESS" ||
-                test $atime -ne 0 || test $mtime != 0; then
-        echo "Failed to set correct times on test file $FILE" 1>&2
-        exit 1
-    fi
-
-    # Set owner, permissions, and EFAs for file.
-
-    if test -n "$2"; then
-        sudo $s_arg chown $2 $FILE || return $?
-    fi
-
-    sudo $s_arg chmod $3 $FILE || return $?
-
-    if test -n "$4"; then
-        sudo $s_arg chattr $4 $FILE || return $?
-    fi
-
-    # Display file setup, for visual verification
-
-    ls -l $FILE | awk '{ printf "Owner=%s; perms=%s; ", $3, $1}'
-    if ! sudo $s_arg lsattr -l $FILE | sed 's/, /,/g' | awk '{print "EFAs=" $2}'
-    then
-        return $?
-    fi
-
-}
-
-test_failed()
-{
-    tst_resm TFAIL "FAILED test $test_num"
-
-    failed_cnt=$(expr $failed_cnt + 1)
-    failed_list="$failed_list $test_num"
-}
-
-check_result()
-{
-    STATUS=$1                   # Exit status from test program
-    EXPECTED_RESULT=$2          # SUCCESS / EACCES / EPERM / EINVAL
-    EXPECT_ATIME_CHANGED=$3     # Should be 'y' or 'n' (only for SUCCESS)
-    EXPECT_MTIME_CHANGED=$4     # Should be 'y' or 'n' (only for SUCCESS)
-
-    test_num=$(expr $test_num + 1)
-
-    # If our test setup failed, stop immediately
-
-    if test $STATUS -gt 1; then
-        echo "FAILED (bad test setup)"
-        exit 1
-    fi
-
-    read res atime mtime < $RESULT_FILE
-
-    echo "EXPECTED: $EXPECTED_RESULT $EXPECT_ATIME_CHANGED "\
-         "$EXPECT_MTIME_CHANGED"
-    echo "RESULT:   $res $atime $mtime"
-
-    if test "$res" != "$EXPECTED_RESULT"; then
-        test_failed
-        return
-    fi
-
-    passed=1
-
-    # If the test program exited successfully, then check that atime and
-    # and mtime were updated / not updated, as expected.
-
-    if test $EXPECTED_RESULT = "SUCCESS"; then
-        if test $EXPECT_ATIME_CHANGED = "y"; then
-            if test $atime -eq 0; then
-                echo "atime should have changed, but did not"
-                passed=0
-            fi
-        else
-            if test $atime -ne 0; then
-                echo "atime should not have changed, but did"
-                passed=0
-            fi
-        fi
-
-        if test $EXPECT_MTIME_CHANGED = "y"; then
-            if test $mtime -eq 0; then
-                echo "mtime should have changed, but did not"
-                passed=0
-            fi
-        else
-            if test $mtime -ne 0; then
-                echo "mtime should not have changed, but did"
-                passed=0
-            fi
-        fi
-
-        if test $passed -eq 0; then
-            test_failed
-            return
-        fi
-    fi
-
-    passed_cnt=$(expr $passed_cnt + 1)
-    tst_resm TPASS "PASSED test $test_num"
-}
-
-run_test()
-{
-    # By default, we do three types of test:
-    # a) pathname (pathname != NULL)
-    # b) readable file descriptor (pathname == NULL, dirfd opened O_RDONLY)
-    # c) writable file descriptor (pathname == NULL, dirfd opened O_RDWR).
-    #    For this case we also include O_APPEND in open flags, since that
-    #    is needed if testing with a file that has the Append-only
-    #    attribute enabled.
-
-    # -R says don't do tests with readable file descriptor
-    # -W says don't do tests with writable file descriptor
-
-    OPTIND=1
-
-    do_read_fd_test=1
-    do_write_fd_test=1
-    while getopts "RW" opt; do
-        case "$opt" in
-        R) do_read_fd_test=0
-           ;;
-        W) do_write_fd_test=0
-           ;;
-        *) echo "run_test: bad usage"
-           exit 1
-           ;;
-        esac
-    done
-    shift `expr $OPTIND - 1`
-
-    echo "Pathname test"
-    setup_file $FILE "$1" "$2" "$3"
-    cp $LTPROOT/testcases/bin/$TEST_PROG ./
-    CMD="./$TEST_PROG -q $FILE $4"
-    echo "$CMD"
-    sudo $s_arg -u $test_user $CMD > $RESULT_FILE
-    check_result $? $5 $6 $7
-    echo
-
-    if test $do_read_fd_test -ne 0; then
-        echo "Readable file descriptor (futimens(3)) test"
-        setup_file $FILE "$1" "$2" "$3"
-        CMD="./$TEST_PROG -q -d $FILE NULL $4"
-        echo "$CMD"
-        sudo $s_arg -u $test_user $CMD > $RESULT_FILE
-        check_result $? $5 $6 $7
-        echo
-    fi
-
-    # Can't do the writable file descriptor test for immutable files
-    # (even root can't open an immutable file for writing)
-
-    if test $do_write_fd_test -ne 0; then
-        echo "Writable file descriptor (futimens(3)) test"
-        setup_file $FILE "$1" "$2" "$3"
-        CMD="./$TEST_PROG -q -w -d $FILE NULL $4"
-        echo "$CMD"
-        sudo $s_arg -u $test_user $CMD > $RESULT_FILE
-        check_result $? $5 $6 $7
-        echo
-    fi
-
-    sudo $s_arg chattr -ai $FILE
-    sudo $s_arg rm -f $FILE
-}
-
-#=====================================================================
-
-# Since some automated testing systems have no tty while testing,
-# comment this line in /etc/sudoers to avoid the error message:
-# `sudo: sorry, you must have a tty to run sudo'
-# Use trap to restore this line after program terminates.
-sudoers=/etc/sudoers
-if [ ! -r $sudoers ]; then
-	tst_brkm TBROK "can't read $sudoers"
-fi
-pattern="[[:space:]]*Defaults[[:space:]]*requiretty.*"
-if grep -q "^${pattern}" $sudoers; then
-	tst_resm TINFO "Comment requiretty in $sudoers for automated testing systems"
-	if ! sed -r -i.$$ -e "s/^($pattern)/#\1/" $sudoers; then
-		tst_brkm TBROK "failed to mangle $sudoers properly"
-	fi
-	trap 'trap "" EXIT; restore_sudoers' EXIT
-fi
-
-restore_sudoers()
-{
-	tst_resm TINFO "Restore requiretty in $sudoers"
-	mv /etc/sudoers.$$ /etc/sudoers
-}
-
-test_user=nobody
-echo "test sudo for -n option, non-interactive"
-if sudo -h | grep -q -- -n; then
-	s_arg="-n"
-	echo "sudo supports -n"
-else
-	s_arg=
-	echo "sudo does not support -n"
-fi
-
-if ! sudo $s_arg true; then
-	tst_brkm TBROK "sudo cannot be run by user non-interactively"
-fi
-if test ! -f $sudoers
-then
-	echo "root    ALL=(ALL)    ALL" > $sudoers || exit
-	chmod 440 $sudoers
-	trap 'trap "" EXIT; nuke_sudoers' EXIT
-fi
-
-nuke_sudoers()
-{
-	sudo rm -f $sudoers
-}
-
-sudo $s_arg -u $test_user mkdir -p $TEST_DIR
-
-# Make sure chattr command is supported
-touch $TEST_DIR/tmp_file
-chattr +a $TEST_DIR/tmp_file
-if [ $? -ne 0 ] ; then
-	rm -rf $TEST_DIR
-	tst_brkm TCONF "chattr not supported"
-fi
-chattr -a $TEST_DIR/tmp_file
-
-cd $TEST_DIR
-chown root $LTPROOT/testcases/bin/$TEST_PROG
-chmod ugo+x,u+s $LTPROOT/testcases/bin/$TEST_PROG
-
-#=====================================================================
-
-
-echo "============================================================"
-
-echo
-echo "Testing read-only file, owned by self"
-echo
-
-echo "***** Testing times==NULL case *****"
-run_test -W "" 400 "" "" SUCCESS y y
-
-echo "***** Testing times=={ UTIME_NOW, UTIME_NOW } case *****"
-run_test -W "" 400 "" "0 n 0 n" SUCCESS y y
-
-echo "***** Testing times=={ UTIME_OMIT, UTIME_OMIT } case *****"
-run_test -W "" 400 "" "0 o 0 o" SUCCESS n n
-
-echo "***** Testing times=={ UTIME_NOW, UTIME_OMIT } case *****"
-run_test -W "" 400 "" "0 n 0 o" SUCCESS y n
-
-echo "***** Testing times=={ UTIME_OMIT, UTIME_NOW } case *****"
-run_test -W "" 400 "" "0 o 0 n" SUCCESS n y
-
-echo "***** Testing times=={ x, y } case *****"
-run_test -W "" 400 "" "1 1 1 1" SUCCESS y y
-
-echo "============================================================"
-
-echo
-echo "Testing read-only file, not owned by self"
-echo
-
-echo "***** Testing times==NULL case *****"
-run_test -RW root 400 "" "" EACCES
-
-echo "***** Testing times=={ UTIME_NOW, UTIME_NOW } case *****"
-run_test -RW root 400 "" "0 n 0 n" EACCES
-
-echo "***** Testing times=={ UTIME_OMIT, UTIME_OMIT } case *****"
-run_test -RW root 400 "" "0 o 0 o" SUCCESS n n
-
-echo "***** Testing times=={ UTIME_NOW, UTIME_OMIT } case *****"
-run_test -RW root 400 "" "0 n 0 o" EPERM
-
-echo "***** Testing times=={ UTIME_OMIT, UTIME_NOW } case *****"
-run_test -RW root 400 "" "0 o 0 n" EPERM
-
-echo "***** Testing times=={ x, y } case *****"
-run_test -RW root 400 "" "1 1 1 1" EPERM
-
-echo "============================================================"
-
-echo
-echo "Testing writable file, not owned by self"
-echo
-
-echo "***** Testing times==NULL case *****"
-run_test root 666 "" "" SUCCESS y y
-
-echo "***** Testing times=={ UTIME_NOW, UTIME_NOW } case *****"
-run_test root 666 "" "0 n 0 n" SUCCESS y y
-
-echo "***** Testing times=={ UTIME_OMIT, UTIME_OMIT } case *****"
-run_test root 666 "" "0 o 0 o" SUCCESS n n
-
-echo "***** Testing times=={ UTIME_NOW, UTIME_OMIT } case *****"
-run_test root 666 "" "0 n 0 o" EPERM
-
-echo "***** Testing times=={ UTIME_OMIT, UTIME_NOW } case *****"
-run_test root 666 "" "0 o 0 n" EPERM
-
-echo "***** Testing times=={ x, y } case *****"
-run_test root 666 "" "1 1 1 1" EPERM
-
-echo "============================================================"
-
-echo
-echo "Testing append-only file, owned by self"
-echo
-
-echo "***** Testing times==NULL case *****"
-run_test "" 600 "+a" "" SUCCESS y y
-
-echo "***** Testing times=={ UTIME_NOW, UTIME_NOW } case *****"
-run_test "" 600 "+a" "0 n 0 n" SUCCESS y y
-
-echo "***** Testing times=={ UTIME_OMIT, UTIME_OMIT } case *****"
-run_test "" 600 "+a" "0 o 0 o" SUCCESS n n
-
-echo "***** Testing times=={ UTIME_NOW, UTIME_OMIT } case *****"
-run_test "" 600 "+a" "0 n 0 o" EPERM
-
-echo "***** Testing times=={ UTIME_OMIT, UTIME_NOW } case *****"
-run_test "" 600 "+a" "0 o 0 n" EPERM
-
-echo "***** Testing times=={ x, y } case *****"
-run_test "" 600 "+a" "1 1 1 1" EPERM
-
-echo "============================================================"
-
-echo
-echo "Testing immutable file, owned by self"
-echo
-
-echo "***** Testing times==NULL case *****"
-run_test -W "" 600 "+i" "" $imaccess
-
-echo "***** Testing times=={ UTIME_NOW, UTIME_NOW } case *****"
-run_test -W "" 600 "+i" "0 n 0 n" $imaccess
-
-echo "***** Testing times=={ UTIME_OMIT, UTIME_OMIT } case *****"
-run_test -W "" 600 "+i" "0 o 0 o" SUCCESS n n
-
-echo "***** Testing times=={ UTIME_NOW, UTIME_OMIT } case *****"
-run_test -W "" 600 "+i" "0 n 0 o" EPERM
-
-echo "***** Testing times=={ UTIME_OMIT, UTIME_NOW } case *****"
-run_test -W "" 600 "+i" "0 o 0 n" EPERM
-
-echo "***** Testing times=={ x, y } case *****"
-run_test -W "" 600 "+i" "1 1 1 1" EPERM
-
-echo "============================================================"
-
-# Immutable+append-only should have same results as immutable
-
-echo
-echo "Testing immutable append-only file, owned by self"
-echo
-
-echo "***** Testing times==NULL case *****"
-run_test -W "" 600 "+ai" "" $imaccess
-
-echo "***** Testing times=={ UTIME_NOW, UTIME_NOW } case *****"
-run_test -W "" 600 "+ai" "0 n 0 n" $imaccess
-
-echo "***** Testing times=={ UTIME_OMIT, UTIME_OMIT } case *****"
-run_test -W "" 600 "+ai" "0 o 0 o" SUCCESS n n
-
-echo "***** Testing times=={ UTIME_NOW, UTIME_OMIT } case *****"
-run_test -W "" 600 "+ai" "0 n 0 o" EPERM
-
-echo "***** Testing times=={ UTIME_OMIT, UTIME_NOW } case *****"
-run_test -W "" 600 "+ai" "0 o 0 n" EPERM
-
-echo "***** Testing times=={ x, y } case *****"
-run_test -W "" 600 "+ai" "1 1 1 1" EPERM
-
-echo "============================================================"
-
-echo
-
-# EINVAL should result, if pathname is NULL, dirfd is not
-# AT_FDCWD, and flags contains AT_SYMLINK_NOFOLLOW.
-
-echo "***** Testing pathname==NULL, dirfd!=AT_FDCWD, flags has" \
-     "AT_SYMLINK_NOFOLLOW *****"
-setup_file $FILE "" 600 ""
-CMD="$TEST_PROG -q -n -d $FILE NULL $4"
-echo "$CMD"
-$CMD > $RESULT_FILE
-check_result $? EINVAL
-echo
-
-echo "============================================================"
-
-echo
-
-# If UTIME_NOW / UTIME_OMIT in tv_nsec field, the tv_sec should
-# be ignored.
-
-echo "tv_sec should be ignored if tv_nsec is UTIME_OMIT or UTIME_NOW"
-
-echo "***** Testing times=={ UTIME_NOW, UTIME_NOW } case *****"
-run_test -RW "" 600 "" "1 n 1 n" SUCCESS y y
-
-echo "***** Testing times=={ UTIME_OMIT, UTIME_OMIT } case *****"
-run_test -RW "" 600 "" "1 o 1 o" SUCCESS n n
-
-echo "============================================================"
-
-echo
-
-rm -rf "$TEST_DIR"
-uname -a
-date
-echo "Total tests: $test_num; passed: $passed_cnt; failed: $failed_cnt"
-if test $failed_cnt -gt 0; then
-    echo "Failed tests: $failed_list"
-fi
-
-tst_exit
-- 
2.25.0.rc1.19.g042ed3e048af


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V4 17/17] syscalls/utimensat: Add support for time64 tests
  2020-05-22 10:51 [LTP] [PATCH V4 00/17] Syscalls: Add support for time64 variants Viresh Kumar
                   ` (15 preceding siblings ...)
  2020-05-22 10:51 ` [LTP] [PATCH V4 16/17] syscalls/utimensat: Migrate to new test framework Viresh Kumar
@ 2020-05-22 10:51 ` Viresh Kumar
  16 siblings, 0 replies; 33+ messages in thread
From: Viresh Kumar @ 2020-05-22 10:51 UTC (permalink / raw)
  To: ltp

This adds support for time64 tests to the existing utimensat() syscall
tests.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 runtest/syscalls                              |  2 +-
 testcases/kernel/syscalls/utimensat/Makefile  |  4 -
 .../kernel/syscalls/utimensat/utimensat01.c   | 74 ++++++++++++++++---
 3 files changed, 65 insertions(+), 15 deletions(-)

diff --git a/runtest/syscalls b/runtest/syscalls
index 4a19075cd131..e1271f9e34aa 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls
@@ -1600,7 +1600,7 @@ utime06 utime06
 utimes01 utimes01
 
 # Introduced from Kernel 2.6.22 onwards
-utimensat01 utimensat_tests.sh
+utimensat01 utimensat01
 
 vfork01 vfork01
 vfork02 vfork02
diff --git a/testcases/kernel/syscalls/utimensat/Makefile b/testcases/kernel/syscalls/utimensat/Makefile
index 69cab8dbc057..044619fb8724 100644
--- a/testcases/kernel/syscalls/utimensat/Makefile
+++ b/testcases/kernel/syscalls/utimensat/Makefile
@@ -5,8 +5,4 @@ top_srcdir		?= ../../../..
 
 include $(top_srcdir)/include/mk/testcases.mk
 
-vpath %.c $(srcdir):$(top_srcdir)/lib
-
-INSTALL_TARGETS		:= utimensat_tests.sh
-
 include $(top_srcdir)/include/mk/generic_leaf_target.mk
diff --git a/testcases/kernel/syscalls/utimensat/utimensat01.c b/testcases/kernel/syscalls/utimensat/utimensat01.c
index 97a43713454f..0139d6ddfedf 100644
--- a/testcases/kernel/syscalls/utimensat/utimensat01.c
+++ b/testcases/kernel/syscalls/utimensat/utimensat01.c
@@ -16,8 +16,7 @@
 #include <string.h>
 #include <sys/stat.h>
 #include "lapi/fs.h"
-#include "tst_test.h"
-#include "lapi/syscalls.h"
+#include "tst_timer.h"
 
 #define UTIME_NOW	((1l << 30) - 1l)
 #define UTIME_OMIT	((1l << 30) - 2l)
@@ -98,13 +97,68 @@ struct test_case {
 };
 
 static inline int sys_utimensat(int dirfd, const char *pathname,
-				const struct timespec times[2], int flags)
+				void *times, int flags)
 {
 	return tst_syscall(__NR_utimensat, dirfd, pathname, times, flags);
 }
 
+static inline int sys_utimensat_time64(int dirfd, const char *pathname,
+				       void *times, int flags)
+{
+	return tst_syscall(__NR_utimensat_time64, dirfd, pathname, times, flags);
+}
+
+static struct test_variants {
+	int (*utimensat)(int dirfd, const char *pathname, void *times,
+			 int flags);
+	enum tst_ts_type type;
+	char *desc;
+} variants[] = {
+#if (__NR_utimensat != __LTP__NR_INVALID_SYSCALL)
+	{ .utimensat = sys_utimensat, .type = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_utimensat_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .utimensat = sys_utimensat_time64, .type = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
+union tst_multi {
+	struct timespec libc_ts[2];
+	struct __kernel_old_timespec kern_old_ts[2];
+	struct __kernel_timespec kern_ts[2];
+} ts;
+
+static void tst_multi_set_time(enum tst_ts_type type, long access_tv_sec,
+			long access_tv_nsec, long mod_tv_sec, long mod_tv_nsec)
+{
+	switch (type) {
+	case TST_LIBC_TIMESPEC:
+		ts.libc_ts[0].tv_sec = access_tv_sec;
+		ts.libc_ts[0].tv_nsec = access_tv_nsec;
+		ts.libc_ts[1].tv_sec = mod_tv_sec;
+		ts.libc_ts[1].tv_nsec = mod_tv_nsec;
+		break;
+	case TST_KERN_OLD_TIMESPEC:
+		ts.kern_old_ts[0].tv_sec = access_tv_sec;
+		ts.kern_old_ts[0].tv_nsec = access_tv_nsec;
+		ts.kern_old_ts[1].tv_sec = mod_tv_sec;
+		ts.kern_old_ts[1].tv_nsec = mod_tv_nsec;
+		break;
+	case TST_KERN_TIMESPEC:
+		ts.kern_ts[0].tv_sec = access_tv_sec;
+		ts.kern_ts[0].tv_nsec = access_tv_nsec;
+		ts.kern_ts[1].tv_sec = mod_tv_sec;
+		ts.kern_ts[1].tv_nsec = mod_tv_nsec;
+		break;
+	default:
+		tst_brk(TBROK, "Invalid type: %d", type);
+	}
+}
+
 static void setup(void)
 {
+	tst_res(TINFO, "Testing variant: %s", variants[tst_variant].desc);
 	bad_addr = tst_get_bad_addr(NULL);
 }
 
@@ -144,8 +198,8 @@ static void change_attr(struct test_case *tc, int fd, int set)
 
 static void run(unsigned int i)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	struct test_case *tc = &tcase[i];
-	struct timespec ts[2];
 	void *tsp = NULL;
 	char *pathname = NULL;
 	int dfd = AT_FDCWD, fd = 0;
@@ -160,11 +214,10 @@ static void run(unsigned int i)
 	if (tc->mytime) {
 		struct mytime *mytime = *tc->mytime;
 
-		ts[0].tv_sec = mytime->access_tv_sec;
-		ts[0].tv_nsec = mytime->access_tv_nsec;
-		ts[1].tv_sec = mytime->mod_tv_sec;
-		ts[1].tv_nsec = mytime->mod_tv_nsec;
-		tsp = ts;
+		tst_multi_set_time(tv->type, mytime->access_tv_sec,
+				   mytime->access_tv_nsec, mytime->mod_tv_sec,
+				   mytime->mod_tv_nsec);
+		tsp = &ts.libc_ts;
 	} else if (tc->exp_err == EFAULT) {
 		tsp = bad_addr;
 	}
@@ -178,7 +231,7 @@ static void run(unsigned int i)
 		pathname = bad_addr;
 	}
 
-	TEST(sys_utimensat(dfd, pathname, tsp, tc->flags));
+	TEST(tv->utimensat(dfd, pathname, tsp, tc->flags));
 	if (tc->pathname)
 		change_attr(tc, fd, 0);
 
@@ -210,6 +263,7 @@ static void run(unsigned int i)
 static struct tst_test test = {
 	.test = run,
 	.tcnt = ARRAY_SIZE(tcase),
+	.test_variants = ARRAY_SIZE(variants),
 	.setup = setup,
 	.needs_root = 1,
 	.needs_tmpdir = 1,
-- 
2.25.0.rc1.19.g042ed3e048af


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V4 01/17] syscalls/timer_gettime: Add support for time64 tests
  2020-05-22 10:51 ` [LTP] [PATCH V4 01/17] syscalls/timer_gettime: Add support for time64 tests Viresh Kumar
@ 2020-06-09 12:32   ` Li Wang
  2020-06-10  3:26     ` Viresh Kumar
  2020-06-10  3:34   ` [LTP] [PATCH V5 " Viresh Kumar
  2020-06-10  3:38   ` [LTP] [PATCH V6 " Viresh Kumar
  2 siblings, 1 reply; 33+ messages in thread
From: Li Wang @ 2020-06-09 12:32 UTC (permalink / raw)
  To: ltp

On Fri, May 22, 2020 at 6:52 PM Viresh Kumar <viresh.kumar@linaro.org>
wrote:

> This adds support for time64 tests to the existing timer_gettime()
> syscall tests.
>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
> ---
>  include/tst_timer.h                           |  45 +++++++
>  .../syscalls/timer_gettime/timer_gettime01.c  | 124 ++++++++----------
>  2 files changed, 97 insertions(+), 72 deletions(-)
>
> diff --git a/include/tst_timer.h b/include/tst_timer.h
> index 256e1d71e1bc..d9afbe0ece71 100644
> --- a/include/tst_timer.h
> +++ b/include/tst_timer.h
> @@ -15,6 +15,7 @@
>  #include <sys/time.h>
>  #include <time.h>
>  #include "tst_test.h"
> +#include "lapi/common_timers.h"
>  #include "lapi/syscalls.h"
>
>  /*
> @@ -112,6 +113,16 @@ struct __kernel_timespec {
>         __kernel_time64_t       tv_sec;                 /* seconds */
>         long long               tv_nsec;                /* nanoseconds */
>  };
> +
> +struct __kernel_old_itimerspec {
> +       struct __kernel_old_timespec it_interval;    /* timer period */
> +       struct __kernel_old_timespec it_value;       /* timer expiration */
> +};
> +
> +struct __kernel_itimerspec {
> +       struct __kernel_timespec it_interval;    /* timer period */
> +       struct __kernel_timespec it_value;       /* timer expiration */
> +};
>  #endif
>
>  enum tst_ts_type {
> @@ -129,6 +140,14 @@ struct tst_ts {
>         } ts;
>  };
>
> +struct tst_its {
> +       enum tst_ts_type type;
> +       union {
> +               struct __kernel_itimerspec kern_old_its;
>

I guess this line should be used 'struct __kernel_old_itimerspec', right?

-- 
Regards,
Li Wang
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.linux.it/pipermail/ltp/attachments/20200609/a9496cae/attachment.htm>

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V4 06/17] syscalls/futex: Add support for time64 tests
  2020-05-22 10:51 ` [LTP] [PATCH V4 06/17] syscalls/futex: Add support for time64 tests Viresh Kumar
@ 2020-06-09 12:55   ` Li Wang
  2020-06-10  3:35   ` [LTP] [PATCH V5 " Viresh Kumar
  1 sibling, 0 replies; 33+ messages in thread
From: Li Wang @ 2020-06-09 12:55 UTC (permalink / raw)
  To: ltp

On Fri, May 22, 2020 at 6:53 PM Viresh Kumar <viresh.kumar@linaro.org>
wrote:

> ...
> diff --git a/testcases/kernel/syscalls/futex/futex_wake04.c
> b/testcases/kernel/syscalls/futex/futex_wake04.c
> index f92bda53f6c7..edbb9c644c57 100644
> --- a/testcases/kernel/syscalls/futex/futex_wake04.c
> +++ b/testcases/kernel/syscalls/futex/futex_wake04.c
> ...
>
>  static void wakeup_thread2(void)
>  {
> +       struct test_variants *tv = &variants[tst_variant];
>         void *addr;
>         int hpsz, pgsz, res;
>         pthread_t th1, th2;
>
>         hpsz = read_hugepagesize();
> -       tst_resm(TINFO, "Hugepagesize %i", hpsz);
> +       tst_res(TINFO, "Hugepagesize %i", hpsz);
>
>         /*allocate some shared memory*/
>         addr = mmap(NULL, hpsz, PROT_WRITE | PROT_READ,
>                     MAP_SHARED | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0);
>
>         if (addr == MAP_FAILED) {
> -               if (errno == ENOMEM) {
> -                       tst_brkm(TCONF, NULL,
> -                                "Cannot allocate hugepage, memory too
> fragmented?");
> -               }
> +               if (errno == ENOMEM)
> +                       tst_res(TCONF, "Cannot allocate hugepage, memory
> too fragmented?");
>

Here we can use tst_brk(TCONF, ...), otherwise, the if condition will out
of action for ENOMEM.

-               tst_brkm(TBROK | TERRNO, NULL, "Cannot allocate hugepage");
> +               tst_res(TFAIL | TERRNO, "Cannot allocate hugepage");
> +               return;
>

tst_brk(TBROK | TERRNO, ...)

-- 
Regards,
Li Wang
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.linux.it/pipermail/ltp/attachments/20200609/cd003ff1/attachment.htm>

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V4 01/17] syscalls/timer_gettime: Add support for time64 tests
  2020-06-09 12:32   ` Li Wang
@ 2020-06-10  3:26     ` Viresh Kumar
  0 siblings, 0 replies; 33+ messages in thread
From: Viresh Kumar @ 2020-06-10  3:26 UTC (permalink / raw)
  To: ltp

On 09-06-20, 20:32, Li Wang wrote:
> On Fri, May 22, 2020 at 6:52 PM Viresh Kumar <viresh.kumar@linaro.org>
> wrote:
> 
> > This adds support for time64 tests to the existing timer_gettime()
> > syscall tests.
> >
> > Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
> > ---
> >  include/tst_timer.h                           |  45 +++++++
> >  .../syscalls/timer_gettime/timer_gettime01.c  | 124 ++++++++----------
> >  2 files changed, 97 insertions(+), 72 deletions(-)
> >
> > diff --git a/include/tst_timer.h b/include/tst_timer.h
> > index 256e1d71e1bc..d9afbe0ece71 100644
> > --- a/include/tst_timer.h
> > +++ b/include/tst_timer.h
> > @@ -15,6 +15,7 @@
> >  #include <sys/time.h>
> >  #include <time.h>
> >  #include "tst_test.h"
> > +#include "lapi/common_timers.h"
> >  #include "lapi/syscalls.h"
> >
> >  /*
> > @@ -112,6 +113,16 @@ struct __kernel_timespec {
> >         __kernel_time64_t       tv_sec;                 /* seconds */
> >         long long               tv_nsec;                /* nanoseconds */
> >  };
> > +
> > +struct __kernel_old_itimerspec {
> > +       struct __kernel_old_timespec it_interval;    /* timer period */
> > +       struct __kernel_old_timespec it_value;       /* timer expiration */
> > +};
> > +
> > +struct __kernel_itimerspec {
> > +       struct __kernel_timespec it_interval;    /* timer period */
> > +       struct __kernel_timespec it_value;       /* timer expiration */
> > +};
> >  #endif
> >
> >  enum tst_ts_type {
> > @@ -129,6 +140,14 @@ struct tst_ts {
> >         } ts;
> >  };
> >
> > +struct tst_its {
> > +       enum tst_ts_type type;
> > +       union {
> > +               struct __kernel_itimerspec kern_old_its;
> >
> 
> I guess this line should be used 'struct __kernel_old_itimerspec', right?

Thanks for spotting this.

-- 
viresh

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V5 01/17] syscalls/timer_gettime: Add support for time64 tests
  2020-05-22 10:51 ` [LTP] [PATCH V4 01/17] syscalls/timer_gettime: Add support for time64 tests Viresh Kumar
  2020-06-09 12:32   ` Li Wang
@ 2020-06-10  3:34   ` Viresh Kumar
  2020-06-10  3:38   ` [LTP] [PATCH V6 " Viresh Kumar
  2 siblings, 0 replies; 33+ messages in thread
From: Viresh Kumar @ 2020-06-10  3:34 UTC (permalink / raw)
  To: ltp

This adds support for time64 tests to the existing timer_gettime()
syscall tests.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
V5: Use __kernel_old_itimerspec instead of __kernel_itimerspec.

 include/tst_timer.h                           |  45 +++++++
 .../syscalls/clock_gettime/clock_gettime04    | Bin 0 -> 509264 bytes
 .../syscalls/clock_settime/clock_settime03    | Bin 0 -> 516496 bytes
 .../syscalls/timer_gettime/timer_gettime01.c  | 124 ++++++++----------
 4 files changed, 97 insertions(+), 72 deletions(-)
 create mode 100755 testcases/kernel/syscalls/clock_gettime/clock_gettime04
 create mode 100755 testcases/kernel/syscalls/clock_settime/clock_settime03

diff --git a/include/tst_timer.h b/include/tst_timer.h
index 256e1d71e1bc..708a1e9e9a7a 100644
--- a/include/tst_timer.h
+++ b/include/tst_timer.h
@@ -15,6 +15,7 @@
 #include <sys/time.h>
 #include <time.h>
 #include "tst_test.h"
+#include "lapi/common_timers.h"
 #include "lapi/syscalls.h"
 
 /*
@@ -112,6 +113,16 @@ struct __kernel_timespec {
 	__kernel_time64_t       tv_sec;                 /* seconds */
 	long long               tv_nsec;                /* nanoseconds */
 };
+
+struct __kernel_old_itimerspec {
+	struct __kernel_old_timespec it_interval;    /* timer period */
+	struct __kernel_old_timespec it_value;       /* timer expiration */
+};
+
+struct __kernel_itimerspec {
+	struct __kernel_timespec it_interval;    /* timer period */
+	struct __kernel_timespec it_value;       /* timer expiration */
+};
 #endif
 
 enum tst_ts_type {
@@ -129,6 +140,14 @@ struct tst_ts {
 	} ts;
 };
 
+struct tst_its {
+	enum tst_ts_type type;
+	union {
+		struct __kernel_old_itimerspec kern_old_its;
+		struct __kernel_itimerspec kern_its;
+	} ts;
+};
+
 static inline void *tst_ts_get(struct tst_ts *t)
 {
 	if (!t)
@@ -147,6 +166,22 @@ static inline void *tst_ts_get(struct tst_ts *t)
 	}
 }
 
+static inline void *tst_its_get(struct tst_its *t)
+{
+	if (!t)
+		return NULL;
+
+	switch (t->type) {
+	case TST_KERN_OLD_TIMESPEC:
+		return &t->ts.kern_old_its;
+	case TST_KERN_TIMESPEC:
+		return &t->ts.kern_its;
+	default:
+		tst_brk(TBROK, "Invalid type: %d", t->type);
+		return NULL;
+	}
+}
+
 static inline int libc_clock_getres(clockid_t clk_id, void *ts)
 {
 	return clock_getres(clk_id, ts);
@@ -212,6 +247,16 @@ static inline int sys_clock_nanosleep64(clockid_t clk_id, int flags,
 			   request, remain);
 }
 
+static inline int sys_timer_gettime(timer_t timerid, void *its)
+{
+	return tst_syscall(__NR_timer_gettime, timerid, its);
+}
+
+static inline int sys_timer_gettime64(timer_t timerid, void *its)
+{
+	return tst_syscall(__NR_timer_gettime64, timerid, its);
+}
+
 /*
  * Returns tst_ts seconds.
  */
diff --git a/testcases/kernel/syscalls/clock_gettime/clock_gettime04 b/testcases/kernel/syscalls/clock_gettime/clock_gettime04
new file mode 100755
index 0000000000000000000000000000000000000000..5b19c148f53ff1ad6bfca43e1f8481a15552cdbf
GIT binary patch
literal 509264
zcmcHi349bq`ah0$LIxv(6P38Apc9NPQ9+`BM2KWC(GE`B$e~;cF$4*6#AF5#6#_FO
zv|}_LxZa!fWYyhey*3kNG9f?!MIv4ts|4}rA)<&1h(~_!clC6q64LwG*X#fNN6GZ_
z)KgDA_0&^OJ@r&gXK9}2s>Fl@#r#QBu22Zo49gKH<F}$TzjcCu`71{muAGS9=PTzb
z-2poUjwLM1>F{|p&f5G;7Nv^P4WCK)H$2fm3{T7v59ViI1Fe{!riA=td+k3t@kirx
z{WgQr{8SW|C?}S(DxVqU%4bCaZ+-?&G{8kS7@uZ6ipP3=;`RE(>zSV|adzgX*+2G;
z|HjArH$E{35aAqtD7oTy`zLAnQ~0HK2A}T@7>w@?xCP$)d@eo==BHWjI@A;W6V(6r
zuar2+*m!$(dQsx?o1gLSDi_Zwy?NM>i|5Q3IHz=;Z_&U-!-owVHe^u6{6Uw9ev?0G
zufBGIXvx&03lL@QjeoQOmN)dPt+?S(bVi>8p3)x&UBB(>oL_!p*-Q9G9-?0kJSFr^
zB<^MWdj<b8`rX?%>rklgCF_rz`r0!`P6f*L=OR?^ir`Z;)D^xbgzO5x7RJ{Veu52u
z4IS@_zQ%_B1DkgD+2EUO_&jFQ?j{@jV>WyWZ17Ln=&i_xeh)^bD?RiC-qppZZMEU^
zrVXEf4gMJ$y}f0_Ki{Tb-`UW&+3-KZM$gqY^!YY+b&?IA790Eq8~#N$^yk{pzi1=R
z0vq~$Hu}l5(dPske3K3SS{wNvvcc2uc4cp`*vP-p248K{ua|82FSVh+z=r;JoBn=e
zL;tRgoY^+*UTni>x(%PbHuSq}@JDUt-Pbnw88&vc*oOa|Hgf)E(_hs_pO4${Ib=gW
z&xZb}4gK{tcrIIA+2IfyJq)p-ztDz%4;%V5Hu_v;)9xEK^q1M-Pq&dLXv6<18#%LW
z_`hPqzpoAdB{uj0utOLAb^bZkrrm38+C6GRKg9+=#>Rg3+vwp@2-uaKIBfbAvY~&|
zM*eX&eBQU=Gr~sx1vc{k!-ju?jXb3`dRt*b|4$n^OKj*}HvIeA$e(T_|4tkF5*vBO
z+30P)jhu6B_@8Y<f0_-w(?<R)ZRB~;Mt+A4{dybvwKn*O4gM0Fel^(iYoSfQ*4oH9
z)rS8r8+m5i@c+O@o_;p`ciQm3!iN40n|3b)9~b_0{?Tmu`>757JsbO9Y9r4O8$Ro7
z<h;m+{yrQ2Q*8K5w&C-f4WGAd`gNNP|3BLBzsiQsdp6_lv*EMfhR+xqd9K00x;hUo
z;JfgzEB}A54WG3(`cZ7;KV&2SDjPnZ+0ZYy>F;WrcDLE^zr}|C2%G+%Wka71{--Es
zDm7mh39Xv>m)1Bw+6n(Xs7Sv$jt5)u^F^F~O(%K<d5&@~^BS4TwEXb}(`J;Em)ufX
z;Vmg2UvTA|`SVJ~7u`IkM42}2mbvriO{?%0m3ya6Q>KksFl}s{?#eku6%{2FM)fW$
z7tfhreCxDZO1$3Exg~6|m<<k7DoVV*(iuwetn&Huy=bDsTUK0l`?TU&w*pvHcFVMz
ziz-Uy6`{`DTW5Gn=9VclXU_3e%u*`6<sejM7SEbHe+FpF%1h^YXNrpDB}Fr4l$I+q
z=a-etBjLPa*7KJ8<`oxtOO*L#-qLw9SWu33m4!v6UZt$Gj6DQyhOdlLu@~f9S~0&k
zD{ERsMRC!*naW(>Ja$AucPdKQ26}W$IVmejZ<$v#$7l_5m6eoN%m<>>dpl_$-TZPs
z3(oBE+>*H{y=9(gv<SLEm#57vDxCwwoJCNwS3z5)^KMnjeBR<&MdeDFcNTj#ZLZH-
zvS^wR13F<pD{h}xtQ6fmzZ@DYS;XFmp3gyJi;BEnA!QlbytQ=B9A#$Fy!qbJnYT|X
zod?Qk(>QV%P|-BH?}awS#~h`!0+ofxbLV+W=6RL5bBmyx+vf_gW};gaqHhZ^KH`CG
z%oW0b!yM?oti0Ge2mPpk{8VpTnG53Dgz#c$L5=?vA8lhE8db{YvR~7tm6Vsyo6oKm
zc}wTdgOw0XB~X1FRI0Y<mXeCn#V`<|5@0aC3P$k~DtlgqvY=v~VH{vMQ!*1!-oo}f
zDK<XB(0a+d1+=gE3u#0%=KH+LOpb*zv%F;P`~@YJYRi2UkU<ny2*HG1(n6HEW##j|
zCB<F}8du`9X_i33T7|NGa}<~ZIzZi{w-j9%pwSe;GQ%EGK943!>7njfMHS%79&^YI
ztrdH3FDsdLGxbI?b^`=O<+rdKP^nTnpTkl#r>J}`h7%KgE)AQ5iy07CmLVHz(^#o;
zG3a0?<S1EGQoNu{nOi!qcs@p!We^%OcJ8h7U_fQw@}lArr5N>KjAF7VzKS^|B|`4v
zg)@|y3o#u^C>{rW{>&Lgx1$xq8cJ^|Di-5S;n_Ss%S$Rc%*O>YjS0!gOSALMo$rH%
zQhS)v&_rC@3uewQrz=??kNg~Y0B@_{yfK<!W5NlTJ_y<=#<-9{QH5kX7>^2rRzl7M
z)-VbvLd;-rH4r}0v!deSl8Or9YlLyKM{{qTSvqsR5FGXl`7uEAY5Vk%ac4WXs1zn>
zjAVJyyczSwuocgTLxL@GVihkcng-X#xqr1MfAp2pE*W&mprO`tmi08;ddeJPJzi!#
zwc{?eaGC9o!z|>bgNATXNyLBM#P1~OnOO5bgT{m$aeVjq=Lr^_i6Le3aiwPc6D@iZ
z^S^#lj*hhrx!dcTt+M?d$jG0B8YWFQ#gNp1Wm((nBWyTMI+L=eRnkr5`psHqc_Ogw
zt+ABn0{l-=c+TL$Ki`?9IKeqd*@pOmKM9bs0-xqN#~G!iy%eRVvK!^Z^$~Cn<;yty
z@B@$FnBhd_yEyy@QJ$<Ei^IJIe1eh$D%L+uz}=OT<M2bGzC-B~hff#fNy@o#*n0-$
z>!u8h!-l+xmb^#z81V~=mFw}({4wJih#}5HOuQMt5YMv^^T&)|i2u8Z#HSet5zq4z
z^QTXX(Jqgbs8939CE=-W^JjpBN62LT43_X_OvS?C5}s|FKRFVfeKvno2_HY|5=Dg)
z-i+~BFj2zCkMIQjbP3->V2oe0B>YJdzD&aNOv3zGB;jE|)=#B`KiR@6%1R0El<?IO
z-n2;;KPur*k?3nA{Am(?wS?yxn)$Ov!l#-@eAY_%(<OXV!v8_SZ<6qRBz&`kKSRRr
zknm?p_!bF&mW0<Oym_|E;)4>tpG1FD!k;bSmA&nDdya%pmhdhKpCaMYBzzwU-(SMJ
zB>cG&et?8em+*rn{CN_7xP(7n!skf%KT3F2!ZUYi{uE013=@gZi4y(-2|r!JUnt>c
zN%)H-e3^tFDB%}L_(2lBQo>&>;a5ud!4ke&!e>hOM<x6v623;lUn=2OOL(!!#>>`7
z_@NSgt%M&Y;iD3sIT!P1lY}2`BJtTQ;j<+C4hes`gm01XBP6^o;YUjNgAzVl!XK6J
zS4eo}^LG0mCE=4Le2#=qk??K_-$%lamhdhKf2D*UAmMW*{9p;6C*g-n_^Tv*j)cEj
z!mAQqmGFfUK3~F5l<;FD{B#M=oQwH0OTv3hBtFX|e1U{tB;l`>@Rbt&PZEBmgfEov
z)e`<X3IC{sA1mQ&B>XrDzgohNm+)&Oym8~gD6Ez6*3}jiMJ4=1iO(hpKS{zjOZdqW
zeuspgBH>#k{8S0AOZXcl{6PtSlY~Di;ipM>Wna7fPnYn?65gON3R5Kf%@Tbd312MX
zT@rqVgdZT`OC<bY2|rW950~(_NcbEHKTE=^624Tz7fSfq5`LnDzg5Cdm+*5W{45DS
zSHhP`_<0h3k%XTw;VUJ4nS@^{;ct`h)e^p3!apkE8Lyi^H4@%yBJsIe!uurr8VSEZ
z!q-apg%Un0;TK8xO%ncg3EwQ?7fbjZ68;Ve-y-4fl<>NQXU^CBIVj<mm`HpcmGDa?
zyz)i6{Z~r(WC_1a!ly|1<r2P+g!fB$mxK>U_yH0=DB%Z7_`4<ia0$Oc!skeMO~R`Z
z{vHWmDB(jAexiiGSHe%1@Kq9imW01g!k0<-`z8D$312PYD<%8`5`LwGe^A0#OZbN*
z{G$^7VF_O&;a5rc)e`;@3BN|d|5?J<O87@5d{n|eCgC?p_{SxDvxI*_!tapqPf7R|
z3IDW&*CqU4B>X`MUnAj<O8CD@c;(A>`+r8lCrkKeC47p6e@?>pk?_w;c$b8KLBbD^
z@GnaE!4iJ8gdZ;9|0dy8|2N5M$l-fEO;LkUuS2isp(v_<eR88jgvYj_H-n_@ycziI
zJSPWFgvE*xYiYyJd6NkzfHc-D;IV`g2}cDyhHy8+YXm%+a1!Af0bfqoLAYALmk{nw
zxKh9u5I%u$nSlEfP9{8Ez-JOZk#M1aPbG}bD6t#?_aJ-{;lTn<B;1p*OTfoo1Kf*n
zihvIhKAEs0;QfT1gb)4>#Ce|+P9fYP;9Z1IA>1tB?SxMy92M{u!lw~lBj9y}dlRk^
za2?@P!qozPl`yx;u}T5IMEDPc%LM!k;XZ_?3;1!uXAmwF@PmZUB%CAQdkCLJc(8z%
z6Xw=8<`VE?!u<%R2)LZ^*@P7V&nA2h;e)@i|2GqM5pEIiWWs5Ln*}_UaDT#40goYk
zF5xu-9!)r%aE*X3Cwv~^Y5`wD_<X{Z0=|Io9|@NUxIf_mgr^JmOu`w23k7^C;R^`o
z2)GB~3keSva3bN02)hJ)>{Y-638x775aB_D6#?%jd@<pJzl!lEJeY8cfOiqjB-||E
z?SwBO92M{u!j}?WBj9y}hY+q2a2?^HgsTPoDq(IFW0eAaiST8F%LM!k;o*d*3;1!u
zS%eD({2<}W3Fip-9>OCC4;Jup!rc1BTmoK9IGb>afXfMAL0A#+Y{H`mAN)m(Kj9q0
zEdriQ*iE=uz+(xICL9&;7{XT)UL)YqgmVek2>5csd4#J4d<o&J2v-XD0>W1lE)#Hn
z!YbkE0zQ*)KH)+EpGtTP;T!??Abbts!2(Vs>>=zD@UedZE+CvD;6sG3C9DW|KjA+S
zK6p%wKjA{cEdt&}_&UPP0^Uw|Ea9ktw-6pjc#VM95gt#tM!<E1ClIa{@T-KcCtNAu
zmk8fLxJ<y$5S~bQx_}=iJc)3jfFC40nQ)GP?;$*e@L&NiC(JET%q8H(gl{CABH(hu
zHxX6@Je%+|!UumA<4<@x;T8c;Cd|b!)-2$$gl{Gs74R6s#e~-gcr@V|glhzRIpGq*
z)dIeR@Jzy$0=|IoEriPi+@CNPpxAT)pGmlsaG`)tB|MvOj(~d*zLoG`0VfikL)azY
zV`~7<C7dGQLxkrMRs_7C@O;7tkBadpTt>J>z`F?FMz~qP+X<HwjtY1S;R?cQ1iX&0
zmvD`M>j?V@R}1)6!V3sj3iu_$3kjDA_!+{B2u~OA<AiS~TqxiN2`?s`Bj9@o-$8h=
zfR_{ImLTR5@M6Mu5l#_sIpHOQ6#>sCyp-_4BVzmsR}yX!@MOZv2saCOEaByZqXHg7
z*iU$kfJYM!5UvsM<%ENTs|9=s;kyY}3itxTD+refxIf{Qgr^JmOu`!BLIIyj_#VPJ
z0`5ULM0l`(6A9l-*d^d&{{&n`I7PsR2;WCo5%7M(_Y*#NSd2g6YQil7-bMHU!p#ES
zPWVB>Q2}ou{1D+a0$xY>VZt>6t|PpPaJ7J6CHx5CN&&w__|JsP1pEx)M+r|C@Z*FZ
zBU~up2MIq;I7h(u5PpL2U;!^D{3KzQfEN>fig1d6%LzYCSP}4S!ha!r@Fy|;glh=5
z2zWB#zY=a1@L0mn5RM9X4B=-9uMzNQ!p{+|5%8hEr71J1Pw|7ebU=Lq9#!qD8EPo$
zJg)SrmYd!uGphfyyP_aiJuCckmRqSy1X&~}Nm1(c;cf-Rg(rbDl$)L$&Kd1gREO)Y
zCn)M;>XDz-(%$KMHxwo`t08ZCpBd_<Lj+^Qy(huQ5%&&goasC#7bJ*_>nag6>*ZL(
zXI5t($k*P#N!31A{a+j`9G~A5O&Q`=)TV}-OZm}MJuFAjSHMyHXw<L09~XEgr~_Bx
zL-ij$S=GK=a8@n5#xVPo8|zun)&gQq0Y$m7kx})`K_(nw`2=;@w}L^#@7=&a)efo+
z`Y1JFqx$~u-c*a*NhUYvIpAZoUzvRy>|61jG65C!c^I%8H#%+tD&YswQhf@(K&JXf
zDLzN*L#Ssl`<@lrns1CPMxAzfs1N<cAKTj8wZOME;Y)Xl5}pMeWJc>;c#eFGU-gdy
zp*Nq1^Bz)(eS{%TEQCd*x}Bf<2KV*u+L{qLihF{4eE5^0Ze_wax7Owkw_KK^)b9ga
zmjaGxcX;GVJh&q%2>v>l!hp=^tQt_yDg+z-o?ePF%{?)5vlzd%WRsT}&D^an`%N_S
zcI7a)lCN#eg%PDV11;p~KboLc!4SL|&gI8oMnEKb`$b+rS@<W4kccPIDVWvI$%>MB
zcywsw+Uc;1wvTc{p7az?XllC4?f*H^x#D&(@RW{E@1tyad<0P*ZRdi4f=`~dNwA94
zfhNw+qrn)T2TxC^cRCD-3iBkq9~ajdSWJ1A{mx!HgY-+m-OeEWqrWjB-@m?(|CerF
zcYf%i^gNn6Iu@^K^e@Ow&FIh&A#3okGr&zvdrjX)=Q)+&g&u#K;0(Tp2;c0O{yk<$
zSViyiwP@z{2$wi99#FygJr$*OHZ4`v-t%O9>s*-xDb?EDL*D#k`DbTcsUG=OZTNkZ
z+HmYtHRF)#KbGXYuRsW5C{5Kq(jVjmgf)RXwV_PNjJma*VFe9FxO|JY^tUmGCr;)p
z9)MYDOn+zabhhSSKYYrK?y2q@-8Z?X!I&#iNr8sjM=ZiyfR>u4rYGlWJ=6896BH%C
zX`M2xWIabMIXBcZJvJUa7yY3b#LfX^*sEH*?Z~)&&p)x=m4D=bN7L1YqwLlRYQ{Q3
zrQ3xc$!Jy+8e-Q=+EX=8da|kwN!R(!9JS8kqD5Kn$bS6xXy1|DESlv6^gYg3EnP>Z
zLMduSQ)cuA6&B_a`nb+LAzVv`1GhEc`bZIatUuO6C}VK!W3;bd^FxREHBQwIWk$8%
z>%SoBJa}0D(Kc0U^mf;FOlh21t?xbv)bR6t2i>(K39qENyYLiwAHPhScfixOZiRmU
zzaKDat_~9rzBt(C^JX4awXgM;AV4tcT*)O$E$x{ud~cm)8Qp|lHbDcbwkfVn7|FWK
zsH&X?eG2l7_tnzPLbDy*v#MQ_?7JBQ@0wzcw|)(VINV)K>8O}nnbAmJN>10I7dSXq
zDb{I*SXwE}Fx(&X#(Hs%NeZiWfjE|ra=rT@bNns+eF;K+5FB48{XOxWr9YB{H<7gq
zPZ7GU`tvRmOA)^YXX;NHkIx`fCw|wo^XoJosS-b4|Lw?cA4>K6j_3Ewx0ZY)2_LoO
zJ5%C!p2^SOc2eynka=MbtqsfVZ?55P<%h<0e~lc`->_lg;+5uaOYr_-Nk4yEl6SDb
z&E-ou=+8+?z{up{{M?_Dj3uTTcG2^oUm>;<?U9#R-ZKIAM-Kp=Lyv%GljG*qY0ANC
za$w$-q-HCLZO!`C|HgBZBNwGLEcGKT73UYPp9+~mi&FHe@3AI1UPB1MpE#kso=zB7
z2Un{^U^Pnp<LKO5EqRzuLW*9aP;ag4D%gz=p^h5rH3$fa{#nrLlTj3|#FHAzJ{jd$
z_tHneXOW}oZ%oniSvTubZ%;LJO>*nbxE~2Qt~-oAhH{eGt1DIiaK)RARVk#VfYAnY
zO|XIWl98SSCRJBrRqCCC*$NGvX4bAsYG!5M2KH`B=XfFHh=5fvx?~vp6q%UqR_eKU
z)tyVO^I#02>?c7H!P+eJb7W6!6O?Ag8%9(hjW@W|QJaxUla)R|aJk;(a%7KwH#pQ|
z_9%K!xRa1$7|Q(71pm<<n&SdIFLj8asN=+pyaL?`ne;se+S=-vT8XT-n7;#@A@S)f
z*i4oGn>eACr@o=6QhekdKOtZH9<%f}IHr8<Lw9WpYJ_<wN?rC%3O?#sF+zmovjXYK
zK+xxW-Q+lm2vl(YQ!7SJ+nc!^!3_|RA#lSYnACkYgP-<wzP8g{`-9m)J7+kL)6BY9
z#%g~7N#ruC_KQ1MyPfZFt7I!Sg0q#`X_?#ewH*c8UR8@lF1JdjVcW*V?@1vo*1x_Y
zO7)$rE?dv8Wk$IGHtIJ(Khk_KRJDB#gJa*>b-fTAN0#J6>Fgx>47-UvC&oNSan~lJ
zI82(l-X!dcUoznxAe7=YC>5Pi0$9az({nsn<y7xw&WzmjLT832eY!Jae0rHP<H__&
z5IHlRORpB6ucX(A&)3r-6!34SNAW3*M=s-ewJMO_0(`#K!U#WEt;$VzH6^9HfNRQ4
zPa2F*7NoSLW<STdgj!Zm;7f*5C|aYg3L^>N8F3BcOYIW|mlMW8_~CGLQoDil0YG4Z
zY*w|A=^EC4f6FMbcKeUIoGYHj)G5$5wxw^VywWZ5-6{l0**(UMnDT)8NE7YG8T=Z*
z34q!eq~#C*U++1XxML2bDcZUtyD;sY>N>3n9q6kM9nEfTP^%C%a-zCxFNfaIAy=3c
z<CcXdRok<cm_iSuOxW4WdVGF(id!-^<R|<`kNtxK?VjkK<P4-jgj}sne*?H#9N9K>
zDPL<)i+}QHU%P8Z0~L=kMH^r^84Pclma#!CZuUTc<otvWbF1$99W`V^)GpAz*AHOo
zyR(|Kb#CXipQy!KGCs;rcozugeea;#1;GQ}YuKIKDjykuof*-J)&!H7yS5Ng6r$-p
zU$?bQc4uuA>^`2<&TpghzB|AV^stKJpX!=0pYk*Qqkp>}&HL9U_)cp*FYZ^15qf>#
z&RFm5onQQ+s(og7mSBuQ$kM%P$QWVEOq{_SFovnn5ITg90bwug!zxC4Bc_crz{Gfb
ze(5hm=Fo8XWc{`rF@~XT@uBCyIs*xy4Q1bWFip`5;{=XB0b*(F3uKVva?_6H7P^(#
zYs6XmJ<;k>*jMZc;;RMhBphmoBZTh|aGrKFd@j^!Y%9dxE57?3i)^ia;44a=%gqJM
z2dZ?}Uen10gp&2~AdDRW%XmK-cd4O~>ERvOU=CejlISAqeG8+^FJUx-?>OxP|GrWB
zDm13;nG*XHDUuHU8ReLD&8YwXSC^sfg42K?|J`rs-y(yn?a?oTl%2fCi7*LDIi*oQ
z5q-lT8TO!tQp0~sQ{Y7CLA2k-sln~ez{{Y_4JGDbB|iy~kJvOjbM?^T<Y1dKsKdfS
z<w@9W1#|g0rl+RY&w$$fo05W?oq4)`KC}(jFb$j|^H3lhZiv&nCwv!5@>p_*RZ^IY
zqVKuFgd7*JXk~j*5{f=HikvK3)n3#SMQ@=fl$weX2p+tI@;FW+6m<rjoC+aF?SVAq
zaE>e4dkP|vPz^k5unn1zgfQ0gsn~InbQ>+8O`qE$YTPYqq$PuD#70mZhSZ_#m00Q3
z;vK=ZCB5|CP$KJ{42M*iod>3hZw%PaAr097QP>pbtA2sdMfNxr0Q?109I;*wK>ldo
z={vz()BT%V{>v38Ira(+F!OM|OD|INx#%4hxfcxR;x7n!A9dHVFg$byO&5KP+zn1<
zR%kYiJXVe<AFUkw#%M)%R3r57OC;i3Al1;KiFzf*HTEC07Jddg#TGab^T3D)&hw$@
zH57sVcF_B`CU`<MTz(3IUpNE5qmBH~kaU$h?(YHQWggDl?$P$S*G>kj)-1`s#wAAv
zUtz7e`bp@&aF*_>n-cQ1&(wx}NuGp#YUolh^IjOnW)FVxyB}WgeHPsAi`Em?KmHtZ
zG69*ZdIhZXrhRQ~t<UF&lG0(m$6lbuqs~C7kmG=mqxCW~UI?N6HB$Q_c+PnHH=_Md
zt@gVyZXH%R{7T=Km5UOt_wA`%l$ht+S-Gg2;`;!iykUrP4Mkai30A+7qKu>{k3)<K
zh!Oh=ZX*0oXuud2zcef#U~0y;L&T2xFA>E~KUic;5q&K-W)S17@Oq2MBy&(;?Dv6*
z{uneEp<1*i5$eQXV3xiyiIEK&m$_Nheo?ib5Had8hzJ`>^&qLIeTxN`%R=l~Y?a~3
z*nYkiLv-dIUzY+~%8Z8hpzX*&D@r>9jZUmZkuq6?V;%e->%&GS>=#ok$2aY8P8t#|
z%m-I4aw&_PA~0_E|7~TnLWR>K{MxW5)T{ebG{s&=o=h|BZmcJiGcj|!epML*!zRZS
z&l{1eU?Tjn(O$0&sL@u2puy3ICr?OKVZPT{BG0T8)3`pCrcAm?NEDbSjK6FmhN>D>
zFjbfFgR$Z!*tzKs<Np46Y){}wzeRAE8LdZZO3_dK60@N=_1}!lvYNeT=%>IEMmU}Y
ztnGoLI2DGa{~g&sJsE@8%9LlWq8R-Aza;uj@_!zE3uCGHw<PI#g8!5l_j4WeNjL1)
zew#2(`w7_-?PCleyR6T^)JJ|*q&7~Y)GG2DB0FU4M-f}QH9c4R7US3Ja;}#cFk>!f
zV5B?Nkm6m~OMQRPkJJ0_0hzWz?*Y%I1`oi|IRl?TT&5Sk)4za`!7$Ix*Yxl;f<KBP
zkKvc;ch(_yfbgE13;0AO@`O}&_y%OIGB;<oxwUARmQ;tKqC0eJ>ve4}<zv@2cym;L
zYj0H>c;2%dn+?6yhSo%Y!}K(SeS5Wj=ivb({a4gx??u}&6{nHr_{~<_<FSjGoiMu_
z=0RA;95oUl%=nw4{(+(*%hLKlb@*bdGdzPZDSkqtA(jY}i3isHZxD$~*?F#4%RYk>
z)Ycp0tXAEbo}@29@Dz+{8=Uv?zyry*B+M)AQ-8}+xBttf*fEYwSdx(ob>>}$AX?KA
zxrS3lQAChOW}8C>=3WSp7d+q$aw&Gc`HBBnqW2E}F_(8iaJ%<GxAs12qkn^~%FN0N
z>GdpBHN^Q&3>w6_|2A|**rOXx6WdnrQvcB;XW%NJ!;hHe5~((MK!6`$#If^HZuAe$
zg_nXbvOuEQMjC3VeSVX!*iz{{iTD{3Ut-F^@FdxaT74&BIQqoxS)aA1eLltm6HJ3~
zncFcFQaTR<7u(C>?DFaC-qXMN58OMQBhFKr@WF>YH0ugl8J4U%ZoAd2AH0srD-^Gb
zsYlAuQ|vsoX5SD<l43~WzNxV~Gy!piZ>J~g;8KSttK}|dU4PVX-DKKZzLux7*6DA+
z7L56BC*xU6EEaE8i?>5E{XFOaKDoP!oH){gOw&S$`1ZHE5TQ|@4yIyT*F`=O-TuLO
zN^W{j{6-JFBZLZm)W6xy!S|-8bm;tHXoWpZsWp24j`yU>EaeAh3aj>2L*vCpv$wJP
z_Hb%Y1Mn<LD36=$Pk(Su-aOMes9}M#R`mZ}v;Q-l-)%;rC%q?%H!a)?c=sXa<Q+e_
zou~9oZ+%XG;?s`%Yn*p=7((ugLypuhFyE^@>Alse@rdKm0c4k$?>b*>@-rb}Z-neA
zp*z!i>H}~_7K|>+?G)lph1>(IyjjT6urEysPviul*Nrq|j)@6^HHMMsXgGn^7t!`(
zq+3Zk7wPyWD4A|Q5|*tG>mNXc&<9VA#GV^|n)_|ujKY#K0X(#|4}(<dT;3-1O?%@}
zU`1420K4>rM)xUzBkeC53o~sIxy4+!Al02D4y8K4PYu;YArK9`r~VugxxgRzocMcI
z0uSB@wpT?}e;tB5IElb{kQ_b+h#Dfi-9(BCtML^m0G72t_8rub8|t6OK<+g>tD&F}
zG1N!J(M#YCpejdzuAF7so(OkEx|bGIRhWPvNp<G!g4%ATC|bXlxrF;`YslN{RJA63
zCw!l(IYy)06Pk#H>iI?JQ~`NE1(x|CMq19mU}Wg98;!?l?y3oh#y&zmaBRMR<OhoH
z+bgTa4+O#XT<z~GSzr5)yPmnr0>o_ob$`gyK2{s{C#emeC#f0O7(ZVLqM6loCy$Kh
zJe_a$7@q9?15=jyS$n+0)X-^+7zNrF^MtO14-X%-T-8^ms}ecRpOA4vE#DS*)m4yd
zqgs`eQ&2Ty1EfdLi5c<d+>j8<6MBOUyEk@6)OzHtD=&wxChh{Ft`v{%xAOUWV^a57
zGxN0Z-4pP8YWHsWRk__A@a{9UJ{xlq74N0)s=PK&DBHO=4L$w>S(BV@h)cV{-tt3N
zCxh{r&=407!}N<<DA<2|U%Tr!A!$&phJ<~Egzb5>L;72Ap2(JH>z()UT_|qkm>T>?
zFL17S5FJFKXJxLNwjjpK8Qg_{lx7tC5D(!-OB-iMCK<#2L@ZF@HJBukzEaV9VmFt1
zLknWx_<lZ=z4^g3MY!P1!}@P<N19{B11KL0mxuG1DF~BbJ?W^Th92dPLRj7JRDUY+
z%;>-V^(P3g&jO%-iYE*lf*s5tpC`5zWWvu@E=Gv%u3U@|eMIHrZi;WH8Y=7<>Hig;
zhuz2ctyddblGKD9YA8j_#Jj<!^71Ra;d*XY#GV7O)(<Z@gC3L!PV%1R25@S9U9^k1
zF^1ltYtKM5dOvu(O>n}!o~}kG=Za7=7e-KlFe=;~eK6McbknO~jz5Y`UF=FhiMAYP
z?7^r94<H=AADlhthBNR0&+tNt&WPg9TJH>K1gl2($=uzV8jm;76MwXiGjggs>qGBo
zoOtGDwfbUtT1$99j@f9p_C`J0D%z<>tKwwRQz3#UB%VDXQ34B}l3&$#or;MelJ|o%
zqvTddZkV=8q`S$@WTJo*$>WR)f}0DRx!XKia%?87$&^z~j<}$Pc+OQn363OIg3cS|
z#-{4<hlsP=^li{{_%j+Iys8rU&1^6;`qp#6>h~i%7h8tyh|npf?+zN|Ii^ACqqw&Y
zrEdC^E-CKrg8e|xopqo$9>R*Hoc?Atj7WD>jQxn%-Bb0(8uSW&DVFgom=!yIxIazF
z3evMLIbRK}rKb!pvY3p3h@MbVlNmRz71o`46(tA>zjt`FD-r1h93H6t#VHD0`Omz8
z5lZbZXqLB#84&fBs>1(zi`;MX0H-z0)L-h){~<F$I40DWZU9FtyS>BJsyCvLrcRs%
zV6$?{2V54tTd|i5=h5(7;1gLcb@LoZ*ZOzxS`%*+yCFJ#Z(+RAzVIihn$aF<<n}JY
zTA&ZyF51}1Hj1n^LQ)%V!R}kb&NoN9R_A!T`!^-89PJ83Z^x60r^BPuQoKo(V_euY
zE*^lT%^Bo!q_2XXK+fZKu*AkgUjPrv?8+1{*8c|MxS`NpyBvj>B$xjg%e8_^VizCb
zlgN%>80T-tj7OdrM^=@X$B}jDf{{5%6$~}UhDUI%d*vRC2KOm%f+);XN@Nx(nOM}%
zn!?rbyeC13{YfrPR<(~{K+yzeU<#_`h6XM}k=V?HQQg|f<Y~HI4@tR`fx~eIYCw(I
zJz_WJw07QjRGN7t$CZ-k49uooyS^#H;e^QJtfwNGrx!<K=*PdI4MCt6e2m0XFDEKv
z*R#M9^7>rzPTjLBO=)r*ScSbXeqd=S3}_uX5O5CIM>&22g<5sxH@Hues5!nS6sp?<
zK1Nh=?c;*apMe)6b|M4u#S<}Eeu9kpsKp#@XW#_UmDDm({c&akX*B6-Xaw2x7557K
zjmi47cgT)N-**r%N6?R%$OR_A7X(=cPya9tM*sC{AweogXC4{ts!a8o5^Mwwgi6yI
z{4EL5SfYP#LP7(jjOyKhN!aAq6PENh7N%NE$Vk{^3Jng$&Ib}ib|Nh?IxWc={1pAc
z6M`YWAsDJk_V)5;?|nFp5z(_4NOJbK)QogF1CN0bC|uq%{n_;fMIk8s+5a$rGXP)`
ztrmKSdb8CKCgf)C(9GSqKeZj(&Iq+<nA6BC(Z8V(r0SXkReQ&*80xtRm3-SE6w{1D
z{zbaHP1csk8GHg_s8uC9rkHm?Zft~ms)@U&dys-MI{zA6V`PTedHr(cDMG1@JFpzx
zhpoRba99sc;^H!Gx)#a37vQ4xn-&=Z{2R*jA^@;lJ?s6pw!*fd+aHS0Gcm=OU#MM0
zLq+GU3HSSZTvEQ)yKif2n{-nw0GDaZ%6*nNPYl7~mg6=sV?_vd0R>x&1;BLTtKE>l
z#j3EFnT}9uH;{1<oWTHSWB1}$sC)<(i8G%88$_X+BYF?aHt+y+4f+p0fo(TA*5D%r
zGg=Le9xlSn$t>0!Pl6VzPH_fL11CKX@f|8X4eD4T5nn8XPJYG{77h-q;tc+V-mFH2
zpYRz=g1Rzy$DV}m#>X~%=<h>MkRy~j5nP;sepo(?pnd?<6j@+)2-f%_GH{?9%+?O$
z?wmdhRuMY^>ya8NpP1QJw+l6NH-ag_FIn)Lh!({<7|x-BHc0$dAk6@NEgz>TaHVQ&
zAV}5F<cVt4Dz0A0#Ul9|<l~26jK^9$vQzq9xVS0Wcn)=)f&J(jUHL&SXkyL1T586H
zW^j1RX&a`5pv>GHQB4ZHW-5pFaRe<KS{~%47JzN+VQ@7jvomlxo((g7lymeovof^u
z0P<(3awe;sCIs2Zfa7JfWTb3ngR8l)&H!<2DOHT|RKk^13Ew4dmggGGwtfU={2oBu
zwLW7pyG3I52QvEw1A%N2j@P@$7V*Bc$vP(TQ|n!^L1<ooi<$B7_|yR7*I&6!Sl<M+
z3o9G863wr|XoOqXunSxwd?TCT3u?e9b{$GP=HDU*zb;b7iTDV~gB(5lA7k;mPPmzV
z>sEmEh5ar>cnRPBihvxcgm83>2JnevRq=q(X!GO91Wd&i8ove`r$rj>mO1ZlB_;M?
zE6)Vm+|Uf(=KB@5`JN@dROe+RA{Ne5mo<uur0rLl5PUcMGKx2v#C^A2YSq1|KT<gB
z)|a^I^s^udIZ6>R8CSiw;PQvIDWf^-{W{9$ylNe`=sEG!LVzeEI_9wR8lrJ+@MowF
z=24EFPUiO32aPz$BoV`J+<S}DjRBq7w4o0MJ$5<w7)G4VjqtKoUQvvl46K>2kP_?v
zz=~^*@lZIO*!^Pq>!{Z#>hZoAawLvuAWa$P9ORh(1#<4cEKc-}1-92@KuCEwSKNng
z1b6$+X1>vd-KQbqyAt;o_fV|wqCcq43mT{V;GE=`3zmQ`ikkU~`V`dEpWckVaK&8(
zo^0g%eXyWKUlqZ)nkdSbfOQ?t3tP}!BGSnSgzut&(%fB+&LSZb4Ijl6F+|yHic-sY
zs-FRAV%G?r<lqcJ*ZN~ZHG`Tr6*;>i4Q2%lL+fXV=T<?f0hDmQ|HGe#&&pA;WU#3A
zL$!ggfk4Lk7iOvv(%tt@z-nmV^eU#t^)S@vuHEq3GY^Edl`B`0NXx^eAV&_$#Q=oL
zQnZ6^?R)o;mWKT&m99%U8OEqJyE7VcwM|F%vh4jMd)*B&2W~RFFB}z~Z{0jH<Gt{J
z(Qf7X$R0?nmtk7#cWhx+z86?eo`eHG1j|!yj6H&Iz>KFIo9`8Osp3T=-W7QrH_n;c
z2XCjOfc>9BU4w+Wa-pazIKskJe%MYF`w3H9*qxah!exvua>nTNh3~WVGK5Hu`in3g
zdL7gg$r+UszcX|P<Y5fy3@l^mRI$itj!n?IbLGiE(LA`9X9$X0H7#00<abjNeeF0z
zS#A2vcen}|R|PJx7}8B6eSv^#?^5qoRo5jnAM^iwqAw}1ed(;g_9Y{briMAZ<U%iB
zM=wotKs?hE0ifZ-{sZTf8Erkqv<K&#>tTwCOybEoOlPne4h1TXCw1djSaXzcA;!zl
zAEQch{=I=oENl;R=t;C4Nj3}h*=Uhcuk(Mt)V~fgi|;*}?Sp<YM<fw_i~MNmVJIs(
z9$F4}{4Vs{o}Y%+jPr^1Q<4b(z=<iyuL!+kpP-7FmkM)ej;nIeYzZ@DGpme46$Du@
zT&4a93iV52azHQ@U4N8_{sw{*to~;rP9Xwg7&&G#)89jEEzaxer@{&9_iunL;3mdp
z^P$V&Zk!f415bj%4Ta*ORuMXm>er$=bEhe0A66se;x<U6yP+4w;O1_k+wfjEc6LH|
z7OILX6Opl~?XG2WLWd@gA9pdL;|&Qt15)VesH{2aG_eTX@*Y2Go57kJfKwvul>S%D
z3K;kpQJAv`eoS0$+`o|%vJy3Mthro_6{sUW!#>Q$R-iG|OzFtBM})HLW5AZ4?uw<{
zb{&8p{sPBR3oaDvFAH`8q)+V!0+hZ7(CNP(b?IQ6JyjPaBBzv_bzTC??>++sykdj9
zJkDSl05tsPt?W<rO3@!&f8gn5NKCZ7ctX;pzvcfxT?%UCTSoM8`q!~Wykf{vhSgu&
z6B>{kDoe@@ElO_Nt{;HzMmYQ^a0YS7Q_)`$(YYfJn5+T5f8~x?l<a#scSKo|?|C-@
zv0Ba!YBO?~X%w)qTXw<+2N5fsjB2@|OG1;ALbH?Gs;kNI9?^sgCBBJzfx-SOL<zZB
zgMH^^%}VyUModidofUr6V$H3lsrsH^tuJI?vI`c>3r;8Nv$i6t&(fXC_X4F~j_og8
z%B654`g>^W2j^7B>`&3}Fk0tNrO>mQxkY@T*IipY(v9T`w*e!CQbVU*g1Cuy6Z8|o
zK6ba5VwhRHzlK~o4tU@)ap)-)5&ezzwES<iJ;)=YFW5l;@J^bdFX7o_$Z;7^b=8=c
z#(W!%`HSFd*%DB^jWwWd@D(T$Gw(_i>8nL-==c{nG&xq_H-9ilgY$xiecjy=7=f@X
zp4Z~A7+;!r0hrLD9R1rM(>vT1A!qLlM1l5bU&0_RGW`$kMqxQc8iQ*fF0|%XU9=uk
z)`N2sQRQu*!%fhL;q&-9eN*)f@Ea=VAo}ljLG*vY2kLJlDs^j3A;;Bs^A3ymFX-;k
zEi_MD*w}_6$|gq!O8C?2M}AljvBHTP+($N04&M~q?*KWXpWLj2n&T-vS6mGquj3(h
z4k+L-TWAR`aESCV#mU16Cm^9&08dM~gQ+0pzCQ27-{P#j&-38&T?ow!c<b?L?E88C
zpZ(>X=)hp%V0<G1e?-`2z&*LrnsH9JmAVk#y2xxCiw7uT%aH4+4u52o-`HNRm!Pcm
zMf4Y4iEYMxB^;9fNQ3$9aE>d<o2h#tuYNJsejL9xF7kL!FpkF?>!<&eqv$Un<q=23
z{W{c;kWERbhR0z6VpR0sVC?z;^4f<`jJ$4tJy-h*C*Y`Xj;H`y{bP{D`L!=C#`-@V
zCqzF%Fx<X4qF=jC91-gq8P|nUS{=9#-k6{|Bi#<?j!tm-zPIjV=nq9jP<QcY=bJsx
zt^C=w@GKFnsdWjMM6^)#gBCT|i~}F%o6&d(4SSuE8Rbcx<)1p9Pl?NEM{&@iYHN@F
z#3}WLj*re~R8>i1k^bEv&IbK02i1)A$dc!4UpWK6pkdes94K6`s;%Nz<Z#x)Z^n7F
zUs~rPU$~Y4v&WvQkxd@0$=!4{JT{bcT>~8oZVxo(YbSV5&&Np$PBQYftCRI%C{i<k
zKPSK8izH9C=P4DANz(DfmE81XR?n*{N$_Mn&jt&$FLAYK0i+JH6On8bUt2Y@r66<y
z+Vg0^WDx1);OPm8=kN)jh)lp?5sq#^g2aAc90oOfBT&YWuK`8<B7ktO$w=FQmv~=-
z8hVON;#h~>s#igwCr2P{FpB%E&cHz!3~xj<6=>h++u#m4S=JI6Ex<138#ci1N3Jj%
z(05{9MRHNVOv#g&6O8azITj;0aRz#zs#+DS`Gws?iscp1h3TM;JPM!CSU#@$XhBNE
zW`5G|UJI7HZz9V!eG;SqOAzo2iq627uolZ6)X*wo<HICUIl4~m)1Qq6C2nqEba|M#
z+q)h2F~vdGof{N)XlV-5vzR%UbYhT&M)h4-&xJPD8TSO^qf!t$$D@6MV+IZej;juO
zv|S!eC{zD8#HF6@1TP#nkiui=Iltj648JhSf`nae=bMQmUEVuJX8Xp2S>!9BG(oRF
zi~U_N8n5l0j{~>cX=$7p?vO79o*b9VTYIThJ#*Y4&(;*=)=sJ#ouFnls@l4RIzGKK
z#c2?p;Ll+g&J|ABgjo05CvoK5tEtsb^h-s1-gnW^yw+8eCMHRfDof)GOobRAoEs|z
z$I9%dE7OG1#CQaUqEJtw4Ry@#tp&bweoy;a3@gX@nMTy8T1(4lA6?92T7ff|j`foU
z_a=lg-02w0;D%$*5Z)pRfQv-U0>gIBL@822lnn(+j7NY4xV14I9XAeo&S<Zo_x%Vq
zces8yxVhivZ+#bh8ja^9)PsEd60N>~y{iiHnIa=K>8`yS#GUf=o~oMV;7vL9>g(z(
zVw|Q01Xtfxo~q|rJ@$7fSl<S_iETtrp?;`$LEO6ZBX84ygk7jrWxwZFEl$vj>*;E*
zN{)SH$VDz<Mm=)89GLUD9a`@$TK6u8lV3?Sh#5T4RD=Ep=Jkz98lQ%-Cn1$y4>^R_
zZ?_-W|K{U5ExrMRZ+3QaxLn7u4&?jqL>%S&k*AxSEcmuuOA;m{a`!3p!CZGr*610>
zFa+D1@?L>F&|T~?d|30_UD-Cz8CU>Q5^hoW!@OF(1d@p<o`e$Tn}xW&nOEyScDpm!
z4G7$9OgLk^|MPDCbqn0XKXC?601})Q;2apt3qniq-GnlD>%3Yzm>n1fPQAQZXK*C>
zAub?3C5&<A0jrv|15*m~tfEj26|7-53PQObDW0k!33<*pugD9)VtM|HgBhwed;*jl
z`4vyX1?&IjxeXbili-i*IdOjFYeIRiAPPDwyqd$}LRq9QC``|NEmCluX4Mwf@0c~G
zyzEo#YKRbD|NY12I)nFv7P>%e9>fzAFxUG@o-?v7JjgPF&rx8umI5)!CoW~|C~P2n
zhDFMt#w7g`lguRB2{LQE3bdcYS6fx~OWa>YmDU<D3W3F_BJS|&Q(>p=)-|&lkp;eA
zr{W8bccHF+7sfe$E6{;}q_J9W{kQRbxbNMyqzJcIiaUjkU9XBIFBLI(>wB=nc7999
zZ{TtKo@nPsif}R*7z6PKiQfk74g^0Vmj89axO%4iVEYp#+s{o`Go#2__ID(^^mT8U
zqB{eJp*nc&^dxb038~8@d>QF2VG8^n0XT^)XCL#y#RqNc2m6@&9Bg8Tn-4jBXgJ`=
z!?%X@Ezl(wpV?r?8$&5>|8F>mK|OJQh)=`$<l<9~GeEgPlIWe0hhRAT4Eu{kT8XIm
zW$N!EBv>fxU|zIKsiR=}G7J?PY5+ins&tmKkd6D-Pc$x;$=^4u%AKnOrv`>N0~w^L
znll&4(=QW)Q!g6qdn%7Q!BoOm{HrO4@Jktz9CvMNYdaC7vH8NZb2>6`1||Y6G4WbV
z`n5AT@_{}KY|_Yvp|9|0M&}T)?1np~yT1S>h9qI35eOUkQ#%vA5wUm70V0?>;?nRf
zf(nX@jFhOJBGm$nh`E2#N4z2I)fxO14Y_Nn{qSJcb>S(3O{1mrBG&yFRGiOJrver=
zE{j>zmy-JLXh}Z<7HrMG&<SuS!+E`yAv#i#txluAxF!_phO*Ox8@z{b)Ge+74MJ<g
z`u1~&GUdh}8s)vJxN^6ZdA_FZXjy5ZnIK&IstL+L1jij{2kXa;BmF{pW~5crtY5sT
zYBm(MbYU-KQE-pY>!=(x$UD%8`#aoAG+Y&AFz-lO{ZXr?C7Aaec|iXzW|hH}R|^-u
zre=NM{Rg6Xx0aOdeIA#eGNXqZ_IPV5e;(v}M6H^PnebJ-{vQ4Q4waoNm`er&T&>50
z8xk^1-0plh8oLn)J&K{DKEzf`+p2wl1rOR7(CH#y2Nm$O7PVqVde3Im(SAQ~60}wS
z4aO1_=flu(<*z3!KgHefMM}fI<lKaP4WFkpv?M3ACNy`;P4At7+dOxQdy6BDdyBk7
zIv_s5^mNEZJHh=)H|~yVzhJ<ZeN)XTrhP3*6i8nQ9GZL$71XM?)0aaGUNzp2?`oXG
z{)g@rB-R~KUr&6MhK$4}On>Y34(B=XonPb_Is#qDD?dCA^oM1xkGaReCtfrF!-@Mi
zeD;pR!qoxp8;4!-&-D1`fcWP{{4C6jdXNC@>ml=Y?d#iM`4bIMV9+SMC{8(;loyc_
zgEc-K?`Hrdl|6aVg^<CQf#)PV_3@p9r(`_!^`+veC!Soslkk*+r*yF&pDNy5AYEM@
zJf%^8{<XLtnJ_MLZa(utMqcMBhF!sE-HE_?<M-H`@g-l&o+B3u>OFczoH7Nl@8ihe
zIGXFB2!}V+oz9ZCBg5k*qft`Vj{x>U&fJe$|0>3x*(L2`VFthA#T%IR@4ygT%uaVQ
zgg(H*5MF}lrXlE@pCXQW5^Cnv27IRxsr%H{h4DCoZX$jUVg?dc`YSL8_zT@r^_(!J
z$TO%Y%$hgnH_=tmi8BCp<3%27=nh=(`%2#cN27)wPNxj8wD?WjKf%%{sbSQ(j?Dd;
zX`<ifYWtCz&=>!TrMHoI8l~R)sv$oA;9{<35=|h{)B4FMY>y^{e&YEzOcKK>Qab~Z
zJ2<XDdLJMdb=;Yrtl#rbm`du7Qf4BD=i*ywEu&6!O!6Y<gtuS>${>UPST_|@6W7?d
zuKSO=+>vaIi}Svvq7XM}e#e8SY7UMm;eqqDpC`C$J)j8Vk6joWUz|Dc88NZ`_&?C0
zVjXY&Xv4PNJ!PVE#c1fH9xN1ntJgRXDFDQ~I!^&6Pf<I+>dt}6IPo=6q|V*fs~O+A
zYb$6W##>0l78@fzT(qzQ?!%=fw5m8oMMKUN`=CMhk@ZZzID<pt06v_-7lCpw`$ECy
z+>0#x!1@11;#WVi17DkPsybx89@A;rZz8A+i>}|zqn<(t)K8fpWD{*;yH9B{K8p(k
zSzh@&di$uF(1_!7em_3jkR>1Os-dAbLF>@T#@xOsJvQbhrQrKV|Dxd-BP7Key-B}p
zJqOY>9`Ozl1-ucRdqQh!rn;3{%7zq;$C-Q3e++kHX2CPJ&Y)d%QX;+^E3~)pc<mi~
zh2ygW#|;Us?#be22mC@+VH-Fun9i>m1gBsYxg#4;H`ZOO{n$Tr9DO&+#ORCL81yT}
zAMt9hCv;EFc+43?(9IBZOY9A>u>6H>e_~H!O3kbeWp8-{smKlR?xECrJi5hzEIY=*
zS$HPClB+iCMKc<k5k<Jhh-Nk$gEdwRmNh&WDtGO}kW~zy-u7~Qu;Ml|=_cph{0eM%
z5=Ogq5%tJismgV7SzEg~EIc#6_!FD%8ST1n5DmL)m!UDtJj+CkhVSmwFy05`y!%GB
z%!yE!JQmxlsi-L?39RZ7%zM27mGqvl^>7Kr+Zi6lkL}^n{CLMa?}9(T_b7~I{ig}z
z^0i-aD|^{DM`20)hHD^wx|o;urt_Vo-W+E}AiWGv&WwB0E5+x->DA)%$@CiW`CR%M
z@%c)6RD8ak-Yh=fPH(|yee|m$MQiP_A`b^XGs>^sE`c{iwjlV0w@1$54Hr9ub79vo
zSZAOZF2GYYg8}%%>AXsgO9|;YsOTxyh3dE<_Q}{-kbu`ojc0JrwXXPZ0p2Yo&3;TK
zEV6xEFa|ER+)C(tZ>ziVF7zqDzq)&3zdPq66_4BNH7E@^cFi!pT>2s)|1WTPKZ^&P
z8XRQ#(7JgjKkQst4pBpnHK6t%?dA;pK&qojxmEKLyk{dr{y_;GsP?Ugp@zQT7|hdA
ziJG}pvl4Q(fj&G6)#xw7-Ex9cDbfUAWlV4mi!{Mu@2QuwMMonTB=D=ew_@(qJI1(i
zaL^Ye{LwG_8+anty`a7q3PiS4)iyFq`ghnueQzSc7%QYet^^W2ZF1}>Hm>?OgFV63
zh?_&%C!!~!8%X2)9j6hoD@9>IwB^s<JQtPFYqxg58TbfDTy*~!k}!iX2qx(fnT8|!
z=des%VE1UhBjKrPj(bo~-wJoA4ZH)7TEE-y8~O534_yCGs#@0e`|rOWc|UE_d6oF_
z#<YfpSjyijD=}=j4QkbxM7&kRnft!dsQPzx^JIK(#JYR*JLv40Z9#H{&78(&W}+GB
z2ao6~zIra46j;%$?o1z?r^T3Sdj~VBPJv<~q|#5pq>9bQq~kpIgof^%lSUtX3`#<t
zTYm<AF&GV{)(Ld4m+|3CW-z@Bl|w^c1Wd9!aFq<^@FYOJ{zdUz$>-Pb9CFOXBTXXK
z6!)7=j>$Ktap6&7OVM<7lVc2En5iN}K|VhFb_kGpIJ~G3(vnc`gC;^l`-4^NRv~UK
z27&$GCf)?0AH^u}D+3rGEV6AHzTJWE1;w~`3_p4uxV!`|kq_ukKE*G+_NC(s4zS=a
zD9~Smaka-7{;x-gRR-T8UkY#ACOo;?@O6?JTEQjA2-eo|wJeorMKRo@s6y}Dfu1h9
zGrhm<92;WzK#RCt9<FPuKl{0Vronri?XK+uvT$D*yx8L-(|H-5;W2;2R>+uu$1nl?
z+1+l1ZFtk5-d#l)ojeS#DCWK}b^;(Xuav!ZI>y8IF}~JXI~!L$QtSA8D4$XJ4SeV;
zktW4G8a(o+_2rq;eXzKENv3>9q5rPr8*j-s8S;tmlZ6}~fTh;t|N1*<Tg%=62scX?
z!{Ghdudy}nA%Dv@yrIMK5}?*EMf@k?<HLxLnXS}5%Gch7x2I>Ox4$=iBAyH{KOIl>
z@`ks6IPUGAjC=d%;@<w1xVL{j?(N?e-o7g@&)5WteuDF{Dv+Kcd^qfmGtN~fz8J;1
z7JunM3TXxdhMP_v0JY(>C*3u(HhuK-UO?U*_29DyCGa2?S+Rr#C;ESJ8Q(?be#eFE
zF4;0{KFr9H?>`MWPA;WC_hpebum&9QWnE`r8y>js^z%EunT4Tuw|y9L?86go9czwV
zctD*VdI6>-$b35uTlt-i70%iSpsm-ry-qoot*2H^XWfYRp}A`(a&&7rQ42vL+)91R
z!6NGAH3ovA>{q6xA%_Q)n9A_5*Zjz%$0N;Y8~j@nW9giuo4~;A6l!K+x<jUrV+f>l
z21kG-_9xO^XPUXue~_LG($){cvmi#@=g^xm$wz@s{{R}*KYQNrZpY1^8L!ZsFn@IR
zpo{tQdM&Eok6nlUxbTC%9!-wHkcU5<Gv<7c+k0=5U#$(l8RR#L{I<Z!#5ur^nfrT@
z&S^K?KzbpR{r}E@JH#i3<%(PFYuO!GCjOEg!V%MY^YI!)Xw!&jX`q(%iqM26>_Txz
z6E0sJH(~Es1bqJNgqNW$VYk9+bG6UKm-oE`^_7_W$61;0TFJuN_tW}?a5k;)hgWlm
zQxG&rLwxW#7)7T7;ov_(f&TfkjGx=@XS_RMoJVUcz)S7SXi(L}D}|B~U-kU|JreAo
zVj~1}uWioDQEF={b6_*s2meNe;0+n#V#UKyu<!}OZ_G(YN&^93`wr3w+@X6Hsd8Wq
zIK+p>`_O6NQ^a~4n*sV!!+8vb^Ei)OH60iF{n4bV2jVftmSvxdAVb&QN04!3U1cSs
zjQ7<lH4)!JM7)use5_WDgIVtAre^4PAEa|3zRB8qikh%aU3N@t;qG3Cb~AB^tc&3k
z*)1=;9a4erwvTZ7ie|kPIE`(+Qp6KgixM^}uB)AICJlk#nuRH;HsO>C=e`gTmfe=`
z-<Y6R!Qr?MZ*=BYU7hId?ZMZYo&0s7nx*^R&ey(cjo3B`IyC9~=(yn0hu5*L?;Kc~
z`C2tWkKI6LvXTaMVMl}d%QMFp2!pyC1^NSjMZ99<Pq)Ssu*f>Vnsf}#|I5{;gC!Z0
zRhSIFN>5|pQqw+JyD%ARx^kutK&_55brYtCSZw&3yX;9X!YsYF^6J#-;kl-Z6>}9H
z_7!B4j-SLRcnAghpr@g*MbzZg9W^-ty6RjYG&vFll-=d7<yz*^Vy0sN&x`5KU&8LW
z-Cv74GUAn%$GyM+vOo0#W$){*ZSKnL>fa&4rSLeE#QQ|{Yda&a!uaYL3F_lA5XGWM
z+{^T-&Nu&~?GUM;YY~s~z~EKr?QkQK3iwhG9`Gf&ukhgC=knd5qGGbNnYjX7;nI=Z
zMzo%tOre~Cy`(;Nj<H{7?6}UzT&&DN$R=VwW2e4}O9<bsx?^lup(>$CC9=s9^a6BZ
z;^fv4QU+Kr!Yv%36p}QWB+%R&+_#j_t~INiF5KwrpHa%L1crhFv+)IshG+N&O@*LA
z<Zz}z(`eB|Et)@p1`5En8iWn8+dzm8imr(MiSz?IiPuB2lScU3Ft$*{3hW!+uhFS{
zko|956^Fo*=r`i)>H6o=jP*IEtARzO-pCv2&c875hqv%&KO`!gALe&gjH8zup-0g*
zu0{xQKgYHh`A0l9x@$?6x%oIky&q(0H$LWZFgW#Va8pG;^(m}cXss9bU1XSm)~nsM
z2cVuXDR5!%RE$e~J*mIIX=S|ZJ)`V2t87zy*{4Psv*t#<SK7<sFEvUv%S5C1qFj!*
zJ0&_Gt)7o@scR);Toq24hExhUskjsJmnRW>HR5HkyS;zZmp_i-8-AL1APnLMP#d=}
z2AQqtuOcqT!9IFw#C(W&V1K~_@y+B!F!pAcFO{Z~F*<Mus<D!Bz07UC=Q@6J9=XsW
zT+TeTOla)KmwnSG3B2wB`wo6E8CZ<_$j8JeI0Jq#;^4Fm&7Y8ldr}SUcQxF#53<+X
zW!C3>FQU;@RGU00yA2!71sB0wW;_G?at7W46TZ^r6VMxmi7qPjZvjMGYZ%%i8fMed
zY+uHfm#wFmIIo^E8fWmsDS$6kG>Npl{s<HeTglh<dIz~{w}4%{bRFcn>(ThUwbmzp
z_NKqm_H)B83ZY<KkrAd)dOwI1n}q?^yFG!G6ItO}$_`T&UPG3CEGDbFmP}aMferdL
z1f`sB@_mm2Z9PvI^0ki(u(jqvn0D71vCA%~mBxavh0uq<dT<|%x4Sd&h=eb0PSlF1
zQLU;-#IeFD?%MCsxa!|`kO{#5<ZGMbnJZP>$B}c7=YiiHe?~|ERl-2`=vQD$P0rjN
zj85{MsfO-agM3PXc2w1NBGaU&t%xVr@iNHJgiRQc_%VaC(|rm3YmByazJd9h^HY(c
zAFAQiraPumxn~$CC#N(_P&&`n`Px3C^m`7XD3$iNmDyQ>!wI#ttVZ|~%s6zRO~8V@
z<NBqxzi$J&Wj-=r`ve(E#G+JjXT9D#iU$I|iLlY=Umz+HU>LgioJ*c=n(3{UMVy4~
zNvA6$H=#x+m9*!ZgS%^gEI}rO6AYo>4t@VB>ZN!J8dGs$##p#;KOdRKF#G7yj)^?q
z*LpKl1KA!xbG7t@lSKv!H+=pGE5?PJ90Z+z^1uvKT*7qM9$^bct`fI_glWJKFgsSF
zMWX>+vu<a9o59|vhQKljdN64k+Gz>|jWgH-8i$IWdKyxD7jO{71mK0K2^4%dG!@Y-
zC4GfG*Tl)O53y{;?LyxNPO((5G1gT!8hah(c!RgNc12x#w4aT6WvLsMf9xmBz95F2
zt{3MD?piixky?#{bQ?(J)dbUX!Z_Z({H6XT)PdN?1vUBzSRHR+{J=pB_4?weG_0fe
z{xRYFFy!UWQnxr{$BJ_X`?v_q^h6xFA|J^2nPhI~OKvaq!tJa;QKX+mw00SYpe=qS
zvW6ny7y~ai{W~7RXh4aaZIWh2C+PKeQU-h*k6(Ny4cLa?I-XY5a8Kny5^Fo~O0xl!
z8GpwCH%oYxJPT(*71J2U?+hmw!GcBfa<18semgS-{AOPcB;eP~4)JSdhwzPvQJWRz
z5WXD7Prkj!>HiJ2P<&C8v4!S{Jjpw#%w*SZg;@I2cpD<VV*eu0h7NQJ`yPH73y)A#
zxRR!Y*PODDWCj6Gq76;fE+Uttba1*6oC>lwdHaWFQF0e(BHVxpLX2<~HoYJl#s;I<
zTZX>@Posn4>W66XQ87gwr+}#Aw~T!A;V>9Awi^k)0{rC@X=s6~U2AhS-cYj>a4bWZ
zZVuEjwLul%Mg&Erp^D7r*a1-t`@#rNh3fmde_w)n;tuLEddN938haTe`qqa#T4enF
zyN8W!4PM*k!MkF#ZE#U4{!jr71#5!71MXDlyV2W+9u94oX&@ZR#pjPdJB4z42Oy&n
zj#62P7|uNHd)$(U^oOwZyMcttCL=LCc~a|}g`7RH3HbU%Ey=|MLX8fz_Z>1;sdoMF
z+ZI@$M85A=Tvpg7j>Na>Gall!!F%&Bfm^uyaY}Nj;TFIXwjB4MI$DZkn$qa+Vdp$?
za(j0gC&Xtz={(x^#=2?IL;7F8hXSSbprbrO7`#Db19pYYXob7N|JQF|R?s2%P3&jH
zPMRqI<Q$PFz{RxqUa$R4%=(j$7<yTRmw(7_$<lWCR0J^;(i}?!csXzm+3I7|-o;&L
z&vi4jccrDhYGl{2GkHN@_+VR`sX5YEnzLx3xpjE+csw7Y$@aE^HyYpxRSkb<<G}qe
zHSOEnkPG2J6I$X_ZPJIq-HLds(R+5D_D9YdPy47DMi>y(?$9Wq5nOT@iN4(VDEl&D
z!Z^ba!#R-7aOsmlZkl8hHpG)Bi9a^cT4ULBj;K2trt|$cUiC>3b)o&p^{Csrt`G}F
zY#i;ETzTf;I-d2r-?g<}ZxND3oY3TB%J3`*5jk|Ur*`}P5cVCPgFU7B$NlD`e`X)?
z-nVa(4J)4@%ocuaHkykFNBdPJykiS8ViQqWyatnhmcuf45?X_1RluP2GNk$+=3g~-
z6GyST@b+pS7~c2rXCHlp@`>5lNxmTEyOaYV<jbLaU5Q6JOFWAn;_-d?v|2m)gnQ7o
z>gPXTO6QcMi`)A|Tlt=%e8Pr>d^N}dbtxa|Ecq;Y$oJlX<Kz?XJ8!rD+)n;B5B_!l
z;v++s;`_ht62s7;&(*7_PvK|ZK*O@19cStiZ689W1%7s|<Y!54`B|Cve8_3oy`BBd
z;Kbyb+larL&@K_>=_BOn%KqM`{%$s9(x*eBuI-P6mIAE`=tR{wVpd4w+ev?2tyg{8
zW&LmK)pWiM#n5AGCq3R~$_x=+!oH!?dPQ<ek239Nt;dbG-Fnq7V`qJCddO}*Cl^DX
zm8NWZ3MA`VpCq*OX;naHvW0;1d^uj9V)<`h{r6jQN8ER7AA7o8&hI`#USW^QEgkK#
z+LRSd-~1P$$G0SVB)O$Wnf8(W|Cc>_?e(|vK|B4OOa1-Dlu2)X+D?BYwDf0HKqr2S
z{U7$&)qLKh{nz=t;{nSKv(c_RpZ{UXil+NR+D`MC<d*(q+Up_a|1qEMF=aZ=U#mi%
zuKe{R>Tj(nlV1IljXxxvr9O)ueTeAC&5z^l@3{DL<$b2CUHZdE@h*}0Jie`y{@yiZ
zMcbcaW7SE2B)9Y@)1D4F<NE6)pE14&j^U`W;?9!x?>LIV{ucT98nnu|Z(=TP5n_Ul
zPftbyK83*<V-wtP#Z}r|?HB<UBpYt^59jl^=7Y>ePvdp2JAC<wb!M3nTHOEN&;AZI
z)_aE6IO7^0z7Ksd7XAqH)M7;i?{APM0t;8`^ZNTMv1bLT8FjOUXwQgp<yxnIZS~*A
ze|=%u^l|o+EaV#&%1ep|-LIIV68XuLtPtND#$8^$0OBG3o@Dm05d}$N|IJF44Rx&N
z#-Ae7E4~slQJn8}h$r96#dkQhZN~T@Ox!94fYEQEz64V9<rHEW!?$|8SEwWKr%}9@
z!Hr#aAJsZ)9R4E5M1*`|bFYV8rbmnLn@FZsA7RQ1T4f+At%ew%LWGJju$Yc3p{$GB
z<<|@SQq#jbF!|S)%pZ5quNkkLZdpVZ@yhBd3fk5D+ytFPPBZ1y4`SceWxPT<OScw1
zlzKKq`d{Lyud2)$*@b+`w(@;W`TAS(723&1I!iu_9`Y^u;(wFxP0PD=A>XWf?ezC6
z<;%3>TZ6P#m--`}C7(qP`99nCzsdJi=)dT1Q^-!f)ESU3$C59_PCn9E@>%qd?~3E)
zgMY(rpZkB0wuSd4e{*ZdP+=3h(b$!3MGAo4ELoqvA}%%GypinfP3!Lv4v6!T>|`PT
zVEQL+n+iD#u5*v)oH9JkpUfUWA`f?V^iQvn#&k`rV>xD-{I1W%tnU~P{;%>6Uj9GH
zuiiubTk<bDPJZTBO;2zy_SeVD&pMX;GWpuQo#pQ^|J(O_Ny|(NInKYX)+k?B^M4TS
zW3DNkeh~YJF720emVH?C7>%=qcpdgroz}mu;_X^2EdOP{a&#r-74hNKXjqPKc%k0Z
z<Y-9SX?-TSrAC={L5sCMwc9W36vy)TyP;d+MvSBat_f=2<>I&&ZwmFK7v{o_d+L4e
zj?2rx4BFGyj&p?ES*9J=U`)Yix?#f)n35OL*&{C+w{ZOqWY}O3gIoW`R`I7(WmD)-
zYobxhuzCI2J;E}MU(bwu+&1)%^U++-Fj;k1C7Uu<v&+=14Ga6bH|Ac{h8#}kRY{sJ
z8<Uch)=v@K82J(`d=po2e1yFlSrYhy@FrUQ4Mty|G5ZP&d6Ibu&ezAq0vQwX){<HZ
zCFBb4e1=s{YX5(*r<Lf}f3c_4cT-+rPeq;ViH8iPJsm<)s*^pD+_EQ`_IwE0b-d@%
z;_*Z-l6ug80qz$vpflo$$ddLE=-DZrNDyL<qWKtV9S5}@greeJaI+-qRgjfhJ$~d+
z$#jaWD=As7Kl4*r{<uFxGE&@sM}Dn9dk=C9@Gw`{A!6m%*>1lRjq{cJ_;Qeua<jfr
z_d7-+Ut5P@P5kLG|Iz-=z&(iJctEj=;Vf)Cg|8+!&G{yhoyPs>kv*J&tt|9s{}#Yd
zIRjUqtJFg{Wftc@%Es~K%)FEw*=wpncVnYD8SlPjA8{@ckAaOpZ3M-{zZxgr#MN$3
zYAw%0@Uzr|KNjsj`rE=23;2hWZUzbh+(`jE9583#Qy~++TeI72(vl*)#55%REhMsT
zn&v^ch%YuZTi;79$U3yNXF(SJsBE*dYO=xn95VL~M+k>d);$(EMsdx0xY@~wZZ@Qs
zfGY<WUw`k1%6i^ict@%GdPcg1?y)#RLY;B$3BoubW_wMHkG8w54P_!KrUES@OLZWc
zArY}NmYG|f1<@!FiBtA={dM*?*xAs;g|XmG@zmUL2BR*H8w^sj9Sr6>y%&~P1lMl7
z*(Ah2)Y0EN4=09Yo~(V&6*$CEa2VuV9_2t7mb1aKoK_%dIr~`X&u&}}-8ut%1Qb8r
zgOZ^!{H-57{4aDdaw05A%yzvyvH@_XlUs9D|1bF4SU67dg}~)5gUh#ZE|Fi&0l^N!
zn3Ul^TO;3qp!=q22<JN*pl?zq<1_9l__JMP?wy4QAHzS6X<~*uW!C76x0j2=;Vs~7
zjDG90=DD=CqxH}F6?b4uCL(~CXw+THju}~Gt9KZ<yLa+nlAgd_IL=+mHgIqv=vZ%f
z#A*w~lR%785XX61U2N|^$Swhyk&lo23#^)4KN<dEuIe{0!u^l$%pClB{m@c&!dPw2
zKyNx71I7F0#(hA%Qf)YtuPmc}rih9E9>=RM#w)HSv9Oq)TE%W+(oL-|8~Ioab_&Kz
zoY@GCu10SoY1UY8`4D40S^U{^qnGYla<>egt(csz-9dx@Z}Ci5`5F~o{lBa~11i}s
zvHs|$@fd?2xkPHa{NCf%ACg;g%Cs+hBKvQQfOQ@R`J{Xtv%`<Wbr{mw<l|N@wd6~}
zNxvL#jh5uwjy(w0M>!uya!Wp$wtENp;`V|-OWH3`k>V7GnGqw-s>H$~B>nGk){Z5V
z*NV5(AcPrB8S%$hN$S3knp3Icet~r?!DVv3f4swe4Enp{<=3{w#TR)UL;CF<r9U05
zcHZsqycPM+j`Ay|o#nq-l7A|8rb7NT@_vVPEcs>fs*gI$Z?j)mZ&}50`-Me!QNLa7
z7e+yCk=sn^^eD0;UG5i1XYCg(diaoUF&B@YUtQ@pzMbUi61R^2@O_eX*z33U&JOnB
zI!?cpW)C3Iuh@$muV2=&^edAO6djQB;RtKZSF@RWosWb+TnB#`KLI%vEwsBo^V~E=
z$a!&|wihcDPT#JF)(iu_&lFI<(GX9njC8oTj6iDKhV4`VJ-X)u_y+6mk9J<KyYLSS
z{}2B#>kjA>UpDq$q%U~~VaSB=eA>ZN5YljCLI%@?zKl&job&7YSkR6wG=ouAu{6r6
zCjIX1|25v{Jd^Ji(4(zfU`pI&ez$fp$6xqc%~WaJ-~L@{I1z$&iuXxw2`SSKgOGOd
zen<IWu6pwA|5d&|?ee|YNxrp`d^cm)*-1W<Tk^@YkGwC-m#@WNQ*ns?_T2()gGams
zfG<~*g0n#S|3}@o$46CN`=0<oRCJ<(#aA6{QWJ$hP%I#U49Vb(<YgW_l{6$163EMW
z@KD5HlFB&7(qHY>wzj3OTibfo-ddW$Ited<J}jcPDy`!C#Q3WCR^<2nuD#EhGa<D7
ze17-$$4x6|);W8xz4qE`uf6u#YwyjFL~b`lu=6-XuRN65h!?J|&1r`5$ZnJsPshND
z84Y$4V6$ZRRzQjUe9z-Qu;9)elnjZKbn31}zPguRJM*WmM?1K>+JKE6f)>={o`uIA
z%4|m|2-Aa&8ZThytWrXpHqtWBR(4CLoGP|DugfN(u<+HP3$E@j5G8hd<E`ZghAUOs
zS+UzQzbg1~AlvVYx#9G+B3Pwk&4br7vY`lu`dC-@bQsl$m-+D)^t;#C2s9xQ?^^6P
zzx78IuZ0*S&ifFW`vL3C5K-B$B|(|!Y;U%LQf}Zfzf{i9&>fx+cHF#psn|19*Gc_<
zjO+|%dOH4R7K9><#HV&a8@dn*2x5*6jKe<-TZ*Im)DgppfsuHD{f(+VxXOBL-a&+_
zsVbSHoVDRW-k2#I#KSxfAB4+nOPsz0E+gPT*zBngM$^ihny|TzS}giA&Bbdxy`+$z
zGg$9bN|9_TlBN2elm4enEMqGx<GAr8doB1d?09l=1N6ulcC)v4o?tv-I(s~^(}SY#
zKX%-Ba)R-$tIgKNL)T9?uOWTItw&!(`gkCPC@b>-CM(0QpE99Mpq&8(9{tn5IUc{<
z?ubXi*?tzsq{Wi)NV7@N6q}+sq-eN!B&M?oveSd0W)PGTkCe1;#Gc1|P8swQ%x^S<
zW%P!*l~Ip*n)xS4mju@A43960eu*{?X1I<{7&{d=gS>*?KaF*e(3+v4L1LsYVnqt<
zibUYPT)b3f(Stv;%yg!))t#LdmG~KYr!{{N`nA5pmMv`FhgHemVm`i_N4LHTvWsF<
zt(l2=DryzG%oE*%+jklJbsJ9dz{wtT?9E^(T06RmFdZ5yQEm~4LJz{Xv2;mM6o%36
z2}M!UQE80Hm}DViwdb0={pfT`p*eHEhtZIhj~b6Zq`h7e#kL@Z%|)Lmj_xmx;<5ln
zHN8d89Zw!%fOCEb{6@dR@r}ywSR8%FQ84Zo8(f9KW=0KGraJQzA<9i1k$Z8-NM-ym
zXrd=3TM@L<QJs<E41{6)b8CLuA-S&+&keH2?<ObQR97n;`TlS-_S}54oLYt0!Lq#l
zmD=-1KmQDMy&vbXl>gtu2tb{CiHx5oSi2~kIRA=Nj`s9KHGlSyKir~Q9DN-uB7fkZ
zg>#A?+H%dLx6R(5?mP3$zc(pvl!F@&2FZ;GH5RJFwjHx7g&j9Js`Z|D=9EWm$Qnfl
zSite@tAY<#_QENa${$>rY}+%x1fs!B@YQ&FSsdFUZ+~?PgPi65ZU2cF<V3m+shswQ
z<`4YW4*7Y}mY+X4`SZN_GzKZ|cYic|wfVb7#h^u~(ATdggKkDPsn1l9i@GgVvhq!<
zPH1X4QmPQ@iH|ePKVag39)Rf=dx29JEjgMYXcrH|r#md1kc>{?8Gz}@W0-K+6$`ia
z9UNb@XOW1OdH+7T!G;qjC+f{eW%;X9`kUgH?ry`f3tjFP;E>{0sd>jr#VxpW@@w0{
zEmzk~A`FUSUrpiI&#l@G;n=t7FFgUrC|6^MI6NG`eqvz+zbb)cAY${2MO*wjzF>=A
z8~2`wUryAEk;>*5dJFvtYJa?swjV-!*$2(*TXZ*@Wv*#ZeDQ#Me;diKXaCv)qC|SM
zx!vcW|C^Y;EnSlATFE%zF@oS~mB*oVcxSRTOQ=Tf!T;k31!7TF{hh_!{wU%n#hIma
zj-_s#$QqI6->C1eq}w2XZI=19K(f9|TJ8Gw4yo@`4vK#ar|0nXogfH~uP<+qu<9E?
z?v(nnD678CV(!^9e0`nB)*;Oa>l^*6YTZIKsRTsNGViWewJk*JuErT522K)2>mD9b
zTi$SH(fb=rc~WX?l?N2rg5vo4zUs&yLH@xlj`n3?R(+iX-M4%A`Z|$qMjESp>R;@k
zfno4htZ#^QFvk2X#!Nf-JKD?|N_dROZqnGgo;Hfy+aO-q$1$PDDOH%tTT*Pt!!o5s
zt(^g#_VZn&B*mY|^ZDL`+CFN&z)mC~u%{@5n88pVe6*SbW!rv%D3B|iJQ^mwGDW?h
zMQ5@c0!(JnU?&6(H-H9*Kfo&gFCZcMdt97_JEmn@&8SSr+z>+?vbItE359OX3gFpK
z1{z%nMr6<w(etj(`~oN4@vS!1<1DIyu?HG|@Ym)VNSH-86IygTlkVI}OBI5r`K5G`
zdFl#_rm;5Hie!B5UzN(YZ8ilLSrnM3q5L6yV=}9JJ0VD&H+=brzIvka3x<^cN4xx~
zcKJPUT?{Fo$*l72geZUKj^XMLGtpdZ3(grDSF(K}KfO(<e0bTWV~$Nn`tfuynMH@4
z5OmBU9jX2#^eM4C;%*Lxo8DM=G9K9Y_#mG+Btd4xJQ2{HhGT1Ci*sFQf^RPl)4~h>
z$!~fW_#3N?&TG!QG8=&h>w4X99`XIs*Ymr~M&yd$jHJcU`b@X=64~V?U{_Z?lnFMy
z!`I>Jnt+)rJRaO&vm;)BY@S~4YV;wNogmDE=`X9{Oa`Z1or#>j*kwMRvNf8&L2x$q
zBaSKNQAi%S>t%3)rBB2l=2w5`-Z2eP?419dR4Rsxm-mk9xkXM;I5_cubxPCD9j{xb
zH0|{DEE*BrflYLu7(2F$E1~oGk>=It3#$BZ(1SA${L!y?IzPWK@+~ywn=2>M=2!x<
zWQxK?vUmyWB9rqOs7v1$0iu~M3lojv9s21g2?%s`??6JhO4vfqc|)>2aZ7=k@z+5k
zG(YK<&10v5RlZoB@FWetLDvZ1-5|>i?(BAlZ}P(@2L=qD;d$5%BKRApPBs)p5v&M?
zplSYXhVa;`PmEnjhRm$PB6932QuwVv?&(>WR#NxD)zR>K?#@r#k=wzTCmVz@Joaxm
z#$4@S%(<9C4ZH}~h-IJNt@7T7dL{Gb*i60Dk@q>wEC&7)d0{;J>*xo=0nC4NBZXnU
zh;2UD)R+Tm<|~X1peDY`MzqL*=vzR<P)~A3FG(I|LUB8BYe~7ZBa=|r8R~fEb~fk+
zo>+==m$^3^QebTFLN@cuSF&u+63<dxRtoa+kKvQ6`!4(oa(){S=KKPPXxj_s_#MdS
zsbYoC7a68`o{^|S4wUr)ru8^eZ{Xph=<C9#UJ97HDrVqscx%Z&&@Wc#F9dqZBknPa
zkF+bDg=|uw`6J+z3vevHyH&nkq=4>^{}OqG97V}WycVgp1bPMX<BrX26mHI6j!_>3
zkMr~n(@^D{9Av0KfNb-&-(mS%rA_t}TOd-?E=SsHhNiW9RchL4NQ<KhdP%pZ3Yjuh
zCnVuQvm|#bGG>?~k$jOtJq&kJQUCQ}NElI~erzXcAZeQ<V!M97Kw|dT37+2JWi5&X
zXv8kir3GL=aGKMWVw?YN{Nkd7s|el(Y-HB)r0+wa!%C`zF3*5SIt+oX%rSTY5$QyB
z=uPDcf;+;Tb}i`O!548B!?Wdf<-KX%Cu+4nyw;PzT;<rHSI_H<dwgf{OgV1xmK&TC
z5FccF4XAt3;o;WgR^NQQg<!k9fSxyNG_p%N)}56b`5n&nAJ=s-{7T0sxseAt){QqJ
zKWD0$DpllJT3UQ@_jTmZ?Lv9dWHBR)pa@w#OA*rE!Z9X~kkIgBp4c3-^}mr5U1qz1
zQxrgMxi@xtJfj(AAgS%^z`k(MI|lSF_V4u?gqIH9Y5r^(J4gqT;GV!K;ZsFrsD9Le
zFf?2a3}@4FUvFV;YinEB-Tr9$*DjjK+NWQKr>{2>Tp4hO)`#$-N?wEmE$(1jTNp1E
z$P0IUQ!r2$Zo`Xtc+neNZx{{H^f~;vcQok`Co<Yo-N%zKjFG_qDH?Pus7h(jyYT|G
zco%F#^KJeFAhyh1#^#h$T+A8Z2h2WK7k20Z$&0ubx{viYe*hU^78PZI?YbktZr9g3
z_^op>zpXn7UiA{%u{a*4z%0ef*bH8>%kwwLS^B{jgQ4K;*i2!wX6-2}NYsDTA{jXg
zaPd;96I+rb+bxMJjRB%9x8k8KP{aI^l<$ge0P!q*m-+Z2tMI!XOcuV*DtvI0B`^Ds
z5Y>u$kaeIC|7iL<%sXrpRSpz0EEEG*BC+}NC64}v?vMSXOVPTxxrqB+a6Ta*UK=-d
z;KHPwkQYcf_Nz!4z6h%jcLS+XDD9|L-?A2T*&6sNiBOIpVFKD`_?objfMwtLt<yg1
z?YMA-;n*LHiwPQm3UZJQ$xo4k33!40=Po3}`ojTq;KUSQM_)F_qfUs^a&_H_h6kPX
zHLOwBS2)7;+mw#NN1+sGehqIc?GIvg*dGRRaH$4wxo>$3H;`wr^2es{IAbDCr@aZ(
zd3xLMZ=4sqD<e%^@s2yF%-gG>8hN)L&ac~QX&hPq!HYkWO4($FesSg!?(M!DB$+3H
z&)9;_(=O0J5bI|W=UAkgtDYyJr@gdzA~tg)0X`(ov%ijg4#!Kd_&zeyJPN52CC8|D
zU+jYaLN2P9pF%L$MY>N0e%Y$-=`~tWhX+uR?FMn?*f@REDzW_QnHOXE7<18Q$lae7
znS!n0%kZ{5z8l#P7@8rc-YHaxTnho%kPZ|}mza;;Z;j8wN37B)R<6mwmhWva1h$~9
zdas+vw)#1mQdWwEu3Jdg2-4-U(3%FO!2>?zQuEFZm5)Y5GT*oDeB-TrAm`C0<UAcY
z<74<8?7~R^)^~F;`ud~ko35IOLpt{%k$Edb47;`+0_>EWXCA^xS?!6FPTYDAgw`~~
zCYADqR157?B+E+WB&-LiP@Cj@1@jbo)noZb7EW}Ee-S6R=#{Rn?@;7plXqRqUixM@
z*ZdgLg9DzWDQNNGVEl!ULg4rT(*V2}dJy1Npu}|o=H^dC7{cc<NR5-^QR;yHdh}fG
z))zekkw<H{Ad4VIV}k%s?>nf7w0`0mn|~9aYp_rHSInnVOhq!umzZlO`^N(qUvD=r
z0d2|pN^PUBIy$=4)U5xQI*v;*`FAfv!-VG+Ljl8w&+?0AQaIR%OD*i+_zRf*52;Z)
zYqZP!Z55{Ptbr%a{GMJSuym6X#pe*)ByGZn*yu}7a_A@V&#L+4!z&xqACwiBkYm$t
zteyxHGkqN%jtX_jaFEwu)KiKZIx-f-M(smjA(o+h9}e>09Uslbb<7x=9{1(o0?`XN
z=|#1S!O@V6B3ulBBmH)KJhuopNg#(L&G|i2M_%f=YSi|zNa;zG<6o@1jP<$Z?ZotS
ztS9Hup7PH-&2#{>d0;|G&L=$5y8xQ|6r{!Rns~eaUBBy+otTfl>sp?ECOXo)xS03|
zPM>gPe{{rk$v(LO8TUzk?8?n|;f#<qBcTPlaWfw<xV-ziKR~!S&Q<1F&%_qpx1gtZ
zAHqsM=cx?)#E$mI<j4zuXa5*q&O7?FhUGh?Af9s(?e8q=D!@&0J0efU!kI<9`MSX0
z;~nGgDM2{<D}!T|T@r%>zkk%s_g(Ye@*(Xz5a%<-;xyIAJ-w%*A8tPz|H#Ok*Z(k?
zVHQHyQcuLD51fj#nkVz!T*yJ^U>a@<iA{fkZ^;TX2XA2ooFepkWA)vJxBKPjE?4)9
z_=-}~z}Rt-SFw1&ng7(N$w#)7!tru?)W-jOWfFhL#=jqL*#unV$RM9!49~{JsN)|*
zh%xHnM@ljVxVIZ^x*B|et#W9X9Wsw1!(7?>aF6PNBd*1GvZ0n9#DDwE#Z>yS>1lR}
zi%=rRHf@He?(OP+3+;xnjk0Q)ln6uU{OBxK*FJoL-EuoV6=TEQBWK|UPG#wS5buRA
zp3XOMW948Nmw1??V&%o%2g7fmK4_h{v1r+xIiu4Y3AT&_mx|Di8KnOs&95TY14o2s
z@4C*|kU4=_<g<Wo)xN@@=wYyC9DW`GTc(|Y`(&f<Y`@rQS?1|4N&6@d=Y1?G%A5e+
z6lJ=>n5U1p&bSr}sO1>sAid3*W4qrh>S;N)@d9a|fs@hFm!LwdgL!2IbbIH~W06-_
zB$}Z<b1Y<i55)YiD>rN0orV!wg&!{dSdZ`d>G<W!-H<tU&AAW^TnZDL{vSliqr}WN
zuA!I}P|h~-B_#@1hnY{}ebGoTV&=7(GhDYkhFM|sX$W^$!N3_9f>CKb--%84GaqO1
z<`0l*@HcAy8JnKR_ae8q^8NR4^Vq<P7>Rk<A$vWZvrocPqS-x(BK#aU1K(Ba4J_wK
z_DI=~@rC0rnEO=uM8kZim|~Lt0)Eq=8cW0N*kRQkV#LWfJLHa(Y)%-{f1~q^ICcOx
zlP;=&U@^j8^j0)|C9%)LtcFu%gy6>uAl7Qs4M3p!rlLvB74QnmyfAr9eIHNf*_)n?
z>^xmYD?VIok1}_Ba*{9S_tEiZ5%(G}1P<{XuFdrr2DU#@vLa*0#}_892l5YJ7xa1k
zJ3bkWJIbY0PtLyh-5{YTntq@R*<Zu*2$*m$e$&uBC+}b!ZE|yB-D|bDKM#=?u&%pz
z0vQtBs1mulUIr}5l*zYw3e2thb=q8}?aW_@w6J8#0mV+c<RqN4xZkyT1)=mw_ynw7
zZ=hbT2lj36eD1tL+@1b<bl;ATF2s`6c55)%aqP^Ty}mje{ViG_mDd_S?XTt(ginC^
zZj!XOV+&AieXW2$H{&P&)NFTC{`S&|#(O9?&VLf?@sF$Iw4dXp;>|%{-F{rFFw)$(
zL!Va)dvqs1htM*(0t^yHbmm5M7EYkP3=C}Gu`;H^-u@{>haXPk2Q+fFZAG}c&*8hy
z-800F*qffKY3U^`0|pq){(@n0B0fMimY_&AnEwh1lx&<0r#1LF8Y$o=dJvKf=$#Tm
zU0(!-*lB-E7w$%Xgm1*RH+>u4WL%6o^Php+^m~-E1NpQ}#65Olzd&K;{WT&8cOeCB
ztM2nvNq0y|-7^3UJRpc*Gf*PqjkX}STExQgxC;~PfnTDFH*AUb+9_^yq=+!Z6F_BN
z3eGw93&qmsqp-@J^0esq*(4)2ekLD1=kGKNO33xw$TytypX?^SrVk3{xg6a?cMe|~
zF2*`*8D=d>8^*F%a6PPSmca!(*!$4=d0O~f=+-~|@sEG}@I^UmYsc%OJkh7R4;JA7
z-{R=uWN98uvOh#P!(ngETeMZ6HuqC?g0sIZ#_3Vf7ZN91HC2S{?A`jcG>kN#$ir23
zAeO!aDQ6yVU4@?&_(?6)bNjq4$d`ApxA#=&<_|wmUDfr#V?{l)amT_taTBbh(%;9y
zV+?JTy+SI+4cHyk92?E^vAp70wk+>Z_nUjuKU^@8Vr$%-F<7Sk8_>lVwLA#J5Z!ca
z{2<am*}WEbw_7^tbTSwlaI}yl$Hsv~t*C0KR%n7BB4_lic*e5@xWNOZn1)}ZrwQ+=
zMph>_w?ePo29>KOd9JRvp`D6i<Li)u_qbxvyh783ZhQ^i7De9`s|9m3`qF)|u?KLH
z<ZZ-rOF2f6E2m$KRKdqNhpR<#R7_El8$0bxd|1#k`zOA%W8H5S$4=hZ?w|Sb#?`U(
ze_Rc`J>v>WW<I|0+FnxXg?V$b*6Y!CJTz%y<I+4c&6`g5&HQBJ$;C4d;&{6;H#5Xw
z%&~CVN758=A2_6@NmSU7^9Rr^)y4Iv-6@4!cg$b6s|dF>T$#CJW45>Z&^m-znQ4PC
zbM*MueQ+I?>)z>nJ&kEl%CVc@@Zgq(uOA^@(P#4x`FFfHGHO0<dS<@qi(S6M)$;)A
z=dau2%^Ad%#y#V9_|b-W{TAOwPJ$<}Kg~aLSL6uAkOHztOo1_;YN2}}m?3gf8XI*+
z;&Nb%Z$(X%W_bfWK6cup{)uqc(7>TSE_OYTnOTzdnSbURuG>Gw3n-iKA_Y(9ANwAd
zj#ZcY<aNp>Eg7fL3!0ELz6BiGJ_=<eUO`GNN#;hBHc*akZ}X!l`W&)sL>6!Knc|*t
z-1%>Kavql)GO|1jBrw9T0Cnv0e<Y}RkA-)PiMOK)m_y+1#Z2>Jpv6v}*lDK&4};Jq
z6yX%RadPvH=2P5#J<=ac%t!u#3!$2<_oglOGw{hG^r___H2oMy?DQ9WqL+Wc8j+U7
zEGwaTKaznt8<D~Y&lXAt)b*Kf_vgJi5J63WU@<<ci*JP?e*+GyoEDZd7vz|~epgUk
zMpUk@A0p@A1F$!u$9VZf?6>!Vd|#|@D;@(gJ|+3uUaHG~{FobatwUGAh44lB;#{xx
z#TKpe;YiKBSFOu<z5rw6tsEOWFih?}iN+E>j4@uTh4RdQ1{i$N@vrj{yQ@P!-pa?}
z=a4Zve!u!aBN}M<;2%Eps}EZV?Y)%`{^7&d@xd`y<hZ2bPd}1n;eTKm{Rwn2_>=NS
zmXL)r@hc8}2o8KN4RV?tw8p}zz}WYd5ZfH8NfxeoqSe4>u=T~>>^`U#DraYguQacC
zgQ_9I_`p>}$8`=_D{^(MBHnTv?>r0d;JqTh=EDonr{mj@3NePBUVe}JP%iFZN%*bA
zxW6v?rg`9D@q6?5iQVQ|^OX}}InJKO1>|s*1BJn`6$tNJW|f!Cs{#RU-0|j!;^_1<
zKpAiDn{40*D}^E~U7LUfsp>m$?r+dt?Dam>=x!)FFz8XFV01)$D=L%dClp`6e|yO$
z@fG#e3B%04Vj_U07z_=R*2OCSe<STGtb};trTmq)YNX2Psa^#ip)d$FNXRiW8qe2(
z2ZT-)zp1AJ8*4tsyc?%0+w62SleyzZ@C$jaf%gvUxMI<Gddc{N&2y;GdyuFC)rga5
zPt~dg*g=gn$fUeo{h-aNMmy4$gJdgh8hlbn3&L@#?K7*4Ri!GAljPaR;~f9Rp9JeH
zrY3<LNnw!B%-;b0y(R(^fVOk=*oU}(XVN1m+t~5?=;(o_gC-i%7af(E^OvSam9c>#
zc<|IM=A|CA`;1YM`E<UIoIV?Pc*dkZdbscR$R0c0jH2n$^5G}B8pw^Vvz2@4JdUw&
zFPUZmCNT!vu3?KfJO`gL$H9+n^%w3?`K%f@&ySdy|0FbA<(eR3VX$7CcPQ`8!7qs1
z_L0EOJ!$57S7Vr*`F`jM-k39T`hC=_dHt{}(fBuu{t~*(BSpuKrR~BLHnKaf-x52X
zZ!E;Lf*2vi{$kFvsZ=!L1}@kEo`qhl_f+@N$YfMOQ53h8e};2r5rh`~bM!fX^eLRj
z_BE(8?Y(+dbY*U3b=(xGfs9Gy*x>{>80#)>X2B`8)Nx7-PFZ;YVZ}JZ6PfI7GtL~9
zTgk8?=jnk>+ew-1nu-1ad%8^?iwRO@p(B(DDbP9AL3)i$TOH4UC{`*_`jLaCZ@@2t
zCUe^?QOQA>#OO1Z9kT7r7yp4{yc5O8_@PfNzdole4tc}{pLl_uF>emm`{-SV@zmD=
z<XrS)Q)0Krv#@{79cU2qKBU5_-mdQNB3CSZ|Hp2I@hd+%G@#5*aUrObVehb}7{Kwt
zl35w9qj6oQABAl1z)Nj{ac%E!SE158_xTkw?Lw%XZM!=^y4lrL4Gf;nmvLJDkCC34
zpJC<<X1*5x^nDK?viCq^4D#MhCb`W{GCP@sm{%ed6HExF62Jw7WkSH)W+&#tR_Szc
zt1TJn%ps*tvQV1m0Grr518I<XYn*SlQ!chr0{ffrY!5sQk+8;7T;w={-?xEQ^Xup%
zSQD#^?ttZRm6dI8dd){}E)ifp_yDY@^eTV@+{1x-Dze_PYnpB4GH*dq*yPco((O$@
z7rFR1umo>xdx&f(w@H;V`!p-(k<`gZYko8*NiX_D^m7DA=e-Fn@jEULS3mL~@>f1Q
z75@&N?!#VwfAnv@&OL}nhiQt7gkCe(!r(w3a3Kob1D#PE&D>*5T>(Km6#4VAUjBqs
z$bpfL`&4ka07A~tS+cPj%7CB@#8PBVU=>_lEnr8UTvD_eiVG45e_@x2Pl-dzVQK~<
z;N}a^l#petCc3&#WBNlxFop<{;~UAl*Gjn8)pa|*BABEv2n=%Z+mZhaA1aBhg;(`M
z^9T7HfI$ql>BG;z$Nc<CRxGmJH?ui&Oz78~iD&rWDrIaC%`V*CHYV>7^(t?3Ye(~9
zOit@O#LG#>_+x86LdwX?paG#YSm(JgNl5ovktO7N%^ZVLM3<Y1SrG53Vt-)&bJ0Yy
z;s+>)8^cYuqO92D;!R&MDgc2i#w><<Uj=@V$FlQ@CU$=z^5Y!%2}r3jPETfpsezV1
z9k~Z#`WF~x-An8<I7}67Ft7<?AtdJ=8rY8CxF-xq<n{$HI^n=$Uiw|!wj`$^gFZWj
zlf;ve!j?zghqiBq$LPd;XmFH`I@%A!N0RsT#L_RCBNNEcnCD=ojhl=6)+348ITIv7
z$d<ddWpsYh8kyg*4lC)?_oly<uWqgD{A7J(qP%oVZ{3^zB)+ioVa9ITJDs28g`bV3
zKY~xoSVHF~QzLr@e{Iu;dEmFv2yFDd>EG0-fxzm|)_kAB%PV~+n9rh7^9~l*!EODt
z|HJp=Zj`7FCEd4%9Kn4Fyfpe-{c;!r_O|97OxtDFqo+f{V(F{jb7M9cg4<u6R8iu3
z;C(UqJTffCF9JGk^?hJ2r=*}ah|K>1U!u>W=;&L1*8@lWJ+o(<7eI&mI<Z*<CU^Sb
z*_gdV1Nbk3&N}&VfWD}ALgYNGs8h$$NSv^sXVh$K1cK<4MBgsH6#0vz9~DP$%D_3$
z;b-y=CHZHb3T43o<HLi#k<}TV&7;QQzw;3RmsT9RDFfM%1uMnDzo`3%<9`7Ylt%pu
zO6(&~AhvtpVBDL&`iPrk7y~Ck7*`qC9Quz{7p)qJK`Cy|v4mE1yUw<}gw@;a9vCIP
zN9+Y_I|7=BF!zVb47PK_t)Cr>yzND(MJ?|dg&6@2fm<wQLZC&`_Y9tm_0e5v3^3py
zlv;*o=5rgr?5~@B4;&6JnOxEY%P?IYb&sS(3cw#B)y=p<(cbfeHXb~p%4Z~G>_Vu%
za4}1K6O*OEYzO}sQss+|?D68}@jbqtQCN%_wc8h)z#O=<VBHwFIwH^DM~3M}C6RRS
z35)~QxJt1zKb(ONxFE@F6=ct0g?`yU@GG=TX~Bz4iq*x*&(DJY2zT;!^`mzFm^Y&&
z7Jvxs^*#Q!I`zC^OWq+|T?za?Tv+RIZM*z@U(U0h8JCX>&xOI7W==*)xZr|^TF|lm
z;eq%^Y|l}^SB^ztjBYvjDXnV$1CE)+OZ~ADDN0%aynXz2+@K!ZS`zc((0FyEJ{!|4
z#L~4tb{#hGylw8Cj{2bf=li37A3~<woeL5N6FAxYRMdxm5P>mDW_Pi^9v(d5<HZwC
zKHRZ^>yPfW=y__@FvS$Q8=2+gnAAH^u_uhC!BmpL@Rqm4mt`JSiXekd_AKKa!^k(j
zN{z~JPuzHWH;Te_Q?ZeQ_b1zz-uof(DY%NlxhMqd2y!YaYVZkjgS1*Qznag!k4Dt-
zSN-61N*#Lf0>q94u?V}0!8{ug#z`rsxw>gY#ot-S{zfewKxO+TffGpm)Hk4{4h?2(
zfw*t_l*Wdui-DZJo`*6YL^_GKgzoz<2t1VRGmP5g`@9d3`Dth!tOo2^x06v_FQU;$
z7Q<M10i+}CO`gs<qa!~n?m@gSbM(iHQKsth8!ZydDiDB{{yXyUTETOyf{VG6>oqfQ
z`LSb#>hLMBk5$CHW~|I>qE9Ph6ig&9EM2Adi&(|RXWE6{U=@nGnt$6O<pxl$u6Oqs
zbSqn*$Ls8Tw^{kH#EB%w%&o{f(2QU4?Ddv5YD^|FJNTW^pyoC-hSoojN9-6-_jJ79
zw;tHV0A%+uzb*o`aW$@>+>^KkJOp#Udj$!^R?40D0S8|l*yD+FhzvuUf;q3ES<Xg3
z$GiXm0x;)dHpOCjvW3m}zYZ+uqjtZr#w)&3TZ9$k2EGeaXrpr0C<B#AEVF84J_sag
zF1F3)kCMmFMIPU)R8`sZ1{*p>DDTA!ROWsR(p<K94j`h3IQY`F@tXN9`G8>T&Gbt~
zcP0#}J*xIyu#Q<6Py@Qg<1^+564Q-v>+J=A!2|P7C?X7Y&_pjLMo{|dBp-Y#(dQ$x
zOm5(Ycx}Xk{g33>0tBlRYqP|=X*UVCB}nX^1(MVA2#Pn%IRL<C-T-np86^I-hw#Pf
zM?H7IVEP{PC6oM=4IxSX!;xeak|=a?!<C*dFxD}d{vJpASx67>v?AaU^n(FNi9LU?
zzx)_qP{Vuh&=j`Y6#mqKZm<U!KB7=gybLQLXt=x&a84Dp$-~)5W}XU0vNO9j_W|5O
z-$Eh{3<d5C;6{fYZ~km5Bjq}ejaK$@=dp~)Rej~Vkoz>y#ufg3NPY&AGp7D<{3D?R
z=n`yr;gwkjIz-8l-AVh&JTJ-$9Oi{f{dTq|t!$8?OOO%Re+}xF34)aT`0{Oj$?NB9
zReYb_4j@q%|MKnDq-_JZnbfcBhtbdT`unD#!Oc0S0((f3zD>ud9OL|_(lrn6s3Y4A
zgnvap=Cv!&n=O+Vj~bb&E@A4x%*H&0!CP?0T)?nMd9x31kZ5c#p=C<n!zUu^b(oJq
z%KvOr{Dw{OG*E1%O45t=dqjxAaCU-Tr$}}czTNi{Rl(9+4yOHB906)S$L?M6>>D@=
zsQx}0RZ~sWA4AF>PQ0vu&bPo?8lt&KgHbO#IqG4(7U(z}kPVNbpTJFnnb+nkk(5Zr
zME53wXO8JW3+~HPSbC8I=Y*K1hG!rtSFFcGU#G3S!yM<Id7zkUPr>ZtdabMbQesYa
zS;a?BbRgc2+NiorLK3TMzIz+iTJtgbK}4>g-9{etfP}s2gL!I-F!=2)YCiq3@E_k2
zT$@td_;2LLd^#kZ4?bEJBAxp@D+#LBgG8*-cvK0A;iJ`hAB{R_H|oh&4)Z#N^ox#k
zsqqPlo-;XUOJU>ftQV=QFQF>p2Z&Fy6J2B{I*Q%|Iuh*fc~j8eX$WyrJt3C<@l=^e
z<zp)No9Pod;!`cguO=F5=EQ6Z4V*xS%n|dXFJQ+xZf60ryO0EGfjj5F@)R2sVJBlF
z3>aHUY~h>Y_mV||X`YSgkhz_cTudw!9?Ys|(nyu4%*YRrJ4bRaj~~9$%I&vv_nRA#
zTeh|OutmFfSX#|q^b}7oOSkU>OcKy<ep@~hz5Ur)!VUPG>|e3;gHy<+$Y>>BGEVRP
zgtL?1-~<0eL0J62^-FP1D%JKB*y78eRgwK9-OpA3ep-YFc@qs*-OP&3mO|X+TtDXi
zT4n5^4RS9Pqi*op<oMfpG$XRAk0UkBnZI|ExeS}$Aw2+^oeJ2v5oSh*UDRv0LM45g
zwivrX=soD;I<Z*+UDx^PwD5HtkJBfyMWcJXvE0Z#N|`GEOc8p|IuxQ+^a=<I6bI}s
zBXNU`|5o7lMspqWADdp}LswV_dQ_&{>`WEN<k>r#H4!7j9){!DOwIR+E-N*<+C@k|
z0BNA~C)-Qp+tW)gP@G<%yn|4Tj4@7p%gUQ#nCRUK)pvn!(OrX3b+WHuJQN*dGSbdv
z7!_Uont5QddWl)$GnlJ<-$H2aMQ(OfTwTk~Bc%S&{<{8a{7MDJ!fdkxT?Lo?;SJ-Q
zZU4hi)XhNM3slBn!fZ$DS88e)sh{D7@I_xstq<OTIT5s<D7f2^l>(6rmWD{EoAU${
z?@E<TY24^wmS%HrkjpTZE?GO7Ha@Fv-b-y6yHhS@2KnREazX{jCk1NUlHh5kM(ggA
z)&<dthioQ<yUB#X-uPDg<9+tWMe5^s%{wk(b2`@(DgBtYv00C(Xmc9MqrnMZPh;A4
za>mp9ZE#)B*tiN2eO{)XX2-=SQ-<aFP<`F~k~(r4`>S;Z$*%Z)$cx6@Z4>i4RxU98
zAIz6|7<tFNC>njWF0mK6R8e5|1iPH)Ft&F0FI^Iz!D;IO)d-P?v4DUg4%kIpydC6&
zioAo%q6c87;1)|uf2gE?u#<iUYM4~YwNpFf1%dkLeM;Rh1k8tPn!ptB1LG!tq=<()
z!O7&L1kybT>UKM|n5&CpF|V@Ch#Q!;Zg&Gz=a|a$Vf1WLA=kR~X5+h$DHG3IRF=bt
zS8{|qip*yaPQrc9^fE;*K@p2sM0kTjUv8s+$;u8E{*;cZ*f<;rdcb#S`l3rFLa@h|
z^ReUb$?Q7%L?<=ngS$$d=CsSa77{CEBM2Ut5mcN?I&l9S{ZA)h;Z_o7@n1s{H9zB)
zrgAV8TsvRn+!wtk(}x%E4bcsaqno(la}47H5Pf@o5zLcu*4eLfz{n@Sxx5eh&cMU`
za}H{S1h8Jv7!2SlPz@EEVRoXG&;)DEbD>qV1N%a7gyz*EJP}YZfoF}Lt$Yo;QO^Wk
z!=q>34SB=o^VMe#u;x$snZNLPJwB@fV>7sJGXOE{`<$t2ve>;k@YDDJWRK`QhF=j>
z^>(SEt(sijFQX{%n4D1k8_l?7@<d9?WB7!#62M7MoY9f-jGG`ZGRzY!j_w7|pTc}j
zO%;En_=^1HD*ra3hAesF#1Ws0+^Y&m?*!F!1%l+y#WCu!9^mmT^(-5BO3a)B<jfzV
z@O<AvhmUmp2<Vg_o1mhj1o^ee)`gcS8I3SI?;sAAMf4^Hk7MR1&^b6^nCIc#KS^r%
zX9wox$P@3iF%wjnk6@lOaE@)a`C$EIt5$!8%~O>*J9?n=@Xg_Qz`Ic4rR|oid7=Th
zRy9b?i=%&zFSgjIYW_{&UtTltThyCvmFC*^m&n!d6L*zT8+Yc9P&ofVByEk-90*`1
z8{-`orbHXQ_VJs-ITtvWE*Yo;1{^({j)!?ZM51!lWYri92c3#LeeL|JLH~?~sK=PU
zsz8;~%QlmuBtx><bWzx-U|x>&o@-Y5QV<VqAtFANh#NFw^1y*ugo<o(AU<>p7v<YL
zy{x5VtB`6k8~Rx>x)`%La{L@QJmssFr;swVNl8iv6XJX*FCr{t*b%qkQ`Y@)-3O)T
zySl!Bc7)OM6Fd?g^bqbfdJ-KFy%_Fg1aqT&u5A@kDBxXr+Z+8TPFaiYH1GKoWkmNB
z!S4M>reuNc6}jN?IJUzWo_5u5Qp<VXY_`hT?do=?$WvZ_<2O(+M2Ty92Pm?mNFiUE
z@83k75YD7K)uINmZ{}$vr}J}?B)fyV>p-SHl)3{M9r6nErtwz1aiAuM^1!-p0l#ON
z=UP-7H+-Ymp>#ilP9glkV%!C!JINZvq+mRREOx-G7T&yOKJ_KVo9>rI+AVE?nl*l3
z6&iojt|8xmhBH6|HzofHS!{bVwH#LYT$BR#qad?Ql@jSm_DVt9_-$ZJ@E=rKxTtFR
zzy^tHSq5UQ@j97P(n(Hb3X(p-fxKn}IdQ1)*{ls~jv;*l+F==*qjUc;F#)(T7ybRf
zjUUr?es$nWND9l=y3dv43Cl8X1kJE;xcb;Jkw4!Otpf*PEx*82NSU88Pu{Ua|K;#R
zbchucDNZ~Hs1Jf`m@V=uoMk@wMKFBE+2OKy#zsqxUW62V*8&7{M`3obH~o_@tBEp;
zQS+hrgQ6@bXy-bTKLz`F@Gj6Ff12MZsfi06-+#mJcj9|2{TINAfzUC(N^G&{+nc@_
zU-@V564T1n{V)KmT{Yu9EQM}9V&fMIG`@|G{A2sSbEWI+olJ+pbTj-jhHqs0YJM9z
z{#rZ9%~kR_hR<M72a1HraWo65qUoRGVg67`RQ956pT%d`?70#-HG9a9ffuI9e!87$
zzRAY#zjGxIN-IE{S+E>lwZ*|+1~gmj{VDPeKoz3_Ur+O;GygyXK&(I6FkIB|*U9;H
zkEvyi_tb12L2aAfcpBJv9cWQz!T;Nxpt6Dv33J$u7*rqvdC*s28Ej)$*KRZ@mV-t!
zKI8*$9#+NQ?dp$wVK5J?X`?+@IECGfn!C1*=;{xjGds)GMc3QxOTy3V*Lfcx{cF&)
zzMig3E=Ry|i=}n+2iUJ}q{aAbUo)!iAEhOgVO~l>WyHyuBw;3&?Bhr+-7vZXT?&)s
z_(y1?N;SW1!N<O4CByHmlMdoWA=;gK#|2^sU(InNc_n~2glQVV0wP<jnJAR<7Od=d
zpO1#{AO<!83Ji4)XLA0A{w5{!3^YtbsEeoG3{9}nBE)P08Q88DllcW`F~<lMP)M#W
zdY4!il@q~s%&Te=wh#cbat6DB2w`?}kteC|B=gf!Wg#HGj{?iiE(QnMk%CA)`977A
zv#hOl$|XoX_<zh}sHsqyoNrM6O4Rsh9b?S#anl<nvUK&!8n)a`7M|tG!EGk4oZ`%O
zSI(W89r*6bxhHdrJb#k8Ri5|Bnvg5!q0D}Pf0uax&tXLnp+)BX)OcD1E7<<7Z70F!
zxF5mYxWgL~b^hQLYTU%BlIfjqr6G7JRSb6nJ;d;^C5HPchCIO%VkqM&{hioBM?r+R
zWg|JB<EG*%p%0w-Oyw`P`NQ+HByPsXqM7fwx;|nm_`k5r9)|LDAkdb}cam}`R?Sb4
z)RN14>5=WkS%NfSV1$p7iHEDZnFu!RCTATYXw^^2A%fQ9NT$RP`V_^R6Q%f*bnzkp
ziSHqeC6LNM(w*W`6pr(kJN3K(`R`@^@Qq3|oRYMdvN!^06Kq5@$J>~?P?8EEffVGq
z=dwGwx}e-qq5K*}$S;tX$Rz8~Zt+We6h4?g0x}GdA3`d{;e|DBIkY0RREuX%LiUji
zp?sA%V}l)@$#HHa@Fkqg{iRCCt<MUd^an{so>=(0kj!*}{*<z%_eqUyI#KP#NNbJ%
z><{+&laE#-Zt#!j3}e7Sb_Ps=*&{ep92YKd<#c6sxY-SE&)g!<J2SV+^PbEH<@uA$
zetF)Pc|e{IWgeF2?=s)P)1i^OGJSXf=U(^AuCB&3-DMb~6oY=Wy2uak0bOKNCIUBc
zVCajG^)G3^#_UU6-P!mo{bVqupPWBCD{{Ddf5g;%1b#&kG30(_3j#o|mT?XJrC=f&
z7X1Y$&TQbQ^D25uHhT)5ldK*yl|8E*#In=OFvmir%zT=v?p-9*8DCErNMN>u{UAN^
zW6IKzFUTxv+|0itG=}q@Ge9k`fT8mo!ZqSTl<w*pBM?uEhUee22%C&2U=7r>P{sfy
z4GhFmA~u(9BXl%zsL8As#X4ra+ep%;-E2KahZ7B$w}0SSNG8VP{LNpKl3zh$S*_sN
zo*Sq-MW}Y#r9F;`rE=Zfnbe=G+5}V$PWc<rONeg<@!_ZrbdflPJ;69$bs{5%T`VL@
z$5A!72{@Ms(&Z8q?b_Bqz}{w70jE?y!xMeRgN^TYpO`U(3lQMDB35EV)JVVa^d`F*
zi?_N(3sNqEjQ6sFavrOro7q(b$|5ABTyQ<uc^)KBf<%Wn0G$6b)(Q9cV8Z3-3(7kA
zCbThx2Toj9my1FHu`~FLz5vOWp&CYwHZCZO%BX;-+Ga+EdH-2dVC!Zfr5PMAwm~az
zVxn!J+@AWnpdmM#C)-zAaWh--L$=~VHXv`5kr7z6VN*LOMFD3>0ZW!g3YC=nhq4!W
zs~vMdhLeLoYl1~d>TELy`4>x;r2{o+d)rSrOukc)Z}3qW7aVw#13j0$al!i8AVrNU
z%D()ovM;Usop7nbqYe}E|K-Mc*`qaF`#k|)iq(G4gDSS4vJ26E_9iWT2mOiK@2xYW
z{Z^5^|1E7PS8x91+=<i`v>2TO5wAP~qm_L&86OpY&%sm`{>vET$}t#sk*4GALG<5s
z#2#)=wtOZ~$$d&}cPa&|H}!p4#@e5#ak@bA!BI+c&y+NhEB>H8&T?rHo$FTQ<2c*M
zp1un8QtpWXPcJ1+j=V-G36^UW_0aW>R77YWj7^+Ysym#iC~bBsn;j^=5vi>44m%%S
zkugskB%fov!{O7|Ec*uxf~ZNhFIwH}=$qbs%zq}$gV!)|Ft5W;f7%|5#-849LYVzM
zkqm$5o(r{m-QW4jJL2hvLpkRSfAkeHhc`!Jz2Bv5j2JL<_b;yr=YjP{CrkwEuO>n9
z!@@Q2L0a|cgvU|O`IuTQU4q!;eRhjRT)v*b({NdEUCUF0Z4qYxvoBWCi@>#Kq>8;n
z$=e3VTqn9k=z-c^VnU2P!i~SG#i!_d+v(#>c#w_sEB<(+dvFl7dEeREXr!MQ8+qSA
zp)#Fee2W+7i7YST3e@xFmsG+?DXMuktLf_c5t0yLd~pZ#%Q`?wiw=O*s7o+UTe6%}
z(v(4r0t{(_9e`b`&-L9yS-RtNDLrx!h5YIZQpf~dh&2PzR$IJ-W&Xq}#(WRX26eb;
zN+BGX8x^8%ltyYTMDa1epv=dW78(f0FM)`zrxVZ%d=rQd$6*Psr-9B>B~^`2wGp-f
zA#l|I7y8K%RLY{m@!Cjk%eRw+&8;ATYpf7T;<OVHt;N+kM<VjVPGs{01k7<HVk6m!
z*jN^(bC3wiR<%d!co}_+$Lo4<c=DYxIN&hhFM~4O2KvO~-9VhU0Nm|+5x>k;7qKOh
z@!fD$IMzdzWDYsc_QP?~?7*HuURimWlU!E!%vq(z-(z`~*yVkKIT*`Jayeza+CG1k
zbumj$vr0N$m4Y%lfC}+hWASCim&3XCxwWTnvgBiqU04qa(;3zH6gO@`DmM}&#Q#DT
zfbjvO<H-%syX+IFFCuxd8wW>Gvqt8(PNmj}?po(csc^#<XkK(UXeX>&PO=Cv&*nVS
z$(euIUZYe$21`@#vq0@UEP|d56j5Lo@oPlyT8#HB2V4HRJal1XgP!<T_?O!FD^Gww
zIbZQdKbQLtqL1N_SnOwz{>9s0%)Q{2Dr|z23)GWV`#~fBu+AD{`n7;E_+~2Fr-<|C
z56uG?Qc?zg=iCp+_CdR_eP9}XCXKWB6dFYODme2LD0*cGgon8Y$=P0EyRr=^iIhrA
zNy>Vvk_Wjs;R!^(z-J*vzH%~)e10$F2(ozB=~ARBPw6wOo^m0?+hSQgEerec#i*c}
z1x>>O5rK&m%Rs&OaOLvF<NBY}H(A{#lx^4c4X|3*miHYyYM|{ghkS0f>$`@Nyp+_o
z{0uMuJa<gB=;_R73Er+0`Tw4c|7?xlPM4H_o)>sjPRD*P`h@wW!W)*M20Sy&*ckTf
zvl)o`0P(q@`NF5f_gc7@DUM2f-oX9ve9`Jn+RwIpKsZDja>MQzZ0Q@RWHK!D+ie7W
zwHqhN4xl*IjpNUvAoW=b<$xcBB<Y9zm*5(7unDFM<o{36C+zEd$C!UQ32mdr0?M1g
zsV`zT?W<5@+*g6w1y24(4CJ{8oQro*6^%gstnO_-huLjPyXY=cV8q|H7+@#<6%r3V
zKGeUKGJmp;)8~lrBlHW^gr{1~0=+@*STyjs){;?BG)35i1!Z$DC3OKxNx5__$!l^R
zn-MNp?1Ix9;q{lJ{fc{HjN(vXN`GVp0U3$2@lW5A#CIw5iZAwE!;R5h_HVJ(lQ?A@
z#lfJ__v2%b1Yr;7*;%)2pb7UXn7ExWCOkK=XEd<&Jj^1ok|D3n^?Vmg-+B5(<Izqg
z<b#U`zUT%2g_pi)CrekmNKtx`b3Ydwmdb_kG3sbRd*^MJKAMy#jdX?4Y_4sW7IYk)
z8xG;$iQyI%Dsmp08V!6s-_d#d4^-OK^-~njv}*kUi(A5#S$M0sG9C&@rew#3`MA0-
zMp2kKs8AoRoFKP2R6$}>eu04yPLHo!PET_`UO>iV56}0c+6adh2EAsMpucHT`XJbZ
z%^Tqo94SYG@fNrz20K6+B{Gq3lXf+{Dni=8S7GwuyPMw&?C+P@-wW_v7*fiLmv?IE
zPAsz0VxavD)3m{!WP3~cFEV|$oqmBM{U4EDmChrTaX!mSlqs>O^Q>g%&yZ-K72ic3
zhRPE~^fzObh<+72lLs$F3dCjUh$}y=6Imk`@!asXQ#`{{z1=VSdVWdvh5x85(fDW*
zD(zQqQGkk7LQ4$(d<#{FBOFW4yXB5Ys=dFeLF-S^BW5+)fqEc>BLLA*I3^=I>|%e~
zj1d#Zd(7M!c|Y$EnkV8KoUP{dyKrX4-*KRx#O!nZ_XTWH!mZk2?*B7i9>H*CG=Q}j
zXzgFXw|)5L*fTAu2H(-+1M~%bs<2+4s>JT&4mPd_{DuDXW4<vPV=Fuw<pr+9`#kjS
z9~iN)R>-9$#`hsO{sOZRl7uvuEsL6ZB{CWBY%ah@5cmj5GamybgHN+Q0uTPl{_+sN
zBpMiBy6KI(De*%B(>CKB*xa1XvgE$Af>S4QR>RnCD660?KC+H@13>fZaB8XAuC&HC
zU(bD+qgcmVkpRQ4xtaqgHdXfBg%`48^BlzIz18{B;m%zJNB%QX`fvdX;5HCuqnq%V
z_=7A<B%q8EAZ0zVoc0*Q+(@bI?};o#*JXY5xr}|cS;e3b><#^4-#7STH1NoaUY3UK
z=z~3;URKFEbkeRAcralFSo!0T9QtT)&xrGkZjba5Ulb<`;-FmgX<W4cZ^!q6LqfTJ
zh98cJH9W0|DTMcG0?IQ?@AKHa&0p$dZ=BXlZ#Zh91EzQo<BVNqE(%TdUACjzzi|`-
z)OYQbST#ee9U|?}hFgKmQJ!^(qIsSnlJDvYf+^Tw#M67BflHu-dS;LG=RDf6VdSwX
zt}f1JVK#Yse_X>F?4bO})E=vR;K9qsK0oHWyLje1!JE*9ihCkyt}anbvrsOL$6XL8
zF^u3Uehu#s$;9368`0g1bEr6dSo$cQ`KsS_)qBAAB$Go6ewL=l>t2oW@M8OW0ZzkS
zHGi!W972MDQhZeXCoxKJW4?`%pRre%oFQNG4C7DHOZk2w-qRDf=|%4J+VqLhfp+eu
z%B0G_8(5Ouu7%8O#T#XZV3bbsoM#D09fS*CBvE(EN}Qe-*>x19j*5LsdM~o+Ro&rs
zvmUS6euxL1zQRD9@sD91pkqxjPXTASl0SJ_eD_RCg`W><`iw5ll?G;F_GjBevUL^h
z2iB!!z@CpjL(ArA2-`9>%c6W)Igi2hG-SM`{h>(6pLo(l!#rQeK!6_XGFk?T2I;X`
zNlg4Y@B(_bwI5Mp(ig|_|2`UeKAL(QsSjM(0}CCsJI{fRu}PXR^FM&fhmg22zDqCI
zNffbBnTQT}fIrbk*wy97RQa*#Q-%omaFmam{}j-hh;Vc)Pq@BLZNwm!%`f3cQLGv9
zP@P9dxNc<}ZE@3Ko_fI-YjHOCF82>lGJM+)UB2zFx8O86%sqTNKAo!$j5`zCB(Lrn
zbrJNt>-+uej6PdD;Insi-^p@1cQ4kKtlb_mG<xBbe1AH|wa<{M?_=~!u;3QVF!K%$
z{#?nel|&7tuRGE$MLPf9-4i~8++1VJjf_g01|_h7%HP(fSgS`><UK5(W9F$4A4mK-
z+c%a!KYgN+c!x10v&B3bwtZ#Sw~{ew-!yoza6aewiOB4`bo?cJ#L`a{D196sn?7Mf
z+<YqbKd(Fc2*jlTJi+L>>2=bhVbZtLhO2QsxdeBQr7#~%P^duT;=XeMJM>jiCdFoB
z6Fc*+!SihXCbEzYW0QFq1|sMe_}38OT|g{&`4+VjUOvNpxs36aed<JQzC=_h?HDy9
zoF1bI9sT<es6AtFr@8y+=h8nx+XRGzUNMxqF`({2^nNQU`3uB7#+H%jfyjE`p0Epf
z3s`&?(&ilmY1kg_hfkrm8gJwLr2HU4W6fbS?6z^4z3V_k&Vk4!u5DGBX}tjjolj^)
zZ>xe%cWo=m9Qh#z^A5ZKE1~4>+$mct%#(z8c~5&f?*q(}j!KvjS$!Or&CfqSrp{eh
z0($7?eN}5=Ii~?TeJuu~E&S1!&0CQHY<6|c0k^2NN25UOLX7TG5tMh~JGMH8qE91&
zGIFhJ+h03Bxj9^q>BdEIbU-7~f^uMb9QjYVcEWYn4%h$LIpc9xcLE<_5>K6Jy6)^p
zKTB;eSGO!EBzqn7Q(ix8v;&~!TTDOrSm#j;L|lK^Si*kawHrV4`ZpathIo+hgYZV)
zHew>JmOsdQxOU>#gBH~bZ^1i}L-Q|CSE8xq8hOe!O4(_?4K&f6GSFj1vl|u%&LhOT
z0Zfdn@n|;CNhPIzuDkkCwVVU4L_chtbNaJJVEBdPT5%^^9!0eGKpdvCJ$|ToFtZXY
zg|dH3J{2H-iu&LUKuUj@bu9O9fX#D0W&9sTYSzR$mD#Qf<g{@~QeTK;T-_I3+>=%M
z3%612>zT|aOotC(gcj$B)84n^=t%QtSj^`c*>0YJ(FN{sXvdb-4~l@{*f^XLf(_s}
z5$JX53u~}sludHH#L*9SY>nuLp7e>oax=0E_gls?@;(?i7aU2Z!G6UL22R2&lttY|
z%nUuU{?g>c2OcdOs;g~o&d#dOao5z8R@Brrx7Dq#Ss4h2n_2=_T<+$@3!zARds{FZ
zs5gw<+$r||n_BCdBlUqP;ZV4Sse`$VMpkH+y9&SE;b85WKy!1T-o2u>ZuQ#QV13BV
zQf9fcnw#t0t)WTkhd}C|c6V00MIZ4LH8nH@f`Qh$fO|zCyfzSM1toQLfl#PvO~4%t
z)Ydn(t_-<X;#W8jbcY*jTiw&$EzWX;o_`ZhQ;0Z2ZLPH{nyD(}@1OH$D0gr)bx~!R
zyDi9DDacp%+NN-$ySZsaojcSXs57!yNA-Urh0{|n&#g23t!rwVo9f-+_3Z)hsa~kJ
zUe-0Qu4$^D<PNNB3ZveJZlbn^`r7r`IqrtqCNSG-PgQOk7`-|WYz;K4(w$kX3ZCG3
z_$vh|UwSbN^RN8M0(nxs^KZr#>it&zUcJR>PWt_c`4<d?j%S}m|4?}hDR~@{fr2Mo
z43T-I3q8gDqAAs-3rfotmAVUy%L*45@^4Lr*Hc{OFY#)yq^z{8s;tyssNwR8vO;fV
zWldpuHB;62i}Z&oA95BQ|K3JWgG*Y6lu=Vy=BcPWuBg=4^UBJq90XbP)p&|M6(t&>
zl_uq7mB%kE_I*Y1eUW~y)Xxt6yjwr-)6bpy`HX&=`gv48r|IXJGZfy*jc)Z<9&Bn2
zhtRpuJsJbe?M7L9xT&o*bc!)q{heay>seMeLEgiG5H4y7wy~E6LK9ChybxE)t2+X1
z5vXl#UZ0zrdkQ3b3a)0EVu<cQ9yB0cH9&?9{^PD|YYhil!^U~brnVS9e`(b$H-6_`
zdD&$xNXY*sdkedZ8$BlyaA!5K&tx?rHPfIIh4{j4@R#Txqq(UyvTpLqrm%5JWu&F0
zHn@J4(OwH`>rvsX`cn+mlQa-o-PGRBPy7Nc)+#E8Kuc@5y$!sX(zd3VeK{1!ZfdWq
zX@DZtebE+AOPwaWDOh%K*xk|=X$_OGTKP9SE0iM)Nzn}1IYy{yWos>U^rWnI8+&n8
zd5yoku%_Ho<ujas8!bhxT_0#@YK2OePky41`ZnF;pg}_6iAG^#6ZAuNR#T4X6jZWy
zMQdBIrM7v!Q4vrI-@RhJyUtDr1~i3}m1qvP*92PH!|Q8mgDck<rESvskd-!fFw$zl
z?gq3xMTR=4p{cG3Br*N6sn?NGK`>EE6`H-dxhcfN7iWbowwt(3WX?FHs&-{a<W3qj
z3qn{$d20;>FuI`F6&MyGt?pWAa@+!B6t+d0>&a*^qFyk%n_AttHWwTtLxLDbg2JoX
zHBg_m)caHF18b&)8e8liQ&`QcP>rZ#2hi3YXq6Ug2&2q83_;RB&B^w6HcCDOv9%4j
zjc`kQL&%sf>Y6my)?FXLB}HhiHBEH^4zR<GtHecxQC3}5Q&L@QaJ+4cK!hTwzpDA1
ze0SbNCF2}{`L!L@BSXOF`lb-;S8p`51y@6+&?{zvCMecG>l)Mp!!iF$QeP2itzBDd
zH9z=<q>=XQoQaC(?CpVil&2|~o8x>>xycHtr0o1?P!!hC&>RUhW{1M{fnd-U<m6kB
zY`>)<$tA6!8YO^IQ#3Hhn5ZjZb+o2g#^fe<t0*k*x<Fkd4EsX_!%ga-DrOmlbg1C4
zf<P;+26v_Zss;YyVzSPuvP3sAoye80S^%SNC^a7xoBAtkYh4+v4M&=5DdLkb)UOUS
zuU9x5o5Jo|YXDvmSqZgglm^zJ(V!e_adj1%CEV8LZUzo_EhN+ur21LLlD3Guro^+P
zhBDpK1d|78^jO}|v@U?Q3IzhQEHaG7aJW4*YswVpwOo}fw=KAGN_%9*lu%vE6j6Fp
z)CZ=S5^f7ZW7db%mt4N8Yinu2V{TJDgw;ZvLdTj&YamD|BHIcVdb2}078zFgb!!5-
zz!D5d@pUVkCa-8}or1TmwJm{Mz;pQ{ADJghAyB~W*;(zAvTle>qJC5VcXT3)&$beB
zE6JmTDZNO^vNc6gS&33h4htHOWld>TqW_Dwq3j3N!9s(P>(0um&(;4KRgGGdf&uBK
zA*&IfKVasy2G$0GL`^=`!TwZA7xE4vXlvDZEe(itrID5ufuOssLF>xwa9t~e-V*LP
zZgI^VhmWZgQgjK)iZ0AQt3FCYLdVrz?9L7~Qt^pmYplia)tY1J*U4FRZavtwM4H1*
z?QBcwB7zNeTdU0mDCtNG#$dFv=uY$v%>8KVqiao`V~u|{?b0!;*0zx^Ep5<fsHAA-
znj3>{4PY=doPI#j-Q=!C668?@Lo31_K#!oh4n>;6B4(^?9nE`6zfzFEBf}=&h$<CR
zm&#7mtJXBMN$deuCF6WyGTUVm)CNWw<mb#plqcsr8o$&srJfw5YgFORx@x*l%nu<G
z3RnJ;`o6t37z((D=yNetm~hB@r+$a6;kI;q?z9Hg{#D0o`m9K!J8SB+NQ?Z7zQI3#
zgL^$hlsw0PKr4ov3N^Q_b+^=_)3gRALH(>}C%{aPpNCR1$IXQ*(Tk0k+L66M%SwPP
z4{3tFSKqUm-2Wtr(1U&jQb<l~TXKGhfx0<>DFg2D({xYvyVo7B*C`hqkYFX&tAvva
z-JXi8kP^d|wpg?ks-{BxXbCh7!3fPgFcgy`$ijNXOCe1Eli@9pUvB-}I#0n<HQZ5@
z3S000r=I5jXZ-()PD9tztXB2RSUCK%ylVLOCraP{FYuix-~aaahOYNv&9BpEt9e$3
zHQ&lt@KpUQ)z2}7>isp=cMan#`97oI{P}p!HRSJxB0OrQQ0g(1w>C7b%w2hdv7oT5
zbiV&8HA~RH?Lk8&bBDs1<E>N{H}(5!oxRSOvI1tb#)k3QfVHr~vLaL>zP$m)ugaa&
za<q=sJ7{9Lyi?Sk9(Hq8W+Q*Sk>6sJ;}Z$cA2n4n0Vqked{Ec|<<G$ItEV{}LP})<
zp!0Jqr}}Yc)t%@A&^Y*#&!UD*j}%Xh<P-u!L@mt96dIxLJS()itjFvVR#BwY9=uYL
zik*ZBR@<5Yat-Hqt8IsSM#gN1yKNYMNNqc6{IAoAuSeMcNqjORt!=Me(bU`&UXMAq
zeu2cWCyIh??d@!ctPuS#!aVDDc_0Y0P6h`3wYn8ItG2CdZK5izRWm%yku*loD3hZi
z%rBHt6>>+Mt(>&HB+F{RbuI051Hky=|0m18Mp^OnYVQK0!sjiX4&Vw4xWdQ{G*6EN
zR?CzBT%mz0jJb2?8d;NPgxpz|W9IJoDI<v?egU`$U<0ttlmSkc1pnuD&%$Is1cw3U
zD6MTUg*ii(@fn^?Z)H`Dx1yr7Y?${I-m2<~Qs;-NMV^XM7ME2I7X&$jff7~3KvdJv
z5_V6_cb8Td7aQn+&6rGvF)vu@zSNE1Ic{2lRhaF;C1sSBm3t~HjUs<#p{Jq<2r&l_
zsCiDkyCK-tLOT>)b0W;Q)vax7TT?J9Tor+q+9nzI>uTYdajyurtq!yrFcj8drrtW4
zgt)~+6KUrx*}_;ThPO4A1~CVOKe66jB@~_L<9v_5So;@_&pEH641T#2pk=p&3;ilz
zbvYk!{P1y2wO^i?u@S7Q@Tjk4RZ{?Z=2ghodDWHtI=|e@2d8&@R##T!@mcA;YN3Xw
z@mcOy={&{oxB;&6s%K@@g89XQuh3Uq#4n&p;L55pDYmMzN<FLmrIHiv#AkKIReUUl
z8&RI~E0^-Qu*xa|enzR>B7bS2kDvTyq`$mOQCg1s%K%m`spQ-0(&|bt%C9b@Z_@CV
zlRj^0nHR)(D=UD&3+`0l)nb2{;hi?mf0cY*>@76B^E^fK4R4{(j~aMAS9$!UQ@o4H
zs*8)}iB}Y8O1!}4A#TGv-&2hm<7L&n;swZDUAe^YdKddE@p5sIcOgINM^%v@Mfxk%
zgDzKmobNC88r~B10G29buUcF+k7(v=x+=>-R;4iA3pSwCl45@;N>i_j%0Nzqr}Qcy
zDuU0Ibd-8Zyj5jo#bu>Zvtqb&K?vBxN0qmvoaGdkp-}*rR3eeTh&(FvRWL{Kw9?8Y
zr6{%dG9Rl~d|3r6R9q@wt4lpq<Y8%9VWppmB@Orn0`M;?xp+SNCK7l`!C$_+Msc>1
z*yhcrRN!l+v_V-B;(1YPI+^*B?NV0il@#R*Kuv|W1T^!ls<x*HY^|&)A(Fzf5|9n)
zs6s*T?o|1GtW;5175*<pOYO=QdMoA^mn|Zas_IhzHS%dbS{TR+eXO#79-361pjV!i
zg{AT=@hq07SLDNAT<Jyj3g|NrIu9NdsvRJ66^g%=bf2RwkfNxlqJqgmMWuf!Dj}p+
zEkOqYDFT$01B?7Z<*Uof%LFS>R5{?XauCk1NIKu~-jf2LG(Tk@;)$Qgf!G|V6EC<~
z1joMos4j)eT$;~Yg-Vdm=%uBec_<g1MgaZ3v}|5A#SO|6DTH_GN2RY?BZQEZcuJR4
zc$tn(SOmpuA(=1T(Cb4(tK#{~E+1VRWI_)8rKtT?C=)2aGIogS!eXySl?YKr$+{x`
zN&%Hbu<sUKQ_Xf}r!4YUBc*yO1{Zot3%$jxRB71)FG|8c-o@qq3ckYc3hzR^w|-yk
zEffZTQQiu6B&l!(7y{w(%p+M9^F=j!eT&M={FP;;2GrPm27vKT4^r6}@nj?y5A|&K
zRLk0u1uCTD7;5<*s`PSIuDe=B_$txxf)0-4)M1CFAY2l#G=fdEr(}jN)@lT9G`P@I
zHUm>qcrf(fA*(@2w-3BfmaE400Exk(^YWqUAugL5@dfK|e7_>Nx~Arz!!6G57_?hz
z8UyR<@lx|ACBJ-k;9G-At=6#hQ2FZGg7wOs84AN`h^Z^zJChUU3ZF9{ScR1k^~dj6
z)~gXus+H*9cpkl4%_Guu+EEJ>j0j2jJ5|FBE8yQ*8Xl!U<6I4=Yxp7!GvJSZc^W=R
zfyN9CkJ0d44WF#xt2Au+8Ot<$s{X!6!(%mEqv6vuyi&ubYq(9r43p;HS`B9?(AcEm
zGc+94@R=I^hKA45@V7NQPQyRcFwb4)-_JG7fN=i(O2c1JpwX*g2}{Jgehr_azwgs9
z<01KXP{Zdb(0EqE3|QmeOB%jFfyO^H{6!6aq~QxSd~&gBUkw^(XxM81FKF0m|1WCT
zYX3|PTkUU_DSTG@U!uQT?LSq+R{LL}VXOV;XxM81A`M&Zzd*xQ`!Cn9)&2nuTkYSh
zVXOT^8n)X1Mh)BTuVJhGH*45x|2s5nwg0y?Y_<RQG;Fp1Pc&?`|1ULcwf}!>*lPc{
zhOPGR*Ra+8`!sB||6>}q+W#pHTkZch4O{L1qK2*ZAJDK{3&7hNo~YsXG<=bUKh^M;
zG(56IwRfh5Gc=r~;V)?T%NqWohA-A|wuZAcJoJ&Pzh9z1OxN(G8opA)lQcX}!;E(1
z-vSN8B`tpy8lIxzB^uW5bmOZUrVo>UjT)Y&K%-5=muYy7hA-Ff1`RW~kAJsl_zDFY
zQ4N1Z!&@{wL&JA#c&3JjKDO%bSLzQx)9`E!->>0(4R6yhw+Qm@cN(6nKx3zd3pBi6
z!>Uyc<A8?e>F-Z#xKP7~HB6@x|6b9sSAoVG8ioT({@&H_RT}<S!#)j<ELA1@HGHau
zuh#Hc8eX8`3p8A;;V)~rM8lIcT&m&e8n*11d<~cD?=ZgP*EJe0(Qt)^F&&U!l^R~I
z;VKOWG+eFWRt+!I@LCNo((pzNFV^s_8eXE|J2kvi!{5{JG7aCW;cGSgkcO|*@NNw+
z*YJ}XhKVA7&ujRr8h%5=wHp3d!z(mAO6&JJ4WFsudJUha;eduO)^LM{^EA9t!*ev;
zsA0c`n>2ilhF58LiH28ec!h?WHQcP>77ef0aI1zpHQc7*EgEju@OLzPy@r3L;h=^e
z)Nn|{zteD7!@D#b(eNKMyhg)MXn3uL4{3OvhF{e1dJVs!;Ttr3M8h{~_^5_AX!zuE
zC7(BG_$&=?)bP0)zFEUx)^LZ0r)hYThUaSd77bsm;Z6-N)o_=FS7^9f!&|jIsX^nB
zA@=378XjRK81meM{R{jXHRS#O7O+|K!?G{_x6u7RMdydQecc+NwHiDHD~f@jn%0DB
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%0A3;c%U%T|A${
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
YH~&NXx^DlMf1&XI__D&=@9zHp1J%k(RR910

literal 0
HcmV?d00001

diff --git a/testcases/kernel/syscalls/clock_settime/clock_settime03 b/testcases/kernel/syscalls/clock_settime/clock_settime03
new file mode 100755
index 0000000000000000000000000000000000000000..7e863e707a6edfc51c6e4571bde38dec90ceacff
GIT binary patch
literal 516496
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

literal 0
HcmV?d00001

diff --git a/testcases/kernel/syscalls/timer_gettime/timer_gettime01.c b/testcases/kernel/syscalls/timer_gettime/timer_gettime01.c
index 1c75f1cf0e45..d2b89eab4223 100644
--- a/testcases/kernel/syscalls/timer_gettime/timer_gettime01.c
+++ b/testcases/kernel/syscalls/timer_gettime/timer_gettime01.c
@@ -1,24 +1,5 @@
-/******************************************************************************
- * Copyright (c) Crackerjack Project., 2007                                   *
- * Porting from Crackerjack to LTP is done by:                                *
- *              Manas Kumar Nayak <maknayak@in.ibm.com>                       *
- * Copyright (c) 2013 Cyril Hrubis <chrubis@suse.cz>                          *
- *                                                                            *
- * This program is free software;  you can redistribute it and/or modify      *
- * it under the terms of the GNU General Public License as published by       *
- * the Free Software Foundation; either version 2 of the License, or          *
- * (at your option) any later version.                                        *
- *                                                                            *
- * This program is distributed in the hope that it will be useful,            *
- * but WITHOUT ANY WARRANTY;  without even the implied warranty of            *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See                  *
- * the GNU General Public License for more details.                           *
- *                                                                            *
- * You should have received a copy of the GNU General Public License          *
- * along with this program;  if not, write to the Free Software Foundation,   *
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA           *
- *                                                                            *
- ******************************************************************************/
+// SPDX-License-Identifier: GPL-2.0-or-later
+/* Copyright (c) Crackerjack Project., 2007 */
 
 #include <time.h>
 #include <signal.h>
@@ -26,71 +7,70 @@
 #include <stdio.h>
 #include <errno.h>
 
-#include "test.h"
-#include "lapi/syscalls.h"
+#include "tst_timer.h"
 
-char *TCID = "timer_gettime01";
-int TST_TOTAL = 3;
+static struct test_variants {
+	int (*func)(timer_t timer, void *its);
+	enum tst_ts_type type;
+	char *desc;
+} variants[] = {
+#if (__NR_timer_gettime != __LTP__NR_INVALID_SYSCALL)
+	{ .func = sys_timer_gettime, .type = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
 
-static void cleanup(void)
-{
-	tst_rmdir();
-}
+#if (__NR_timer_gettime64 != __LTP__NR_INVALID_SYSCALL)
+	{ .func = sys_timer_gettime64, .type = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
 
-static void setup(void)
-{
-	TEST_PAUSE;
-	tst_tmpdir();
-}
+static timer_t timer;
 
-int main(int ac, char **av)
+static void setup(void)
 {
-	int lc;
-
 	struct sigevent ev;
-	struct itimerspec spec;
-	int timer;
 
-	tst_parse_opts(ac, av, NULL, NULL);
-
-	setup();
+	tst_res(TINFO, "Testing variant: %s", variants[tst_variant].desc);
 
 	ev.sigev_value = (union sigval) 0;
 	ev.sigev_signo = SIGALRM;
 	ev.sigev_notify = SIGEV_SIGNAL;
-	TEST(ltp_syscall(__NR_timer_create, CLOCK_REALTIME, &ev, &timer));
-
-	if (TEST_RETURN != 0)
-		tst_brkm(TBROK | TERRNO, cleanup, "Failed to create timer");
 
-	for (lc = 0; TEST_LOOPING(lc); ++lc) {
-		tst_count = 0;
+	TEST(tst_syscall(__NR_timer_create, CLOCK_REALTIME, &ev, &timer));
 
-		TEST(ltp_syscall(__NR_timer_gettime, timer, &spec));
-		if (TEST_RETURN == 0) {
-			tst_resm(TPASS, "timer_gettime(CLOCK_REALTIME) Passed");
-		} else {
-			tst_resm(TFAIL | TERRNO,
-			         "timer_gettime(CLOCK_REALTIME) Failed");
-		}
-
-		TEST(ltp_syscall(__NR_timer_gettime, -1, &spec));
-		if (TEST_RETURN == -1 && TEST_ERRNO == EINVAL) {
-			tst_resm(TPASS,	"timer_gettime(-1) Failed: EINVAL");
-		} else {
-			tst_resm(TFAIL | TERRNO,
-			         "timer_gettime(-1) = %li", TEST_RETURN);
-		}
+	if (TST_RET) {
+		tst_res(TFAIL | TTERRNO, "timer_create() failed");
+		return;
+	}
+}
 
-		TEST(ltp_syscall(__NR_timer_gettime, timer, NULL));
-		if (TEST_RETURN == -1 && TEST_ERRNO == EFAULT) {
-			tst_resm(TPASS,	"timer_gettime(NULL) Failed: EFAULT");
-		} else {
-			tst_resm(TFAIL | TERRNO,
-			         "timer_gettime(-1) = %li", TEST_RETURN);
-		}
+static void verify(void)
+{
+	struct test_variants *tv = &variants[tst_variant];
+	struct tst_its spec = {.type = tv->type, };
+
+	TEST(tv->func(timer, tst_its_get(&spec)));
+	if (TST_RET == 0) {
+		tst_res(TPASS, "timer_gettime() Passed");
+	} else {
+		tst_res(TFAIL | TTERRNO, "timer_gettime() Failed");
 	}
 
-	cleanup();
-	tst_exit();
+	TEST(tv->func((timer_t)-1, tst_its_get(&spec)));
+	if (TST_RET == -1 && TST_ERR == EINVAL)
+		tst_res(TPASS, "timer_gettime(-1) Failed: EINVAL");
+	else
+		tst_res(TFAIL | TTERRNO, "timer_gettime(-1) = %li", TST_RET);
+
+	TEST(tv->func(timer, NULL));
+	if (TST_RET == -1 && TST_ERR == EFAULT)
+		tst_res(TPASS, "timer_gettime(NULL) Failed: EFAULT");
+	else
+		tst_res(TFAIL | TTERRNO, "timer_gettime(-1) = %li", TST_RET);
 }
+
+static struct tst_test test = {
+	.test_all = verify,
+	.test_variants = ARRAY_SIZE(variants),
+	.setup = setup,
+	.needs_tmpdir = 1,
+};
-- 
2.25.0.rc1.19.g042ed3e048af


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V5 06/17] syscalls/futex: Add support for time64 tests
  2020-05-22 10:51 ` [LTP] [PATCH V4 06/17] syscalls/futex: Add support for time64 tests Viresh Kumar
  2020-06-09 12:55   ` Li Wang
@ 2020-06-10  3:35   ` Viresh Kumar
  1 sibling, 0 replies; 33+ messages in thread
From: Viresh Kumar @ 2020-06-10  3:35 UTC (permalink / raw)
  To: ltp

This adds support for time64 tests to the existing futex() syscall
tests.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Petr Vorel <pvorel@suse.cz>
---
V5: Use tst_brk instead of tst_res at two places.

 include/tst_timer.h                           |  12 ++
 .../syscalls/futex/futex_cmp_requeue01.c      |  34 +++-
 .../syscalls/futex/futex_cmp_requeue02.c      |  24 ++-
 testcases/kernel/syscalls/futex/futex_utils.h |  52 +++++--
 .../kernel/syscalls/futex/futex_wait01.c      |  79 +++++-----
 .../kernel/syscalls/futex/futex_wait02.c      | 102 ++++++------
 .../kernel/syscalls/futex/futex_wait03.c      |  87 ++++++-----
 .../kernel/syscalls/futex/futex_wait04.c      |  81 +++++-----
 .../kernel/syscalls/futex/futex_wait05.c      |   2 +-
 .../syscalls/futex/futex_wait_bitset01.c      |  48 ++++--
 .../kernel/syscalls/futex/futex_wake01.c      |  67 ++++----
 .../kernel/syscalls/futex/futex_wake02.c      |  95 ++++++------
 .../kernel/syscalls/futex/futex_wake03.c      | 109 +++++++------
 .../kernel/syscalls/futex/futex_wake04.c      | 145 +++++++++---------
 testcases/kernel/syscalls/futex/futextest.h   | 122 ++++++++++-----
 15 files changed, 592 insertions(+), 467 deletions(-)

diff --git a/include/tst_timer.h b/include/tst_timer.h
index 6f0732ddaeb8..536e31752e72 100644
--- a/include/tst_timer.h
+++ b/include/tst_timer.h
@@ -248,6 +248,18 @@ static inline int sys_clock_nanosleep64(clockid_t clk_id, int flags,
 			   request, remain);
 }
 
+static inline int sys_futex(int *uaddr, int futex_op, int val, void *to,
+			    int *uaddr2, int val3)
+{
+	return tst_syscall(__NR_futex, uaddr, futex_op, val, to, uaddr2, val3);
+}
+
+static inline int sys_futex_time64(int *uaddr, int futex_op, int val, void *to,
+				   int *uaddr2, int val3)
+{
+	return tst_syscall(__NR_futex_time64, uaddr, futex_op, val, to, uaddr2, val3);
+}
+
 static inline int libc_sched_rr_get_interval(pid_t pid, void *ts)
 {
 	return sched_rr_get_interval(pid, ts);
diff --git a/testcases/kernel/syscalls/futex/futex_cmp_requeue01.c b/testcases/kernel/syscalls/futex/futex_cmp_requeue01.c
index c50fade9f969..537641766357 100644
--- a/testcases/kernel/syscalls/futex/futex_cmp_requeue01.c
+++ b/testcases/kernel/syscalls/futex/futex_cmp_requeue01.c
@@ -42,14 +42,29 @@ static struct tcase {
 	{1000, 300, 500},
 };
 
+static struct test_variants {
+	enum futex_fn_type fntype;
+	enum tst_ts_type tstype;
+	char *desc;
+} variants[] = {
+#if (__NR_futex != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX, .tstype = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_futex_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX64, .tstype = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
 static void do_child(void)
 {
+	struct test_variants *tv = &variants[tst_variant];
+	struct tst_ts usec = tst_ts_from_ms(tv->tstype, max_sleep_ms);
 	int slept_for_ms = 0;
-	struct timespec usec = tst_timespec_from_ms(max_sleep_ms);
 	int pid = getpid();
 	int ret = 0;
 
-	if (futex_wait(&sd->futexes[0], sd->futexes[0], &usec, 0) == -1) {
+	if (futex_wait(tv->fntype, &sd->futexes[0], sd->futexes[0], &usec, 0) == -1) {
 		if (errno == EAGAIN) {
 			/* spurious wakeup or signal */
 			tst_atomic_inc(&sd->spurious);
@@ -72,6 +87,7 @@ static void do_child(void)
 
 static void verify_futex_cmp_requeue(unsigned int n)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	int num_requeues = 0, num_waits = 0, num_total = 0;
 	int i, status, spurious, woken_up;
 	struct tcase *tc = &tcases[n];
@@ -104,8 +120,8 @@ static void verify_futex_cmp_requeue(unsigned int n)
 	 * specifies an upper limit on the number of waiters that are requeued.
 	 * Returns the total number of waiters that were woken up or requeued.
 	 */
-	TEST(futex_cmp_requeue(&sd->futexes[0], sd->futexes[0], &sd->futexes[1],
-		tc->set_wakes, tc->set_requeues, 0));
+	TEST(futex_cmp_requeue(tv->fntype, &sd->futexes[0], sd->futexes[0],
+			&sd->futexes[1], tc->set_wakes, tc->set_requeues, 0));
 
 	/* Fail if more than requested wakes + requeues were returned */
 	if (TST_RET > exp_ret) {
@@ -115,8 +131,8 @@ static void verify_futex_cmp_requeue(unsigned int n)
 		tst_res(TINFO, "futex_cmp_requeue() returned %ld", TST_RET);
 	}
 
-	num_requeues = futex_wake(&sd->futexes[1], tc->num_waiters, 0);
-	num_waits = futex_wake(&sd->futexes[0], tc->num_waiters, 0);
+	num_requeues = futex_wake(tv->fntype, &sd->futexes[1], tc->num_waiters, 0);
+	num_waits = futex_wake(tv->fntype, &sd->futexes[0], tc->num_waiters, 0);
 
 	tst_atomic_store(1, &sd->test_done);
 	for (i = 0; i < tc->num_waiters; i++) {
@@ -178,6 +194,11 @@ static void verify_futex_cmp_requeue(unsigned int n)
 
 static void setup(void)
 {
+	struct test_variants *tv = &variants[tst_variant];
+
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	futex_supported_by_kernel(tv->fntype);
+
 	max_sleep_ms = tst_multiply_timeout(5000);
 
 	sd = SAFE_MMAP(NULL, sizeof(*sd), PROT_READ | PROT_WRITE,
@@ -198,5 +219,6 @@ static struct tst_test test = {
 	.cleanup = cleanup,
 	.tcnt = ARRAY_SIZE(tcases),
 	.test = verify_futex_cmp_requeue,
+	.test_variants = ARRAY_SIZE(variants),
 	.forks_child = 1,
 };
diff --git a/testcases/kernel/syscalls/futex/futex_cmp_requeue02.c b/testcases/kernel/syscalls/futex/futex_cmp_requeue02.c
index 228d8cff6ea0..dd8fafb3ee38 100644
--- a/testcases/kernel/syscalls/futex/futex_cmp_requeue02.c
+++ b/testcases/kernel/syscalls/futex/futex_cmp_requeue02.c
@@ -32,12 +32,26 @@ static struct tcase {
 	{1, 1, FUTEX_INITIALIZER + 1, EAGAIN},
 };
 
+static struct test_variants {
+	enum futex_fn_type fntype;
+	char *desc;
+} variants[] = {
+#if (__NR_futex != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_futex_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX64, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
 static void verify_futex_cmp_requeue(unsigned int n)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	struct tcase *tc = &tcases[n];
 
-	TEST(futex_cmp_requeue(&futexes[0], tc->exp_val, &futexes[1],
-	     tc->set_wakes, tc->set_requeues, 0));
+	TEST(futex_cmp_requeue(tv->fntype, &futexes[0], tc->exp_val,
+			&futexes[1], tc->set_wakes, tc->set_requeues, 0));
 	if (TST_RET != -1) {
 		tst_res(TFAIL, "futex_cmp_requeue() succeeded unexpectedly");
 		return;
@@ -55,6 +69,11 @@ static void verify_futex_cmp_requeue(unsigned int n)
 
 static void setup(void)
 {
+	struct test_variants *tv = &variants[tst_variant];
+
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	futex_supported_by_kernel(tv->fntype);
+
 	futexes = SAFE_MMAP(NULL, sizeof(futex_t) * 2, PROT_READ | PROT_WRITE,
 			    MAP_ANONYMOUS | MAP_SHARED, -1, 0);
 
@@ -73,6 +92,7 @@ static struct tst_test test = {
 	.cleanup = cleanup,
 	.test = verify_futex_cmp_requeue,
 	.tcnt = ARRAY_SIZE(tcases),
+	.test_variants = ARRAY_SIZE(variants),
 	.tags = (const struct tst_tag[]) {
 		{"CVE", "2018-6927"},
 		{"linux-git", "fbe0e839d1e2"},
diff --git a/testcases/kernel/syscalls/futex/futex_utils.h b/testcases/kernel/syscalls/futex/futex_utils.h
index 63b97c00b631..f77b9d6b3b8a 100644
--- a/testcases/kernel/syscalls/futex/futex_utils.h
+++ b/testcases/kernel/syscalls/futex/futex_utils.h
@@ -20,10 +20,13 @@
 #ifndef FUTEX_UTILS_H__
 #define FUTEX_UTILS_H__
 
+#include <stdio.h>
+#include <stdlib.h>
+
 /*
  * Wait for nr_threads to be sleeping
  */
-static int wait_for_threads(unsigned int nr_threads)
+static inline int wait_for_threads(unsigned int nr_threads)
 {
 	char thread_state, name[1024];
 	DIR *dir;
@@ -32,34 +35,63 @@ static int wait_for_threads(unsigned int nr_threads)
 
 	snprintf(name, sizeof(name), "/proc/%i/task/", getpid());
 
-	dir = SAFE_OPENDIR(NULL, name);
+	dir = SAFE_OPENDIR(name);
 
-	while ((dent = SAFE_READDIR(NULL, dir))) {
+	while ((dent = SAFE_READDIR(dir))) {
 		/* skip ".", ".." and the main thread */
 		if (atoi(dent->d_name) == getpid() || atoi(dent->d_name) == 0)
 			continue;
 
 		snprintf(name, sizeof(name), "/proc/%i/task/%s/stat",
-		         getpid(), dent->d_name);
+			 getpid(), dent->d_name);
 
-		SAFE_FILE_SCANF(NULL, name, "%*i %*s %c", &thread_state);
+		SAFE_FILE_SCANF(name, "%*i %*s %c", &thread_state);
 
 		if (thread_state != 'S') {
-			tst_resm(TINFO, "Thread %s not sleeping yet", dent->d_name);
-			SAFE_CLOSEDIR(NULL, dir);
+			tst_res(TINFO, "Thread %s not sleeping yet", dent->d_name);
+			SAFE_CLOSEDIR(dir);
 			return 1;
 		}
 		cnt++;
 	}
 
-	SAFE_CLOSEDIR(NULL, dir);
+	SAFE_CLOSEDIR(dir);
 
 	if (cnt != nr_threads) {
-		tst_resm(TINFO, "%u threads sleeping, expected %u",
-	                  cnt, nr_threads);
+		tst_res(TINFO, "%u threads sleeping, expected %u", cnt,
+			nr_threads);
 	}
 
 	return 0;
 }
 
+static inline int process_state_wait2(pid_t pid, const char state)
+{
+	char proc_path[128], cur_state;
+
+	snprintf(proc_path, sizeof(proc_path), "/proc/%i/stat", pid);
+
+	for (;;) {
+		FILE *f = fopen(proc_path, "r");
+		if (!f) {
+			tst_res(TFAIL, "Failed to open '%s': %s\n", proc_path,
+				strerror(errno));
+			return 1;
+		}
+
+		if (fscanf(f, "%*i %*s %c", &cur_state) != 1) {
+			fclose(f);
+			tst_res(TFAIL, "Failed to read '%s': %s\n", proc_path,
+				strerror(errno));
+			return 1;
+		}
+		fclose(f);
+
+		if (state == cur_state)
+			return 0;
+
+		usleep(10000);
+	}
+}
+
 #endif /* FUTEX_UTILS_H__ */
diff --git a/testcases/kernel/syscalls/futex/futex_wait01.c b/testcases/kernel/syscalls/futex/futex_wait01.c
index 51a540d9e315..e884e696ef55 100644
--- a/testcases/kernel/syscalls/futex/futex_wait01.c
+++ b/testcases/kernel/syscalls/futex/futex_wait01.c
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (C) 2015 Cyril Hrubis <chrubis@suse.cz>
  *
@@ -5,34 +6,15 @@
  * written by Darren Hart <dvhltc@us.ibm.com>
  *            Gowrishankar <gowrishankar.m@in.ibm.com>
  *
- * Licensed under the GNU GPLv2 or later.
- * This program is free software;  you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY;  without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program;  if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * 1. Block on a futex and wait for timeout.
+ * 2. Test if FUTEX_WAIT op returns -EWOULDBLOCK if the futex value differs
+ *    from the expected one.
  */
- /*
-  * 1. Block on a futex and wait for timeout.
-  * 2. Test if FUTEX_WAIT op returns -EWOULDBLOCK if the futex value differs
-  *    from the expected one.
-  */
 
 #include <errno.h>
 
-#include "test.h"
 #include "futextest.h"
 
-const char *TCID="futex_wait01";
-
 struct testcase {
 	futex_t *f_addr;
 	futex_t f_val;
@@ -41,7 +23,6 @@ struct testcase {
 };
 
 static futex_t futex = FUTEX_INITIALIZER;
-static struct timespec to = {.tv_sec = 0, .tv_nsec = 10000};
 
 static struct testcase testcases[] = {
 	{&futex, FUTEX_INITIALIZER, 0, ETIMEDOUT},
@@ -50,38 +31,58 @@ static struct testcase testcases[] = {
 	{&futex, FUTEX_INITIALIZER+1, FUTEX_PRIVATE_FLAG, EWOULDBLOCK},
 };
 
-const int TST_TOTAL=ARRAY_SIZE(testcases);
+static struct test_variants {
+	enum futex_fn_type fntype;
+	enum tst_ts_type tstype;
+	char *desc;
+} variants[] = {
+#if (__NR_futex != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX, .tstype = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_futex_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX64, .tstype = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
 
-static void verify_futex_wait(struct testcase *tc)
+static void run(unsigned int n)
 {
+	struct test_variants *tv = &variants[tst_variant];
+	struct testcase *tc = &testcases[n];
+	static struct tst_ts to;
 	int res;
 
-	res = futex_wait(tc->f_addr, tc->f_val, &to, tc->opflags);
+	to.type = tv->tstype;
+	tst_ts_set_sec(&to, 0);
+	tst_ts_set_nsec(&to, 10000);
+
+	res = futex_wait(tv->fntype, tc->f_addr, tc->f_val, &to, tc->opflags);
 
 	if (res != -1) {
-		tst_resm(TFAIL, "futex_wait() returned %i, expected -1", res);
+		tst_res(TFAIL, "futex_wait() succeeded unexpectedly");
 		return;
 	}
 
 	if (errno != tc->exp_errno) {
-		tst_resm(TFAIL | TERRNO, "expected errno=%s",
+		tst_res(TFAIL | TTERRNO, "futex_wait() failed with incorrect error, expected errno=%s",
 		         tst_strerrno(tc->exp_errno));
 		return;
 	}
 
-	tst_resm(TPASS | TERRNO, "futex_wait()");
+	tst_res(TPASS | TERRNO, "futex_wait() passed");
 }
 
-int main(int argc, char *argv[])
+static void setup(void)
 {
-	int lc, i;
+	struct test_variants *tv = &variants[tst_variant];
 
-	tst_parse_opts(argc, argv, NULL, NULL);
-
-	for (lc = 0; TEST_LOOPING(lc); lc++) {
-		for (i = 0; i < TST_TOTAL; i++)
-			verify_futex_wait(testcases + i);
-	}
-
-	tst_exit();
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	futex_supported_by_kernel(tv->fntype);
 }
+
+static struct tst_test test = {
+	.setup = setup,
+	.test = run,
+	.tcnt = ARRAY_SIZE(testcases),
+	.test_variants = ARRAY_SIZE(variants),
+};
diff --git a/testcases/kernel/syscalls/futex/futex_wait02.c b/testcases/kernel/syscalls/futex/futex_wait02.c
index 1ca1df457b4a..34b78357f6e6 100644
--- a/testcases/kernel/syscalls/futex/futex_wait02.c
+++ b/testcases/kernel/syscalls/futex/futex_wait02.c
@@ -1,105 +1,93 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (C) 2015 Cyril Hrubis <chrubis@suse.cz>
  *
- * Licensed under the GNU GPLv2 or later.
- * This program is free software;  you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * Block on a futex and wait for wakeup.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY;  without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program;  if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * This tests uses shared memory page to store the mutex variable.
  */
- /*
-  * Block on a futex and wait for wakeup.
-  *
-  * This tests uses shared memory page to store the mutex variable.
-  */
 
 #include <sys/mman.h>
 #include <sys/wait.h>
 #include <errno.h>
 
-#include "test.h"
-#include "safe_macros.h"
 #include "futextest.h"
-
-const char *TCID="futex_wait02";
-const int TST_TOTAL=1;
+#include "futex_utils.h"
 
 static futex_t *futex;
 
+static struct test_variants {
+	enum futex_fn_type fntype;
+	char *desc;
+} variants[] = {
+#if (__NR_futex != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_futex_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX64, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
 static void do_child(void)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	int ret;
 
-	tst_process_state_wait2(getppid(), 'S');
+	process_state_wait2(getppid(), 'S');
 
-	ret = futex_wake(futex, 1, 0);
+	ret = futex_wake(tv->fntype, futex, 1, 0);
 
 	if (ret != 1)
-		tst_brkm(TFAIL, NULL, "futex_wake() returned %i", ret);
+		tst_res(TFAIL | TTERRNO, "futex_wake() failed");
 
-	exit(TPASS);
+	exit(0);
 }
 
-static void verify_futex_wait(void)
+static void run(void)
 {
-	int res;
-	int pid;
+	struct test_variants *tv = &variants[tst_variant];
+	int res, pid;
 
-	pid = tst_fork();
+	pid = SAFE_FORK();
 
 	switch (pid) {
 	case 0:
 		do_child();
-	break;
-	case -1:
-		tst_brkm(TBROK | TERRNO, NULL, "fork() failed");
-	break;
 	default:
-	break;
+		break;
 	}
 
-	res = futex_wait(futex, *futex, NULL, 0);
-
+	res = futex_wait(tv->fntype, futex, *futex, NULL, 0);
 	if (res) {
-		tst_resm(TFAIL, "futex_wait() returned %i, errno %s",
-		         res, tst_strerrno(errno));
+		tst_res(TFAIL | TTERRNO, "futex_wait() failed");
+		return;
 	}
 
-	SAFE_WAIT(NULL, &res);
+	SAFE_WAIT(&res);
 
 	if (WIFEXITED(res) && WEXITSTATUS(res) == TPASS)
-		tst_resm(TPASS, "futex_wait() woken up");
+		tst_res(TPASS, "futex_wait() woken up");
 	else
-		tst_resm(TFAIL, "child failed");
+		tst_res(TFAIL, "child failed");
 }
 
 static void setup(void)
 {
-	futex = SAFE_MMAP(NULL, NULL, sizeof(*futex), PROT_READ | PROT_WRITE,
+	struct test_variants *tv = &variants[tst_variant];
+
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	futex_supported_by_kernel(tv->fntype);
+
+	futex = SAFE_MMAP(NULL, sizeof(*futex), PROT_READ | PROT_WRITE,
 			  MAP_ANONYMOUS | MAP_SHARED, -1, 0);
 
 	*futex = FUTEX_INITIALIZER;
 }
 
-int main(int argc, char *argv[])
-{
-	int lc;
-
-	tst_parse_opts(argc, argv, NULL, NULL);
-
-	setup();
-
-	for (lc = 0; TEST_LOOPING(lc); lc++)
-		verify_futex_wait();
-
-	tst_exit();
-}
+static struct tst_test test = {
+	.setup = setup,
+	.test_all = run,
+	.test_variants = ARRAY_SIZE(variants),
+	.forks_child = 1,
+};
diff --git a/testcases/kernel/syscalls/futex/futex_wait03.c b/testcases/kernel/syscalls/futex/futex_wait03.c
index 9683e76503c0..e436b238a165 100644
--- a/testcases/kernel/syscalls/futex/futex_wait03.c
+++ b/testcases/kernel/syscalls/futex/futex_wait03.c
@@ -1,87 +1,86 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (C) 2015 Cyril Hrubis <chrubis@suse.cz>
  *
- * Licensed under the GNU GPLv2 or later.
- * This program is free software;  you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * Block on a futex and wait for wakeup.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY;  without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program;  if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * This tests uses private mutexes with threads.
  */
- /*
-  * Block on a futex and wait for wakeup.
-  *
-  * This tests uses private mutexes with threads.
-  */
 
 #include <errno.h>
 #include <pthread.h>
 
-#include "test.h"
 #include "futextest.h"
-
-const char *TCID="futex_wait03";
-const int TST_TOTAL=1;
+#include "futex_utils.h"
 
 static futex_t futex = FUTEX_INITIALIZER;
 
+static struct test_variants {
+	enum futex_fn_type fntype;
+	char *desc;
+} variants[] = {
+#if (__NR_futex != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_futex_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX64, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
 static void *threaded(void *arg LTP_ATTRIBUTE_UNUSED)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	long ret;
 
-	tst_process_state_wait2(getpid(), 'S');
+	process_state_wait2(getpid(), 'S');
 
-	ret = futex_wake(&futex, 1, FUTEX_PRIVATE_FLAG);
+	ret = futex_wake(tv->fntype, &futex, 1, FUTEX_PRIVATE_FLAG);
 
 	return (void*)ret;
 }
 
-static void verify_futex_wait(void)
+static void run(void)
 {
-	long ret;
-	int res;
+	struct test_variants *tv = &variants[tst_variant];
+	long ret, res;
 	pthread_t t;
 
 	res = pthread_create(&t, NULL, threaded, NULL);
 	if (res) {
-		tst_brkm(TBROK, NULL, "pthread_create(): %s",
-	                 tst_strerrno(res));
+		tst_res(TFAIL | TTERRNO, "pthread_create() failed");
+		return;
 	}
 
-	res = futex_wait(&futex, futex, NULL, FUTEX_PRIVATE_FLAG);
+	res = futex_wait(tv->fntype, &futex, futex, NULL, FUTEX_PRIVATE_FLAG);
 	if (res) {
-		tst_resm(TFAIL, "futex_wait() returned %i, errno %s",
-	                 res, tst_strerrno(errno));
+		tst_res(TFAIL | TTERRNO, "futex_wait() failed");
 		pthread_join(t, NULL);
 		return;
 	}
 
 	res = pthread_join(t, (void*)&ret);
-	if (res)
-		tst_brkm(TBROK, NULL, "pthread_join(): %s", tst_strerrno(res));
+	if (res) {
+		tst_res(TFAIL | TTERRNO, "pthread_join() failed");
+		return;
+	}
 
 	if (ret != 1)
-		tst_resm(TFAIL, "futex_wake() returned %li", ret);
+		tst_res(TFAIL, "futex_wake() returned %li", ret);
 	else
-		tst_resm(TPASS, "futex_wait() woken up");
+		tst_res(TPASS, "futex_wait() woken up");
 }
 
-int main(int argc, char *argv[])
+static void setup(void)
 {
-	int lc;
+	struct test_variants *tv = &variants[tst_variant];
 
-	tst_parse_opts(argc, argv, NULL, NULL);
-
-	for (lc = 0; TEST_LOOPING(lc); lc++)
-		verify_futex_wait();
-
-	tst_exit();
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	futex_supported_by_kernel(tv->fntype);
 }
+
+static struct tst_test test = {
+	.setup = setup,
+	.test_all = run,
+	.test_variants = ARRAY_SIZE(variants),
+};
diff --git a/testcases/kernel/syscalls/futex/futex_wait04.c b/testcases/kernel/syscalls/futex/futex_wait04.c
index b8360ff80914..8de3c90b08d3 100644
--- a/testcases/kernel/syscalls/futex/futex_wait04.c
+++ b/testcases/kernel/syscalls/futex/futex_wait04.c
@@ -1,65 +1,66 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (C) 2015 Cyril Hrubis <chrubis@suse.cz>
  *
  * Based on futextest (futext_wait_uninitialized_heap.c)
  * written by KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
  *
- * Licensed under the GNU GPLv2 or later.
- * This program is free software;  you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY;  without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program;  if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * Wait on uninitialized heap. It shold be zero and FUTEX_WAIT should return
+ * immediately. This test tests zero page handling in futex code.
  */
- /*
-  * Wait on uninitialized heap. It shold be zero and FUTEX_WAIT should return
-  * immediately. This test tests zero page handling in futex code.
-  */
 
 #include <errno.h>
 
-#include "test.h"
-#include "safe_macros.h"
 #include "futextest.h"
 
-const char *TCID="futex_wait04";
-const int TST_TOTAL=1;
-static struct timespec to = {.tv_sec = 0, .tv_nsec = 10000};
+static struct test_variants {
+	enum futex_fn_type fntype;
+	enum tst_ts_type tstype;
+	char *desc;
+} variants[] = {
+#if (__NR_futex != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX, .tstype = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_futex_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX64, .tstype = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
 
-static void verify_futex_wait(void)
+static void run(void)
 {
-	int res;
-	void *buf;
+	struct test_variants *tv = &variants[tst_variant];
+	static struct tst_ts to;
 	size_t pagesize = getpagesize();
-	buf = SAFE_MMAP(NULL, NULL, pagesize, PROT_READ|PROT_WRITE,
-                        MAP_PRIVATE|MAP_ANONYMOUS, 0, 0);
+	void *buf;
+	int res;
+
+	buf = SAFE_MMAP(NULL, pagesize, PROT_READ|PROT_WRITE,
+			MAP_PRIVATE|MAP_ANONYMOUS, 0, 0);
 
-	res = futex_wait(buf, 1, &to, 0);
+	to.type = tv->tstype;
+	tst_ts_set_sec(&to, 0);
+	tst_ts_set_nsec(&to, 10000);
 
+	res = futex_wait(tv->fntype, buf, 1, &to, 0);
 	if (res == -1 && errno == EWOULDBLOCK)
-		tst_resm(TPASS | TERRNO, "futex_wait() returned %i", res);
+		tst_res(TPASS | TERRNO, "futex_wait() returned %i", res);
 	else
-		tst_resm(TFAIL | TERRNO, "futex_wait() returned %i", res);
+		tst_res(TFAIL | TERRNO, "futex_wait() returned %i", res);
 
-	SAFE_MUNMAP(NULL, buf, pagesize);
+	SAFE_MUNMAP(buf, pagesize);
 }
 
-int main(int argc, char *argv[])
+static void setup(void)
 {
-	int lc;
-
-	tst_parse_opts(argc, argv, NULL, NULL);
+	struct test_variants *tv = &variants[tst_variant];
 
-	for (lc = 0; TEST_LOOPING(lc); lc++)
-		verify_futex_wait();
-
-	tst_exit();
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	futex_supported_by_kernel(tv->fntype);
 }
+
+static struct tst_test test = {
+	.setup = setup,
+	.test_all = run,
+	.test_variants = ARRAY_SIZE(variants),
+};
diff --git a/testcases/kernel/syscalls/futex/futex_wait05.c b/testcases/kernel/syscalls/futex/futex_wait05.c
index 2573ae177d5b..8fad5d858716 100644
--- a/testcases/kernel/syscalls/futex/futex_wait05.c
+++ b/testcases/kernel/syscalls/futex/futex_wait05.c
@@ -19,7 +19,7 @@ int sample_fn(int clk_id, long long usec)
 	futex_t futex = FUTEX_INITIALIZER;
 
 	tst_timer_start(clk_id);
-	TEST(futex_wait(&futex, futex, &to, 0));
+	TEST(syscall(SYS_futex, &futex, FUTEX_WAIT, futex, &to, NULL, 0));
 	tst_timer_stop();
 	tst_timer_sample();
 
diff --git a/testcases/kernel/syscalls/futex/futex_wait_bitset01.c b/testcases/kernel/syscalls/futex/futex_wait_bitset01.c
index b8546c3e640c..a871af992572 100644
--- a/testcases/kernel/syscalls/futex/futex_wait_bitset01.c
+++ b/testcases/kernel/syscalls/futex/futex_wait_bitset01.c
@@ -23,22 +23,40 @@ static struct test_case_t {
 	{ CLOCK_REALTIME }
 };
 
+static struct test_variants {
+	enum futex_fn_type fntype;
+	enum tst_ts_type tstype;
+	int (*gettime)(clockid_t clk_id, void *ts);
+	char *desc;
+} variants[] = {
+#if (__NR_futex != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX, .tstype = TST_KERN_OLD_TIMESPEC, .gettime = sys_clock_gettime, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_futex_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX64, .tstype = TST_KERN_TIMESPEC, .gettime = sys_clock_gettime64, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
 static void verify_futex_wait_bitset(long long wait_us, clock_t clk_id)
 {
-	struct timespec start, to, end;
+	struct test_variants *tv = &variants[tst_variant];
+	struct tst_ts start, to, end;
 	futex_t futex = FUTEX_INITIALIZER;
 	u_int32_t bitset = 0xffffffff;
 	int flags = clk_id == CLOCK_REALTIME ? FUTEX_CLOCK_REALTIME : 0;
 
+	start.type = end.type = to.type = tv->tstype;
+
 	tst_res(TINFO, "testing futex_wait_bitset() timeout with %s",
 		clk_id == CLOCK_REALTIME ? "CLOCK_REALTIME" : "CLOCK_MONOTONIC");
 
-	clock_gettime(clk_id, &start);
-	to = tst_timespec_add_us(start, wait_us);
+	tv->gettime(clk_id, tst_ts_get(&start));
+	to = tst_ts_add_us(start, wait_us);
 
-	TEST(futex_wait_bitset(&futex, futex, &to, bitset, flags));
+	TEST(futex_wait_bitset(tv->fntype, &futex, futex, &to, bitset, flags));
 
-	clock_gettime(clk_id, &end);
+	tv->gettime(clk_id, tst_ts_get(&end));
 
 	if (TST_RET != -1) {
 		tst_res(TFAIL, "futex_wait_bitset() returned %li, expected -1",
@@ -58,22 +76,22 @@ static void verify_futex_wait_bitset(long long wait_us, clock_t clk_id)
 		return;
 	}
 
-	if (tst_timespec_lt(end, to)) {
+	if (tst_ts_lt(end, to)) {
 		tst_res(TFAIL,
 			"futex_wait_bitset() woken up prematurely %llius, expected %llius",
-			tst_timespec_diff_us(end, start), wait_us);
+			tst_ts_diff_us(end, start), wait_us);
 		return;
 	}
 
-	if (tst_timespec_diff_us(end, to) > THRESHOLD_US) {
+	if (tst_ts_diff_us(end, to) > THRESHOLD_US) {
 		tst_res(TFAIL,
 			"futex_wait_bitset() waited too long %llius, expected %llius",
-			tst_timespec_diff_us(end, start), wait_us);
+			tst_ts_diff_us(end, start), wait_us);
 		return;
 	}
 
 	tst_res(TPASS, "futex_wait_bitset() waited %llius, expected %llius",
-		tst_timespec_diff_us(end, start), wait_us);
+		tst_ts_diff_us(end, start), wait_us);
 }
 
 static void run(unsigned int n)
@@ -82,7 +100,17 @@ static void run(unsigned int n)
 	verify_futex_wait_bitset(DEFAULT_TIMEOUT_US, tcases[n].clk_id);
 }
 
+static void setup(void)
+{
+	struct test_variants *tv = &variants[tst_variant];
+
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	futex_supported_by_kernel(tv->fntype);
+}
+
 static struct tst_test test = {
+	.setup = setup,
 	.test = run,
 	.tcnt = ARRAY_SIZE(tcases),
+	.test_variants = ARRAY_SIZE(variants),
 };
diff --git a/testcases/kernel/syscalls/futex/futex_wake01.c b/testcases/kernel/syscalls/futex/futex_wake01.c
index 42ea6f6e6a75..2dbe8cc2f3aa 100644
--- a/testcases/kernel/syscalls/futex/futex_wake01.c
+++ b/testcases/kernel/syscalls/futex/futex_wake01.c
@@ -1,33 +1,15 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (C) 2015 Cyril Hrubis <chrubis@suse.cz>
  *
- * Licensed under the GNU GPLv2 or later.
- * This program is free software;  you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY;  without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program;  if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * futex_wake() returns 0 (0 woken up processes) when no processes wait on the mutex.
  */
- /*
-  * futex_wake() returns 0 (0 woken up processes) when no processes wait on the mutex.
-  */
 
 #include <errno.h>
 #include <limits.h>
 
-#include "test.h"
 #include "futextest.h"
 
-const char *TCID="futex_wake01";
-
 struct testcase {
 	futex_t *f_addr;
 	int nr_wake;
@@ -46,32 +28,45 @@ static struct testcase testcases[] = {
 	{&futex, INT_MAX, FUTEX_PRIVATE_FLAG},
 };
 
-const int TST_TOTAL=ARRAY_SIZE(testcases);
+static struct test_variants {
+	enum futex_fn_type fntype;
+	char *desc;
+} variants[] = {
+#if (__NR_futex != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX, .desc = "syscall with old kernel spec"},
+#endif
 
-static void verify_futex_wake(struct testcase *tc)
+#if (__NR_futex_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX64, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
+static void run(unsigned int n)
 {
+	struct test_variants *tv = &variants[tst_variant];
+	struct testcase *tc = &testcases[n];
 	int res;
 
-	res = futex_wake(tc->f_addr, tc->nr_wake, tc->opflags);
-
+	res = futex_wake(tv->fntype, tc->f_addr, tc->nr_wake, tc->opflags);
 	if (res != 0) {
-		tst_resm(TFAIL, "futex_wake() returned %i, expected 0", res);
+		tst_res(TFAIL | TTERRNO, "futex_wake() failed");
 		return;
 	}
 
-	tst_resm(TPASS, "futex_wake() returned 0");
+	tst_res(TPASS, "futex_wake() passed");
 }
 
-int main(int argc, char *argv[])
+static void setup(void)
 {
-	int lc, i;
+	struct test_variants *tv = &variants[tst_variant];
 
-	tst_parse_opts(argc, argv, NULL, NULL);
-
-	for (lc = 0; TEST_LOOPING(lc); lc++) {
-		for (i = 0; i < TST_TOTAL; i++)
-			verify_futex_wake(testcases + i);
-	}
-
-	tst_exit();
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	futex_supported_by_kernel(tv->fntype);
 }
+
+static struct tst_test test = {
+	.setup = setup,
+	.test = run,
+	.tcnt = ARRAY_SIZE(testcases),
+	.test_variants = ARRAY_SIZE(variants),
+};
diff --git a/testcases/kernel/syscalls/futex/futex_wake02.c b/testcases/kernel/syscalls/futex/futex_wake02.c
index 8a4c2d58e4b9..3491839872ac 100644
--- a/testcases/kernel/syscalls/futex/futex_wake02.c
+++ b/testcases/kernel/syscalls/futex/futex_wake02.c
@@ -1,40 +1,34 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (C) 2015 Cyril Hrubis <chrubis@suse.cz>
  *
- * Licensed under the GNU GPLv2 or later.
- * This program is free software;  you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY;  without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program;  if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * Block several threads on a private mutex, then wake them up.
  */
- /*
-  * Block several threads on a private mutex, then wake them up.
-  */
 
 #include <errno.h>
 #include <pthread.h>
+#include <sys/types.h>
 
-#include "test.h"
-#include "safe_macros.h"
 #include "futextest.h"
 #include "futex_utils.h"
 
-const char *TCID="futex_wake02";
-const int TST_TOTAL=11;
-
 static futex_t futex = FUTEX_INITIALIZER;
 
 static volatile int threads_flags[55];
 
+static struct test_variants {
+	enum futex_fn_type fntype;
+	char *desc;
+} variants[] = {
+#if (__NR_futex != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_futex_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX64, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
 static int threads_awake(void)
 {
 	int ret = 0;
@@ -58,9 +52,10 @@ static void clear_threads_awake(void)
 
 static void *threaded(void *arg)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	long i = (long)arg;
 
-	futex_wait(&futex, futex, NULL, FUTEX_PRIVATE_FLAG);
+	futex_wait(tv->fntype, &futex, futex, NULL, FUTEX_PRIVATE_FLAG);
 
 	threads_flags[i] = 1;
 
@@ -69,14 +64,15 @@ static void *threaded(void *arg)
 
 static void do_child(void)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	int res, i, j, awake;
 	pthread_t t[55];
 
 	for (i = 0; i < (int)ARRAY_SIZE(t); i++) {
 		res = pthread_create(&t[i], NULL, threaded, (void*)((long)i));
 		if (res) {
-			tst_brkm(TBROK, NULL, "pthread_create(): %s",
-			         tst_strerrno(res));
+			tst_res(TFAIL | TTERRNO, "pthread_create() failed");
+			return;
 		}
 	}
 
@@ -85,9 +81,9 @@ static void do_child(void)
 
 	for (i = 1; i <= 10; i++) {
 		clear_threads_awake();
-		res = futex_wake(&futex, i, FUTEX_PRIVATE_FLAG);
+		res = futex_wake(tv->fntype, &futex, i, FUTEX_PRIVATE_FLAG);
 		if (i != res) {
-			tst_resm(TFAIL,
+			tst_res(TFAIL | TTERRNO,
 			         "futex_wake() woken up %i threads, expected %i",
 			         res, i);
 		}
@@ -101,26 +97,26 @@ static void do_child(void)
 		}
 
 		if (awake == i) {
-			tst_resm(TPASS, "futex_wake() woken up %i threads", i);
+			tst_res(TPASS, "futex_wake() woken up %i threads", i);
 		} else {
-			tst_resm(TFAIL, "Woken up %i threads, expected %i",
-			         awake, i);
+			tst_res(TFAIL | TTERRNO, "Woken up %i threads, expected %i",
+				awake, i);
 		}
 	}
 
-	res = futex_wake(&futex, 1, FUTEX_PRIVATE_FLAG);
+	res = futex_wake(tv->fntype, &futex, 1, FUTEX_PRIVATE_FLAG);
 
 	if (res) {
-		tst_resm(TFAIL, "futex_wake() woken up %i, none were waiting",
-		         res);
+		tst_res(TFAIL | TTERRNO, "futex_wake() woken up %i, none were waiting",
+			res);
 	} else {
-		tst_resm(TPASS, "futex_wake() woken up 0 threads");
+		tst_res(TPASS, "futex_wake() woken up 0 threads");
 	}
 
 	for (i = 0; i < (int)ARRAY_SIZE(t); i++)
 		pthread_join(t[i], NULL);
 
-	tst_exit();
+	exit(0);
 }
 
 /*
@@ -135,30 +131,31 @@ static void do_child(void)
  * under /proc/$PID/tasks/, but the subsequent open() fails with ENOENT because
  * the thread was removed meanwhile.
  */
-static void verify_futex_wake(void)
+static void run(void)
 {
-	int pid;
+	int status, pid;
 
-	pid = tst_fork();
+	pid = SAFE_FORK();
 
 	switch (pid) {
 	case 0:
 		do_child();
-	case -1:
-		tst_brkm(TBROK | TERRNO, NULL, "fork() failed");
 	default:
-		tst_record_childstatus(NULL, pid);
+		SAFE_WAITPID(pid, &status, 0);
 	}
 }
 
-int main(int argc, char *argv[])
+static void setup(void)
 {
-	int lc;
-
-	tst_parse_opts(argc, argv, NULL, NULL);
+	struct test_variants *tv = &variants[tst_variant];
 
-	for (lc = 0; TEST_LOOPING(lc); lc++)
-		verify_futex_wake();
-
-	tst_exit();
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	futex_supported_by_kernel(tv->fntype);
 }
+
+static struct tst_test test = {
+	.setup = setup,
+	.test_all = run,
+	.test_variants = ARRAY_SIZE(variants),
+	.forks_child = 1,
+};
diff --git a/testcases/kernel/syscalls/futex/futex_wake03.c b/testcases/kernel/syscalls/futex/futex_wake03.c
index d6e5e5422db9..29e586c40132 100644
--- a/testcases/kernel/syscalls/futex/futex_wake03.c
+++ b/testcases/kernel/syscalls/futex/futex_wake03.c
@@ -1,54 +1,51 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (C) 2015 Cyril Hrubis <chrubis@suse.cz>
  *
- * Licensed under the GNU GPLv2 or later.
- * This program is free software;  you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY;  without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program;  if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * Block several processes on a mutex, then wake them up.
  */
- /*
-  * Block several processes on a mutex, then wake them up.
-  */
 
 #include <errno.h>
 #include <sys/types.h>
 #include <sys/wait.h>
 
-#include "test.h"
-#include "safe_macros.h"
 #include "futextest.h"
-
-const char *TCID="futex_wake03";
-const int TST_TOTAL=11;
+#include "futex_utils.h"
 
 static futex_t *futex;
 
+static struct test_variants {
+	enum futex_fn_type fntype;
+	char *desc;
+} variants[] = {
+#if (__NR_futex != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_futex_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX64, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
 static void do_child(void)
 {
-	futex_wait(futex, *futex, NULL, 0);
+	struct test_variants *tv = &variants[tst_variant];
+
+	futex_wait(tv->fntype, futex, *futex, NULL, 0);
 	exit(0);
 }
 
 static void do_wake(int nr_children)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	int res, i, cnt;
 
-	res = futex_wake(futex, nr_children, 0);
+	res = futex_wake(tv->fntype, futex, nr_children, 0);
 
 	if (res != nr_children) {
-		tst_resm(TFAIL,
-		         "futex_wake() woken up %i children, expected %i",
-		         res, nr_children);
+		tst_res(TFAIL | TTERRNO,
+		        "futex_wake() woken up %i children, expected %i",
+			res, nr_children);
 		return;
 	}
 
@@ -63,65 +60,63 @@ static void do_wake(int nr_children)
 	}
 
 	if (cnt != nr_children) {
-		tst_resm(TFAIL, "reaped only %i childs, expected %i",
-		         cnt, nr_children);
+		tst_res(TFAIL | TTERRNO, "reaped only %i childs, expected %i",
+		        cnt, nr_children);
 	} else {
-		tst_resm(TPASS, "futex_wake() woken up %i childs", cnt);
+		tst_res(TPASS, "futex_wake() woken up %i childs", cnt);
 	}
 }
 
-static void verify_futex_wake(void)
+static void run(void)
 {
-	int i, res;
+	struct test_variants *tv = &variants[tst_variant];
 	pid_t pids[55];
+	unsigned int i;
+	int res;
 
-	for (i = 0; i < (int)ARRAY_SIZE(pids); i++) {
-		pids[i] = tst_fork();
+	for (i = 0; i < ARRAY_SIZE(pids); i++) {
+		pids[i] = SAFE_FORK();
 
 		switch (pids[i]) {
-		case -1:
-			tst_brkm(TBROK | TERRNO, NULL, "fork()");
 		case 0:
 			do_child();
 		default:
-		break;
+			break;
 		}
 	}
 
-	for (i = 0; i < (int)ARRAY_SIZE(pids); i++)
-		tst_process_state_wait2(pids[i], 'S');
+	for (i = 0; i < ARRAY_SIZE(pids); i++)
+		process_state_wait2(pids[i], 'S');
 
 	for (i = 1; i <= 10; i++)
 		do_wake(i);
 
-	res = futex_wake(futex, 1, 0);
+	res = futex_wake(tv->fntype, futex, 1, 0);
 
 	if (res) {
-		tst_resm(TFAIL, "futex_wake() woken up %u, none were waiting",
-		         res);
+		tst_res(TFAIL | TTERRNO, "futex_wake() woken up %u, none were waiting",
+			res);
 	} else {
-		tst_resm(TPASS, "futex_wake() woken up 0 children");
+		tst_res(TPASS, "futex_wake() woken up 0 children");
 	}
 }
 
 static void setup(void)
 {
-	futex = SAFE_MMAP(NULL, NULL, sizeof(*futex), PROT_READ | PROT_WRITE,
+	struct test_variants *tv = &variants[tst_variant];
+
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	futex_supported_by_kernel(tv->fntype);
+
+	futex = SAFE_MMAP(NULL, sizeof(*futex), PROT_READ | PROT_WRITE,
 			  MAP_ANONYMOUS | MAP_SHARED, -1, 0);
 
 	*futex = FUTEX_INITIALIZER;
 }
 
-int main(int argc, char *argv[])
-{
-	int lc;
-
-	tst_parse_opts(argc, argv, NULL, NULL);
-
-	setup();
-
-	for (lc = 0; TEST_LOOPING(lc); lc++)
-		verify_futex_wake();
-
-	tst_exit();
-}
+static struct tst_test test = {
+	.setup = setup,
+	.test_all = run,
+	.test_variants = ARRAY_SIZE(variants),
+	.forks_child = 1,
+};
diff --git a/testcases/kernel/syscalls/futex/futex_wake04.c b/testcases/kernel/syscalls/futex/futex_wake04.c
index f92bda53f6c7..582ebc4b917a 100644
--- a/testcases/kernel/syscalls/futex/futex_wake04.c
+++ b/testcases/kernel/syscalls/futex/futex_wake04.c
@@ -1,23 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (C) 2015  Yi Zhang <wetpzy@gmail.com>
  *                     Li Wang <liwang@redhat.com>
  *
- * Licensed under the GNU GPLv2 or later.
- * This program is free software;  you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY;  without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program;  if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
- /* DESCRIPTION:
+ * DESCRIPTION:
  *
  *   It is a regression test for commit:
  *   http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/
@@ -42,53 +28,59 @@
 #include <sys/time.h>
 #include <string.h>
 
-#include "test.h"
-#include "safe_macros.h"
 #include "futextest.h"
 #include "futex_utils.h"
 #include "lapi/mmap.h"
+#include "tst_safe_stdio.h"
 
 #define PATH_MEMINFO "/proc/meminfo"
 #define PATH_NR_HUGEPAGES "/proc/sys/vm/nr_hugepages"
 #define PATH_HUGEPAGES	"/sys/kernel/mm/hugepages/"
 
-const char *TCID = "futex_wake04";
-const int TST_TOTAL = 1;
-
 static futex_t *futex1, *futex2;
 
-static struct timespec to = {.tv_sec = 30, .tv_nsec = 0};
+static struct tst_ts to;
 
 static long orig_hugepages;
 
+static struct test_variants {
+	enum futex_fn_type fntype;
+	enum tst_ts_type tstype;
+	char *desc;
+} variants[] = {
+#if (__NR_futex != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX, .tstype = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
+
+#if (__NR_futex_time64 != __LTP__NR_INVALID_SYSCALL)
+	{ .fntype = FUTEX_FN_FUTEX64, .tstype = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
+
 static void setup(void)
 {
-	tst_require_root();
+	struct test_variants *tv = &variants[tst_variant];
 
-	if ((tst_kvercmp(2, 6, 32)) < 0) {
-		tst_brkm(TCONF, NULL, "This test can only run on kernels "
-			"that are 2.6.32 or higher");
-	}
+	tst_res(TINFO, "Testing variant: %s", tv->desc);
+	futex_supported_by_kernel(tv->fntype);
 
-	if (access(PATH_HUGEPAGES, F_OK))
-		tst_brkm(TCONF, NULL, "Huge page is not supported.");
+	to.type = tv->tstype;
+	tst_ts_set_sec(&to, 30);
+	tst_ts_set_nsec(&to, 0);
 
-	tst_tmpdir();
+	if (access(PATH_HUGEPAGES, F_OK))
+		tst_brk(TCONF, "Huge page is not supported.");
 
-	SAFE_FILE_SCANF(NULL, PATH_NR_HUGEPAGES, "%ld", &orig_hugepages);
+	SAFE_FILE_SCANF(PATH_NR_HUGEPAGES, "%ld", &orig_hugepages);
 
 	if (orig_hugepages <= 0)
-		SAFE_FILE_PRINTF(NULL, PATH_NR_HUGEPAGES, "%d", 1);
-
-	TEST_PAUSE;
+		SAFE_FILE_PRINTF(PATH_NR_HUGEPAGES, "%d", 1);
 }
 
 static void cleanup(void)
 {
 	if (orig_hugepages <= 0)
-		SAFE_FILE_PRINTF(NULL, PATH_NR_HUGEPAGES, "%ld", orig_hugepages);
-
-	tst_rmdir();
+		SAFE_FILE_PRINTF(PATH_NR_HUGEPAGES, "%ld", orig_hugepages);
 }
 
 static int read_hugepagesize(void)
@@ -97,60 +89,63 @@ static int read_hugepagesize(void)
 	char line[BUFSIZ], buf[BUFSIZ];
 	int val;
 
-	fp = SAFE_FOPEN(cleanup, PATH_MEMINFO, "r");
+	fp = SAFE_FOPEN(PATH_MEMINFO, "r");
 	while (fgets(line, BUFSIZ, fp) != NULL) {
 		if (sscanf(line, "%64s %d", buf, &val) == 2)
 			if (strcmp(buf, "Hugepagesize:") == 0) {
-				SAFE_FCLOSE(cleanup, fp);
+				SAFE_FCLOSE(fp);
 				return 1024 * val;
 			}
 	}
 
-	SAFE_FCLOSE(cleanup, fp);
-	tst_brkm(TBROK, NULL, "can't find \"%s\" in %s",
-			"Hugepagesize:", PATH_MEMINFO);
+	SAFE_FCLOSE(fp);
+	tst_res(TFAIL, "can't find \"%s\" in %s", "Hugepagesize:",
+		PATH_MEMINFO);
+	return 0;
 }
 
 static void *wait_thread1(void *arg LTP_ATTRIBUTE_UNUSED)
 {
-	futex_wait(futex1, *futex1, &to, 0);
+	struct test_variants *tv = &variants[tst_variant];
+
+	futex_wait(tv->fntype, futex1, *futex1, &to, 0);
 
 	return NULL;
 }
 
 static void *wait_thread2(void *arg LTP_ATTRIBUTE_UNUSED)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	int res;
 
-	res = futex_wait(futex2, *futex2, &to, 0);
+	res = futex_wait(tv->fntype, futex2, *futex2, &to, 0);
 	if (!res)
-		tst_resm(TPASS, "Hi hydra, thread2 awake!");
+		tst_res(TPASS, "Hi hydra, thread2 awake!");
 	else
-		tst_resm(TFAIL, "Bug: wait_thread2 did not wake after 30 secs.");
+		tst_res(TFAIL | TTERRNO, "Bug: wait_thread2 did not wake after 30 secs.");
 
 	return NULL;
 }
 
 static void wakeup_thread2(void)
 {
+	struct test_variants *tv = &variants[tst_variant];
 	void *addr;
 	int hpsz, pgsz, res;
 	pthread_t th1, th2;
 
 	hpsz = read_hugepagesize();
-	tst_resm(TINFO, "Hugepagesize %i", hpsz);
+	tst_res(TINFO, "Hugepagesize %i", hpsz);
 
 	/*allocate some shared memory*/
 	addr = mmap(NULL, hpsz, PROT_WRITE | PROT_READ,
 	            MAP_SHARED | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0);
 
 	if (addr == MAP_FAILED) {
-		if (errno == ENOMEM) {
-			tst_brkm(TCONF, NULL,
-				 "Cannot allocate hugepage, memory too fragmented?");
-		}
+		if (errno == ENOMEM)
+			tst_brk(TCONF, "Cannot allocate hugepage, memory too fragmented?");
 
-		tst_brkm(TBROK | TERRNO, NULL, "Cannot allocate hugepage");
+		tst_brk(TBROK | TERRNO, "Cannot allocate hugepage");
 	}
 
 	pgsz = getpagesize();
@@ -165,45 +160,47 @@ static void wakeup_thread2(void)
 	/*thread1 block on futex1 first,then thread2 block on futex2*/
 	res = pthread_create(&th1, NULL, wait_thread1, NULL);
 	if (res) {
-		tst_brkm(TBROK, NULL, "pthread_create(): %s",
-				tst_strerrno(res));
+		tst_res(TFAIL | TTERRNO, "pthread_create() failed");
+		return;
 	}
 
 	res = pthread_create(&th2, NULL, wait_thread2, NULL);
 	if (res) {
-		tst_brkm(TBROK, NULL, "pthread_create(): %s",
-				tst_strerrno(res));
+		tst_res(TFAIL | TTERRNO, "pthread_create() failed");
+		return;
 	}
 
 	while (wait_for_threads(2))
 		usleep(1000);
 
-	futex_wake(futex2, 1, 0);
+	futex_wake(tv->fntype, futex2, 1, 0);
 
 	res = pthread_join(th2, NULL);
-	if (res)
-		tst_brkm(TBROK, NULL, "pthread_join(): %s", tst_strerrno(res));
+	if (res) {
+		tst_res(TFAIL | TTERRNO, "pthread_join() failed");
+		return;
+	}
 
-	futex_wake(futex1, 1, 0);
+	futex_wake(tv->fntype, futex1, 1, 0);
 
 	res = pthread_join(th1, NULL);
 	if (res)
-		tst_brkm(TBROK, NULL, "pthread_join(): %s", tst_strerrno(res));
+		tst_res(TFAIL | TTERRNO, "pthread_join() failed");
 
-	SAFE_MUNMAP(NULL, addr, hpsz);
+	SAFE_MUNMAP(addr, hpsz);
 }
 
-int main(int argc, char *argv[])
+static void run(void)
 {
-	int lc;
-
-	tst_parse_opts(argc, argv, NULL, NULL);
-
-	setup();
-
-	for (lc = 0; TEST_LOOPING(lc); lc++)
-		wakeup_thread2();
-
-	cleanup();
-	tst_exit();
+	wakeup_thread2();
 }
+
+static struct tst_test test = {
+	.setup = setup,
+	.cleanup = cleanup,
+	.test_all = run,
+	.test_variants = ARRAY_SIZE(variants),
+	.needs_root = 1,
+	.min_kver = "2.6.32",
+	.needs_tmpdir = 1,
+};
diff --git a/testcases/kernel/syscalls/futex/futextest.h b/testcases/kernel/syscalls/futex/futextest.h
index 5754d36dae51..b72d83bc711b 100644
--- a/testcases/kernel/syscalls/futex/futextest.h
+++ b/testcases/kernel/syscalls/futex/futextest.h
@@ -39,6 +39,7 @@
 #include <sys/types.h>
 #include <linux/futex.h>
 #include "lapi/futex.h"
+#include "tst_timer.h"
 
 #define FUTEX_INITIALIZER 0
 
@@ -82,18 +83,35 @@
 # define FUTEX_CLOCK_REALTIME 256
 #endif
 
+enum futex_fn_type {
+	FUTEX_FN_FUTEX,
+	FUTEX_FN_FUTEX64,
+};
+
+static inline void futex_supported_by_kernel(enum futex_fn_type fntype)
+{
+	if (fntype != FUTEX_FN_FUTEX64)
+		return;
+
+	/* Check if the syscall is implemented on the platform */
+	TEST(sys_futex_time64(NULL, 0, 0, NULL, NULL, 0));
+	if (TST_RET == -1 && TST_ERR == ENOSYS)
+		tst_brk(TCONF, "Test not supported on kernel/platform");
+}
+
 /**
- * futex() - SYS_futex syscall wrapper
+ * futex_syscall() - futex syscall wrapper
+ * @fntype:	Futex function type
  * @uaddr:	address of first futex
  * @op:		futex op code
  * @val:	typically expected value of uaddr, but varies by op
- * @timeout:	typically an absolute struct timespec (except where noted
+ * @timeout:	typically an absolute struct tst_ts (except where noted
  *		otherwise). Overloaded by some ops
  * @uaddr2:	address of second futex for some ops\
  * @val3:	varies by op
  * @opflags:	flags to be bitwise OR'd with op, such as FUTEX_PRIVATE_FLAG
  *
- * futex() is used by all the following futex op wrappers. It can also be
+ * futex_syscall() is used by all the following futex op wrappers. It can also be
  * used for misuse and abuse testing. Generally, the specific op wrappers
  * should be used instead. It is a macro instead of an static inline function as
  * some of the types over overloaded (timeout is used for nr_requeue for
@@ -102,17 +120,30 @@
  * These argument descriptions are the defaults for all
  * like-named arguments in the following wrappers except where noted below.
  */
-#define futex(uaddr, op, val, timeout, uaddr2, val3, opflags) \
-	syscall(SYS_futex, uaddr, op | opflags, val, timeout, uaddr2, val3)
+static inline int futex_syscall(enum futex_fn_type fntype, futex_t *uaddr,
+				int futex_op, futex_t val, void *timeout,
+				futex_t *uaddr2, int val3, int opflags)
+{
+	int (*func)(int *uaddr, int futex_op, int val, void *to, int *uaddr2, int val3);
+
+	if (fntype == FUTEX_FN_FUTEX)
+		func = sys_futex;
+	else
+		func = sys_futex_time64;
+
+	return func((int *)uaddr, futex_op | opflags, val, timeout, (int *)uaddr2, val3);
+}
 
 /**
  * futex_wait() - block on uaddr with optional timeout
  * @timeout:	relative timeout
  */
 static inline int
-futex_wait(futex_t *uaddr, futex_t val, struct timespec *timeout, int opflags)
+futex_wait(enum futex_fn_type fntype, futex_t *uaddr, futex_t val,
+	   struct tst_ts *timeout, int opflags)
 {
-	return futex(uaddr, FUTEX_WAIT, val, timeout, NULL, 0, opflags);
+	return futex_syscall(fntype, uaddr, FUTEX_WAIT, val,
+			     tst_ts_get(timeout), NULL, 0, opflags);
 }
 
 /**
@@ -120,9 +151,10 @@ futex_wait(futex_t *uaddr, futex_t val, struct timespec *timeout, int opflags)
  * @nr_wake:	wake up to this many tasks
  */
 static inline int
-futex_wake(futex_t *uaddr, int nr_wake, int opflags)
+futex_wake(enum futex_fn_type fntype, futex_t *uaddr, int nr_wake, int opflags)
 {
-	return futex(uaddr, FUTEX_WAKE, nr_wake, NULL, NULL, 0, opflags);
+	return futex_syscall(fntype, uaddr, FUTEX_WAKE, nr_wake, NULL, NULL, 0,
+			     opflags);
 }
 
 /**
@@ -130,11 +162,11 @@ futex_wake(futex_t *uaddr, int nr_wake, int opflags)
  * @bitset:	bitset to be used with futex_wake_bitset
  */
 static inline int
-futex_wait_bitset(futex_t *uaddr, futex_t val, struct timespec *timeout,
-		  u_int32_t bitset, int opflags)
+futex_wait_bitset(enum futex_fn_type fntype, futex_t *uaddr, futex_t val,
+		  struct tst_ts *timeout, u_int32_t bitset, int opflags)
 {
-	return futex(uaddr, FUTEX_WAIT_BITSET, val, timeout, NULL, bitset,
-		     opflags);
+	return futex_syscall(fntype, uaddr, FUTEX_WAIT_BITSET, val,
+			     tst_ts_get(timeout), NULL, bitset, opflags);
 }
 
 /**
@@ -142,10 +174,11 @@ futex_wait_bitset(futex_t *uaddr, futex_t val, struct timespec *timeout,
  * @bitset:	bitset to compare with that used in futex_wait_bitset
  */
 static inline int
-futex_wake_bitset(futex_t *uaddr, int nr_wake, u_int32_t bitset, int opflags)
+futex_wake_bitset(enum futex_fn_type fntype, futex_t *uaddr, int nr_wake,
+		  u_int32_t bitset, int opflags)
 {
-	return futex(uaddr, FUTEX_WAKE_BITSET, nr_wake, NULL, NULL, bitset,
-		     opflags);
+	return futex_syscall(fntype, uaddr, FUTEX_WAKE_BITSET, nr_wake, NULL,
+			     NULL, bitset, opflags);
 }
 
 /**
@@ -153,30 +186,32 @@ futex_wake_bitset(futex_t *uaddr, int nr_wake, u_int32_t bitset, int opflags)
  * @detect:	whether (1) or not (0) to perform deadlock detection
  */
 static inline int
-futex_lock_pi(futex_t *uaddr, struct timespec *timeout, int detect,
-	      int opflags)
+futex_lock_pi(enum futex_fn_type fntype, futex_t *uaddr, struct tst_ts *timeout,
+	      int detect, int opflags)
 {
-	return futex(uaddr, FUTEX_LOCK_PI, detect, timeout, NULL, 0, opflags);
+	return futex_syscall(fntype, uaddr, FUTEX_LOCK_PI, detect,
+			     tst_ts_get(timeout), NULL, 0, opflags);
 }
 
 /**
  * futex_unlock_pi() - release uaddr as a PI mutex, waking the top waiter
  */
 static inline int
-futex_unlock_pi(futex_t *uaddr, int opflags)
+futex_unlock_pi(enum futex_fn_type fntype, futex_t *uaddr, int opflags)
 {
-	return futex(uaddr, FUTEX_UNLOCK_PI, 0, NULL, NULL, 0, opflags);
-}
+	return futex_syscall(fntype, uaddr, FUTEX_UNLOCK_PI, 0, NULL, NULL, 0,
+			     opflags); }
 
 /**
  * futex_wake_op() - FIXME: COME UP WITH A GOOD ONE LINE DESCRIPTION
  */
 static inline int
-futex_wake_op(futex_t *uaddr, futex_t *uaddr2, int nr_wake, int nr_wake2,
-	      int wake_op, int opflags)
+futex_wake_op(enum futex_fn_type fntype, futex_t *uaddr, futex_t *uaddr2,
+	      int nr_wake, int nr_wake2, int wake_op, int opflags)
 {
-	return futex(uaddr, FUTEX_WAKE_OP, nr_wake, nr_wake2, uaddr2, wake_op,
-		     opflags);
+	return futex_syscall(fntype, uaddr, FUTEX_WAKE_OP, nr_wake,
+			     (void *)((unsigned long)nr_wake2), uaddr2, wake_op,
+			     opflags);
 }
 
 /**
@@ -188,11 +223,12 @@ futex_wake_op(futex_t *uaddr, futex_t *uaddr2, int nr_wake, int nr_wake2,
  * favor of futex_cmp_requeue().
  */
 static inline int
-futex_requeue(futex_t *uaddr, futex_t *uaddr2, int nr_wake, int nr_requeue,
-	      int opflags)
+futex_requeue(enum futex_fn_type fntype, futex_t *uaddr, futex_t *uaddr2,
+	      int nr_wake, int nr_requeue, int opflags)
 {
-	return futex(uaddr, FUTEX_REQUEUE, nr_wake, nr_requeue, uaddr2, 0,
-		     opflags);
+	return futex_syscall(fntype, uaddr, FUTEX_REQUEUE, nr_wake,
+			     (void *)((unsigned long)nr_requeue), uaddr2, 0,
+			     opflags);
 }
 
 /**
@@ -201,11 +237,12 @@ futex_requeue(futex_t *uaddr, futex_t *uaddr2, int nr_wake, int nr_requeue,
  * @nr_requeue:	requeue up to this many tasks
  */
 static inline int
-futex_cmp_requeue(futex_t *uaddr, futex_t val, futex_t *uaddr2, int nr_wake,
-		  int nr_requeue, int opflags)
+futex_cmp_requeue(enum futex_fn_type fntype, futex_t *uaddr, futex_t val,
+		  futex_t *uaddr2, int nr_wake, int nr_requeue, int opflags)
 {
-	return futex(uaddr, FUTEX_CMP_REQUEUE, nr_wake, nr_requeue, uaddr2,
-		     val, opflags);
+	return futex_syscall(fntype, uaddr, FUTEX_CMP_REQUEUE, nr_wake,
+			     (void *)((unsigned long)nr_requeue), uaddr2, val,
+			     opflags);
 }
 
 /**
@@ -217,11 +254,11 @@ futex_cmp_requeue(futex_t *uaddr, futex_t val, futex_t *uaddr2, int nr_wake,
  * paired with futex_cmp_requeue_pi().
  */
 static inline int
-futex_wait_requeue_pi(futex_t *uaddr, futex_t val, futex_t *uaddr2,
-		      struct timespec *timeout, int opflags)
+futex_wait_requeue_pi(enum futex_fn_type fntype, futex_t *uaddr, futex_t val,
+		      futex_t *uaddr2, struct tst_ts *timeout, int opflags)
 {
-	return futex(uaddr, FUTEX_WAIT_REQUEUE_PI, val, timeout, uaddr2, 0,
-		     opflags);
+	return futex_syscall(fntype, uaddr, FUTEX_WAIT_REQUEUE_PI, val,
+			     tst_ts_get(timeout), uaddr2, 0, opflags);
 }
 
 /**
@@ -232,11 +269,12 @@ futex_wait_requeue_pi(futex_t *uaddr, futex_t val, futex_t *uaddr2,
  * @nr_requeue:	requeue up to this many tasks
  */
 static inline int
-futex_cmp_requeue_pi(futex_t *uaddr, futex_t val, futex_t *uaddr2, int nr_wake,
-		     int nr_requeue, int opflags)
+futex_cmp_requeue_pi(enum futex_fn_type fntype, futex_t *uaddr, futex_t val,
+		     futex_t *uaddr2, int nr_wake, int nr_requeue, int opflags)
 {
-	return futex(uaddr, FUTEX_CMP_REQUEUE_PI, nr_wake, nr_requeue, uaddr2, val,
-		     opflags);
+	return futex_syscall(fntype, uaddr, FUTEX_CMP_REQUEUE_PI, nr_wake,
+			     (void *)((unsigned long)nr_requeue), uaddr2, val,
+			     opflags);
 }
 
 /**
-- 
2.25.0.rc1.19.g042ed3e048af


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V6 01/17] syscalls/timer_gettime: Add support for time64 tests
  2020-05-22 10:51 ` [LTP] [PATCH V4 01/17] syscalls/timer_gettime: Add support for time64 tests Viresh Kumar
  2020-06-09 12:32   ` Li Wang
  2020-06-10  3:34   ` [LTP] [PATCH V5 " Viresh Kumar
@ 2020-06-10  3:38   ` Viresh Kumar
  2020-06-24 14:23     ` Cyril Hrubis
  2 siblings, 1 reply; 33+ messages in thread
From: Viresh Kumar @ 2020-06-10  3:38 UTC (permalink / raw)
  To: ltp

This adds support for time64 tests to the existing timer_gettime()
syscall tests.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
V6: Drop the binary files included by mistake.

 include/tst_timer.h                           |  45 +++++++
 .../syscalls/timer_gettime/timer_gettime01.c  | 124 ++++++++----------
 2 files changed, 97 insertions(+), 72 deletions(-)

diff --git a/include/tst_timer.h b/include/tst_timer.h
index 256e1d71e1bc..708a1e9e9a7a 100644
--- a/include/tst_timer.h
+++ b/include/tst_timer.h
@@ -15,6 +15,7 @@
 #include <sys/time.h>
 #include <time.h>
 #include "tst_test.h"
+#include "lapi/common_timers.h"
 #include "lapi/syscalls.h"
 
 /*
@@ -112,6 +113,16 @@ struct __kernel_timespec {
 	__kernel_time64_t       tv_sec;                 /* seconds */
 	long long               tv_nsec;                /* nanoseconds */
 };
+
+struct __kernel_old_itimerspec {
+	struct __kernel_old_timespec it_interval;    /* timer period */
+	struct __kernel_old_timespec it_value;       /* timer expiration */
+};
+
+struct __kernel_itimerspec {
+	struct __kernel_timespec it_interval;    /* timer period */
+	struct __kernel_timespec it_value;       /* timer expiration */
+};
 #endif
 
 enum tst_ts_type {
@@ -129,6 +140,14 @@ struct tst_ts {
 	} ts;
 };
 
+struct tst_its {
+	enum tst_ts_type type;
+	union {
+		struct __kernel_old_itimerspec kern_old_its;
+		struct __kernel_itimerspec kern_its;
+	} ts;
+};
+
 static inline void *tst_ts_get(struct tst_ts *t)
 {
 	if (!t)
@@ -147,6 +166,22 @@ static inline void *tst_ts_get(struct tst_ts *t)
 	}
 }
 
+static inline void *tst_its_get(struct tst_its *t)
+{
+	if (!t)
+		return NULL;
+
+	switch (t->type) {
+	case TST_KERN_OLD_TIMESPEC:
+		return &t->ts.kern_old_its;
+	case TST_KERN_TIMESPEC:
+		return &t->ts.kern_its;
+	default:
+		tst_brk(TBROK, "Invalid type: %d", t->type);
+		return NULL;
+	}
+}
+
 static inline int libc_clock_getres(clockid_t clk_id, void *ts)
 {
 	return clock_getres(clk_id, ts);
@@ -212,6 +247,16 @@ static inline int sys_clock_nanosleep64(clockid_t clk_id, int flags,
 			   request, remain);
 }
 
+static inline int sys_timer_gettime(timer_t timerid, void *its)
+{
+	return tst_syscall(__NR_timer_gettime, timerid, its);
+}
+
+static inline int sys_timer_gettime64(timer_t timerid, void *its)
+{
+	return tst_syscall(__NR_timer_gettime64, timerid, its);
+}
+
 /*
  * Returns tst_ts seconds.
  */
diff --git a/testcases/kernel/syscalls/timer_gettime/timer_gettime01.c b/testcases/kernel/syscalls/timer_gettime/timer_gettime01.c
index 1c75f1cf0e45..d2b89eab4223 100644
--- a/testcases/kernel/syscalls/timer_gettime/timer_gettime01.c
+++ b/testcases/kernel/syscalls/timer_gettime/timer_gettime01.c
@@ -1,24 +1,5 @@
-/******************************************************************************
- * Copyright (c) Crackerjack Project., 2007                                   *
- * Porting from Crackerjack to LTP is done by:                                *
- *              Manas Kumar Nayak <maknayak@in.ibm.com>                       *
- * Copyright (c) 2013 Cyril Hrubis <chrubis@suse.cz>                          *
- *                                                                            *
- * This program is free software;  you can redistribute it and/or modify      *
- * it under the terms of the GNU General Public License as published by       *
- * the Free Software Foundation; either version 2 of the License, or          *
- * (at your option) any later version.                                        *
- *                                                                            *
- * This program is distributed in the hope that it will be useful,            *
- * but WITHOUT ANY WARRANTY;  without even the implied warranty of            *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See                  *
- * the GNU General Public License for more details.                           *
- *                                                                            *
- * You should have received a copy of the GNU General Public License          *
- * along with this program;  if not, write to the Free Software Foundation,   *
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA           *
- *                                                                            *
- ******************************************************************************/
+// SPDX-License-Identifier: GPL-2.0-or-later
+/* Copyright (c) Crackerjack Project., 2007 */
 
 #include <time.h>
 #include <signal.h>
@@ -26,71 +7,70 @@
 #include <stdio.h>
 #include <errno.h>
 
-#include "test.h"
-#include "lapi/syscalls.h"
+#include "tst_timer.h"
 
-char *TCID = "timer_gettime01";
-int TST_TOTAL = 3;
+static struct test_variants {
+	int (*func)(timer_t timer, void *its);
+	enum tst_ts_type type;
+	char *desc;
+} variants[] = {
+#if (__NR_timer_gettime != __LTP__NR_INVALID_SYSCALL)
+	{ .func = sys_timer_gettime, .type = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
+#endif
 
-static void cleanup(void)
-{
-	tst_rmdir();
-}
+#if (__NR_timer_gettime64 != __LTP__NR_INVALID_SYSCALL)
+	{ .func = sys_timer_gettime64, .type = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
+#endif
+};
 
-static void setup(void)
-{
-	TEST_PAUSE;
-	tst_tmpdir();
-}
+static timer_t timer;
 
-int main(int ac, char **av)
+static void setup(void)
 {
-	int lc;
-
 	struct sigevent ev;
-	struct itimerspec spec;
-	int timer;
 
-	tst_parse_opts(ac, av, NULL, NULL);
-
-	setup();
+	tst_res(TINFO, "Testing variant: %s", variants[tst_variant].desc);
 
 	ev.sigev_value = (union sigval) 0;
 	ev.sigev_signo = SIGALRM;
 	ev.sigev_notify = SIGEV_SIGNAL;
-	TEST(ltp_syscall(__NR_timer_create, CLOCK_REALTIME, &ev, &timer));
-
-	if (TEST_RETURN != 0)
-		tst_brkm(TBROK | TERRNO, cleanup, "Failed to create timer");
 
-	for (lc = 0; TEST_LOOPING(lc); ++lc) {
-		tst_count = 0;
+	TEST(tst_syscall(__NR_timer_create, CLOCK_REALTIME, &ev, &timer));
 
-		TEST(ltp_syscall(__NR_timer_gettime, timer, &spec));
-		if (TEST_RETURN == 0) {
-			tst_resm(TPASS, "timer_gettime(CLOCK_REALTIME) Passed");
-		} else {
-			tst_resm(TFAIL | TERRNO,
-			         "timer_gettime(CLOCK_REALTIME) Failed");
-		}
-
-		TEST(ltp_syscall(__NR_timer_gettime, -1, &spec));
-		if (TEST_RETURN == -1 && TEST_ERRNO == EINVAL) {
-			tst_resm(TPASS,	"timer_gettime(-1) Failed: EINVAL");
-		} else {
-			tst_resm(TFAIL | TERRNO,
-			         "timer_gettime(-1) = %li", TEST_RETURN);
-		}
+	if (TST_RET) {
+		tst_res(TFAIL | TTERRNO, "timer_create() failed");
+		return;
+	}
+}
 
-		TEST(ltp_syscall(__NR_timer_gettime, timer, NULL));
-		if (TEST_RETURN == -1 && TEST_ERRNO == EFAULT) {
-			tst_resm(TPASS,	"timer_gettime(NULL) Failed: EFAULT");
-		} else {
-			tst_resm(TFAIL | TERRNO,
-			         "timer_gettime(-1) = %li", TEST_RETURN);
-		}
+static void verify(void)
+{
+	struct test_variants *tv = &variants[tst_variant];
+	struct tst_its spec = {.type = tv->type, };
+
+	TEST(tv->func(timer, tst_its_get(&spec)));
+	if (TST_RET == 0) {
+		tst_res(TPASS, "timer_gettime() Passed");
+	} else {
+		tst_res(TFAIL | TTERRNO, "timer_gettime() Failed");
 	}
 
-	cleanup();
-	tst_exit();
+	TEST(tv->func((timer_t)-1, tst_its_get(&spec)));
+	if (TST_RET == -1 && TST_ERR == EINVAL)
+		tst_res(TPASS, "timer_gettime(-1) Failed: EINVAL");
+	else
+		tst_res(TFAIL | TTERRNO, "timer_gettime(-1) = %li", TST_RET);
+
+	TEST(tv->func(timer, NULL));
+	if (TST_RET == -1 && TST_ERR == EFAULT)
+		tst_res(TPASS, "timer_gettime(NULL) Failed: EFAULT");
+	else
+		tst_res(TFAIL | TTERRNO, "timer_gettime(-1) = %li", TST_RET);
 }
+
+static struct tst_test test = {
+	.test_all = verify,
+	.test_variants = ARRAY_SIZE(variants),
+	.setup = setup,
+	.needs_tmpdir = 1,
+};
-- 
2.25.0.rc1.19.g042ed3e048af


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V6 01/17] syscalls/timer_gettime: Add support for time64 tests
  2020-06-10  3:38   ` [LTP] [PATCH V6 " Viresh Kumar
@ 2020-06-24 14:23     ` Cyril Hrubis
  2020-06-25  9:50       ` Viresh Kumar
  0 siblings, 1 reply; 33+ messages in thread
From: Cyril Hrubis @ 2020-06-24 14:23 UTC (permalink / raw)
  To: ltp

Hi!
> This adds support for time64 tests to the existing timer_gettime()
> syscall tests.
> 
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
> ---
> V6: Drop the binary files included by mistake.
> 
>  include/tst_timer.h                           |  45 +++++++
>  .../syscalls/timer_gettime/timer_gettime01.c  | 124 ++++++++----------
>  2 files changed, 97 insertions(+), 72 deletions(-)
> 
> diff --git a/include/tst_timer.h b/include/tst_timer.h
> index 256e1d71e1bc..708a1e9e9a7a 100644
> --- a/include/tst_timer.h
> +++ b/include/tst_timer.h
> @@ -15,6 +15,7 @@
>  #include <sys/time.h>
>  #include <time.h>
>  #include "tst_test.h"
> +#include "lapi/common_timers.h"
>  #include "lapi/syscalls.h"
>  
>  /*
> @@ -112,6 +113,16 @@ struct __kernel_timespec {
>  	__kernel_time64_t       tv_sec;                 /* seconds */
>  	long long               tv_nsec;                /* nanoseconds */
>  };
> +
> +struct __kernel_old_itimerspec {
> +	struct __kernel_old_timespec it_interval;    /* timer period */
> +	struct __kernel_old_timespec it_value;       /* timer expiration */
> +};
> +
> +struct __kernel_itimerspec {
> +	struct __kernel_timespec it_interval;    /* timer period */
> +	struct __kernel_timespec it_value;       /* timer expiration */
> +};
>  #endif
>  
>  enum tst_ts_type {
> @@ -129,6 +140,14 @@ struct tst_ts {
>  	} ts;
>  };
>  
> +struct tst_its {
> +	enum tst_ts_type type;
> +	union {
> +		struct __kernel_old_itimerspec kern_old_its;
> +		struct __kernel_itimerspec kern_its;
> +	} ts;
> +};
> +
>  static inline void *tst_ts_get(struct tst_ts *t)
>  {
>  	if (!t)
> @@ -147,6 +166,22 @@ static inline void *tst_ts_get(struct tst_ts *t)
>  	}
>  }
>  
> +static inline void *tst_its_get(struct tst_its *t)
> +{
> +	if (!t)
> +		return NULL;
> +
> +	switch (t->type) {
> +	case TST_KERN_OLD_TIMESPEC:
> +		return &t->ts.kern_old_its;
> +	case TST_KERN_TIMESPEC:
> +		return &t->ts.kern_its;
> +	default:
> +		tst_brk(TBROK, "Invalid type: %d", t->type);
> +		return NULL;
> +	}
> +}
> +
>  static inline int libc_clock_getres(clockid_t clk_id, void *ts)
>  {
>  	return clock_getres(clk_id, ts);
> @@ -212,6 +247,16 @@ static inline int sys_clock_nanosleep64(clockid_t clk_id, int flags,
>  			   request, remain);
>  }
>  
> +static inline int sys_timer_gettime(timer_t timerid, void *its)
> +{
> +	return tst_syscall(__NR_timer_gettime, timerid, its);
> +}
> +
> +static inline int sys_timer_gettime64(timer_t timerid, void *its)
> +{
> +	return tst_syscall(__NR_timer_gettime64, timerid, its);
> +}
> +
>  /*
>   * Returns tst_ts seconds.
>   */
> diff --git a/testcases/kernel/syscalls/timer_gettime/timer_gettime01.c b/testcases/kernel/syscalls/timer_gettime/timer_gettime01.c
> index 1c75f1cf0e45..d2b89eab4223 100644
> --- a/testcases/kernel/syscalls/timer_gettime/timer_gettime01.c
> +++ b/testcases/kernel/syscalls/timer_gettime/timer_gettime01.c
> @@ -1,24 +1,5 @@
> -/******************************************************************************
> - * Copyright (c) Crackerjack Project., 2007                                   *
> - * Porting from Crackerjack to LTP is done by:                                *
> - *              Manas Kumar Nayak <maknayak@in.ibm.com>                       *
> - * Copyright (c) 2013 Cyril Hrubis <chrubis@suse.cz>                          *
> - *                                                                            *
> - * This program is free software;  you can redistribute it and/or modify      *
> - * it under the terms of the GNU General Public License as published by       *
> - * the Free Software Foundation; either version 2 of the License, or          *
> - * (at your option) any later version.                                        *
> - *                                                                            *
> - * This program is distributed in the hope that it will be useful,            *
> - * but WITHOUT ANY WARRANTY;  without even the implied warranty of            *
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See                  *
> - * the GNU General Public License for more details.                           *
> - *                                                                            *
> - * You should have received a copy of the GNU General Public License          *
> - * along with this program;  if not, write to the Free Software Foundation,   *
> - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA           *
> - *                                                                            *
> - ******************************************************************************/
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/* Copyright (c) Crackerjack Project., 2007 */

You have dropped two copyright from there...

>  #include <time.h>
>  #include <signal.h>
> @@ -26,71 +7,70 @@
>  #include <stdio.h>
>  #include <errno.h>
>  
> -#include "test.h"
> -#include "lapi/syscalls.h"
> +#include "tst_timer.h"
>  
> -char *TCID = "timer_gettime01";
> -int TST_TOTAL = 3;
> +static struct test_variants {
> +	int (*func)(timer_t timer, void *its);
> +	enum tst_ts_type type;
> +	char *desc;
> +} variants[] = {
> +#if (__NR_timer_gettime != __LTP__NR_INVALID_SYSCALL)
> +	{ .func = sys_timer_gettime, .type = TST_KERN_OLD_TIMESPEC, .desc = "syscall with old kernel spec"},
> +#endif
>  
> -static void cleanup(void)
> -{
> -	tst_rmdir();
> -}
> +#if (__NR_timer_gettime64 != __LTP__NR_INVALID_SYSCALL)
> +	{ .func = sys_timer_gettime64, .type = TST_KERN_TIMESPEC, .desc = "syscall time64 with kernel spec"},
> +#endif
> +};
>  
> -static void setup(void)
> -{
> -	TEST_PAUSE;
> -	tst_tmpdir();
> -}
> +static timer_t timer;
>  
> -int main(int ac, char **av)
> +static void setup(void)
>  {
> -	int lc;
> -
>  	struct sigevent ev;
> -	struct itimerspec spec;
> -	int timer;
>  
> -	tst_parse_opts(ac, av, NULL, NULL);
> -
> -	setup();
> +	tst_res(TINFO, "Testing variant: %s", variants[tst_variant].desc);
>  
>  	ev.sigev_value = (union sigval) 0;
>  	ev.sigev_signo = SIGALRM;
>  	ev.sigev_notify = SIGEV_SIGNAL;
> -	TEST(ltp_syscall(__NR_timer_create, CLOCK_REALTIME, &ev, &timer));
> -
> -	if (TEST_RETURN != 0)
> -		tst_brkm(TBROK | TERRNO, cleanup, "Failed to create timer");
>  
> -	for (lc = 0; TEST_LOOPING(lc); ++lc) {
> -		tst_count = 0;
> +	TEST(tst_syscall(__NR_timer_create, CLOCK_REALTIME, &ev, &timer));
>  
> -		TEST(ltp_syscall(__NR_timer_gettime, timer, &spec));
> -		if (TEST_RETURN == 0) {
> -			tst_resm(TPASS, "timer_gettime(CLOCK_REALTIME) Passed");
> -		} else {
> -			tst_resm(TFAIL | TERRNO,
> -			         "timer_gettime(CLOCK_REALTIME) Failed");
> -		}
> -
> -		TEST(ltp_syscall(__NR_timer_gettime, -1, &spec));
> -		if (TEST_RETURN == -1 && TEST_ERRNO == EINVAL) {
> -			tst_resm(TPASS,	"timer_gettime(-1) Failed: EINVAL");
> -		} else {
> -			tst_resm(TFAIL | TERRNO,
> -			         "timer_gettime(-1) = %li", TEST_RETURN);
> -		}
> +	if (TST_RET) {
> +		tst_res(TFAIL | TTERRNO, "timer_create() failed");
> +		return;
> +	}
> +}
>  
> -		TEST(ltp_syscall(__NR_timer_gettime, timer, NULL));
> -		if (TEST_RETURN == -1 && TEST_ERRNO == EFAULT) {
> -			tst_resm(TPASS,	"timer_gettime(NULL) Failed: EFAULT");
> -		} else {
> -			tst_resm(TFAIL | TERRNO,
> -			         "timer_gettime(-1) = %li", TEST_RETURN);
> -		}
> +static void verify(void)
> +{
> +	struct test_variants *tv = &variants[tst_variant];
> +	struct tst_its spec = {.type = tv->type, };
> +
> +	TEST(tv->func(timer, tst_its_get(&spec)));
> +	if (TST_RET == 0) {
> +		tst_res(TPASS, "timer_gettime() Passed");
> +	} else {
> +		tst_res(TFAIL | TTERRNO, "timer_gettime() Failed");
>  	}

Looking at manuals it seems that:

* Newly created timer is disarmed

* For disarmed timers the clock_gettime() should get itimer with zeroes

So we check here that the returned itimer has zeroes for both oneshoot
and interval timers here.


Other than that it looks good.

-- 
Cyril Hrubis
chrubis@suse.cz

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V4 02/17] syscalls/timer_settime: Add support for time64 tests
  2020-05-22 10:51 ` [LTP] [PATCH V4 02/17] syscalls/timer_settime: " Viresh Kumar
@ 2020-06-24 14:30   ` Cyril Hrubis
  2020-06-25  9:56     ` Viresh Kumar
  0 siblings, 1 reply; 33+ messages in thread
From: Cyril Hrubis @ 2020-06-24 14:30 UTC (permalink / raw)
  To: ltp

Hi!
So this test depends on the previous one since we are adding the tst_its
piece by piece, shouldn't we add all the functions into the tst_timer.h
in a separate patch?

-- 
Cyril Hrubis
chrubis@suse.cz

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V6 01/17] syscalls/timer_gettime: Add support for time64 tests
  2020-06-24 14:23     ` Cyril Hrubis
@ 2020-06-25  9:50       ` Viresh Kumar
  2020-06-25 11:07         ` Cyril Hrubis
  0 siblings, 1 reply; 33+ messages in thread
From: Viresh Kumar @ 2020-06-25  9:50 UTC (permalink / raw)
  To: ltp

On 24-06-20, 16:23, Cyril Hrubis wrote:
> > +static void verify(void)
> > +{
> > +	struct test_variants *tv = &variants[tst_variant];
> > +	struct tst_its spec = {.type = tv->type, };
> > +
> > +	TEST(tv->func(timer, tst_its_get(&spec)));
> > +	if (TST_RET == 0) {
> > +		tst_res(TPASS, "timer_gettime() Passed");
> > +	} else {
> > +		tst_res(TFAIL | TTERRNO, "timer_gettime() Failed");
> >  	}
> 
> Looking at manuals it seems that:
> 
> * Newly created timer is disarmed
> 
> * For disarmed timers the clock_gettime() should get itimer with zeroes
> 
> So we check here that the returned itimer has zeroes for both oneshoot
> and interval timers here.

I am not sure what oneshoot/interval timers you are talking about :)

This is what I came to, is this sufficient ?

diff --git a/testcases/kernel/syscalls/timer_gettime/timer_gettime01.c b/testcases/kernel/syscalls/timer_gettime/timer_gettime01.c
index ea7cc6b59f7e..4a949486a920 100644
--- a/testcases/kernel/syscalls/timer_gettime/timer_gettime01.c
+++ b/testcases/kernel/syscalls/timer_gettime/timer_gettime01.c
@@ -55,7 +55,19 @@ static void verify(void)
 
        TEST(tv->func(timer, tst_its_get(&spec)));
        if (TST_RET == 0) {
-               tst_res(TPASS, "timer_gettime() Passed");
+               if ((spec.type == TST_KERN_OLD_TIMESPEC &&
+                       (spec.ts.kern_old_its.it_interval.tv_sec ||
+                        spec.ts.kern_old_its.it_interval.tv_nsec ||
+                        spec.ts.kern_old_its.it_value.tv_sec ||
+                        spec.ts.kern_old_its.it_value.tv_nsec)) ||
+                   (spec.type == TST_KERN_TIMESPEC &&
+                       (spec.ts.kern_its.it_interval.tv_sec ||
+                        spec.ts.kern_its.it_interval.tv_nsec ||
+                        spec.ts.kern_its.it_value.tv_sec ||
+                        spec.ts.kern_its.it_value.tv_nsec)))
+                       tst_res(TFAIL, "timespec should have been zeroed");
+               else
+                       tst_res(TPASS, "timer_gettime() Passed");
        } else {
                tst_res(TFAIL | TTERRNO, "timer_gettime() Failed");
        }

-- 
viresh

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V4 02/17] syscalls/timer_settime: Add support for time64 tests
  2020-06-24 14:30   ` Cyril Hrubis
@ 2020-06-25  9:56     ` Viresh Kumar
  2020-06-25 11:12       ` Cyril Hrubis
  0 siblings, 1 reply; 33+ messages in thread
From: Viresh Kumar @ 2020-06-25  9:56 UTC (permalink / raw)
  To: ltp

On 24-06-20, 16:30, Cyril Hrubis wrote:
> Hi!
> So this test depends on the previous one since we are adding the tst_its
> piece by piece, shouldn't we add all the functions into the tst_timer.h
> in a separate patch?

You mean functions related only to "its" ? Or all the wrappers for
various syscalls that are getting added to tst_timer.h ?

-- 
viresh

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V6 01/17] syscalls/timer_gettime: Add support for time64 tests
  2020-06-25  9:50       ` Viresh Kumar
@ 2020-06-25 11:07         ` Cyril Hrubis
  2020-06-25 11:10           ` Viresh Kumar
  0 siblings, 1 reply; 33+ messages in thread
From: Cyril Hrubis @ 2020-06-25 11:07 UTC (permalink / raw)
  To: ltp

Hi!
> > > +static void verify(void)
> > > +{
> > > +	struct test_variants *tv = &variants[tst_variant];
> > > +	struct tst_its spec = {.type = tv->type, };
> > > +
> > > +	TEST(tv->func(timer, tst_its_get(&spec)));
> > > +	if (TST_RET == 0) {
> > > +		tst_res(TPASS, "timer_gettime() Passed");
> > > +	} else {
> > > +		tst_res(TFAIL | TTERRNO, "timer_gettime() Failed");
> > >  	}
> > 
> > Looking at manuals it seems that:
> > 
> > * Newly created timer is disarmed
> > 
> > * For disarmed timers the clock_gettime() should get itimer with zeroes
> > 
> > So we check here that the returned itimer has zeroes for both oneshoot
> > and interval timers here.
> 
> I am not sure what oneshoot/interval timers you are talking about :)

These are the two timerspec structures inside of the itimerspec, one of
them is for oneshoot timer/alarm and the second one is for reocurring
timer/alarm and called interval.

> This is what I came to, is this sufficient ?
> 
> diff --git a/testcases/kernel/syscalls/timer_gettime/timer_gettime01.c b/testcases/kernel/syscalls/timer_gettime/timer_gettime01.c
> index ea7cc6b59f7e..4a949486a920 100644
> --- a/testcases/kernel/syscalls/timer_gettime/timer_gettime01.c
> +++ b/testcases/kernel/syscalls/timer_gettime/timer_gettime01.c
> @@ -55,7 +55,19 @@ static void verify(void)
>  
>         TEST(tv->func(timer, tst_its_get(&spec)));
>         if (TST_RET == 0) {
> -               tst_res(TPASS, "timer_gettime() Passed");
> +               if ((spec.type == TST_KERN_OLD_TIMESPEC &&
> +                       (spec.ts.kern_old_its.it_interval.tv_sec ||
> +                        spec.ts.kern_old_its.it_interval.tv_nsec ||
> +                        spec.ts.kern_old_its.it_value.tv_sec ||
> +                        spec.ts.kern_old_its.it_value.tv_nsec)) ||
> +                   (spec.type == TST_KERN_TIMESPEC &&
> +                       (spec.ts.kern_its.it_interval.tv_sec ||
> +                        spec.ts.kern_its.it_interval.tv_nsec ||
> +                        spec.ts.kern_its.it_value.tv_sec ||
> +                        spec.ts.kern_its.it_value.tv_nsec)))
> +                       tst_res(TFAIL, "timespec should have been zeroed");

Indeed that's what I had in mind, can we please abstract this properly
as well? I guess that we can add helpers such as tst_its_interval_sec()
tst_its_inverval_nsec, etc.

> +               else
> +                       tst_res(TPASS, "timer_gettime() Passed");
>         } else {
>                 tst_res(TFAIL | TTERRNO, "timer_gettime() Failed");
>         }
> 
> -- 
> viresh

-- 
Cyril Hrubis
chrubis@suse.cz

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V6 01/17] syscalls/timer_gettime: Add support for time64 tests
  2020-06-25 11:07         ` Cyril Hrubis
@ 2020-06-25 11:10           ` Viresh Kumar
  2020-06-25 11:13             ` Cyril Hrubis
  0 siblings, 1 reply; 33+ messages in thread
From: Viresh Kumar @ 2020-06-25 11:10 UTC (permalink / raw)
  To: ltp

On 25-06-20, 13:07, Cyril Hrubis wrote:
> >         TEST(tv->func(timer, tst_its_get(&spec)));
> >         if (TST_RET == 0) {
> > -               tst_res(TPASS, "timer_gettime() Passed");
> > +               if ((spec.type == TST_KERN_OLD_TIMESPEC &&
> > +                       (spec.ts.kern_old_its.it_interval.tv_sec ||
> > +                        spec.ts.kern_old_its.it_interval.tv_nsec ||
> > +                        spec.ts.kern_old_its.it_value.tv_sec ||
> > +                        spec.ts.kern_old_its.it_value.tv_nsec)) ||
> > +                   (spec.type == TST_KERN_TIMESPEC &&
> > +                       (spec.ts.kern_its.it_interval.tv_sec ||
> > +                        spec.ts.kern_its.it_interval.tv_nsec ||
> > +                        spec.ts.kern_its.it_value.tv_sec ||
> > +                        spec.ts.kern_its.it_value.tv_nsec)))
> > +                       tst_res(TFAIL, "timespec should have been zeroed");
> 
> Indeed that's what I had in mind, can we please abstract this properly
> as well? I guess that we can add helpers such as tst_its_interval_sec()
> tst_its_inverval_nsec, etc.

I preferred it this way as no one else uses it and so maybe we can
live without adding those helpers ?

-- 
viresh

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V4 02/17] syscalls/timer_settime: Add support for time64 tests
  2020-06-25  9:56     ` Viresh Kumar
@ 2020-06-25 11:12       ` Cyril Hrubis
  0 siblings, 0 replies; 33+ messages in thread
From: Cyril Hrubis @ 2020-06-25 11:12 UTC (permalink / raw)
  To: ltp

Hi!
> > So this test depends on the previous one since we are adding the tst_its
> > piece by piece, shouldn't we add all the functions into the tst_timer.h
> > in a separate patch?
> 
> You mean functions related only to "its" ? Or all the wrappers for
> various syscalls that are getting added to tst_timer.h ?

I guess that it would be easier to add all the code to tst_timer.h in
one go, then we can focus on the actual tests. This avoids having
dependencies between the patches touching the tests and allows them to
be merged out of order...

-- 
Cyril Hrubis
chrubis@suse.cz

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V6 01/17] syscalls/timer_gettime: Add support for time64 tests
  2020-06-25 11:10           ` Viresh Kumar
@ 2020-06-25 11:13             ` Cyril Hrubis
  0 siblings, 0 replies; 33+ messages in thread
From: Cyril Hrubis @ 2020-06-25 11:13 UTC (permalink / raw)
  To: ltp

Hi!
> > Indeed that's what I had in mind, can we please abstract this properly
> > as well? I guess that we can add helpers such as tst_its_interval_sec()
> > tst_its_inverval_nsec, etc.
> 
> I preferred it this way as no one else uses it and so maybe we can
> live without adding those helpers ?

I'm pretty sure we will need them for the timer_settime() tests anyway,
i.e. test that would do timer_settime() and then timer_gettime() to
check that the timer is read back correclty.

-- 
Cyril Hrubis
chrubis@suse.cz

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [LTP] [PATCH V4 13/17] syscalls/select6: Add support for time64 tests
  2020-05-18  8:15 [LTP] [PATCH V3 14/17] syscalls/semop: Migrate to new test framework Viresh Kumar
@ 2020-05-18 10:27 ` Viresh Kumar
  0 siblings, 0 replies; 33+ messages in thread
From: Viresh Kumar @ 2020-05-18 10:27 UTC (permalink / raw)
  To: ltp

This adds support for time64 tests to the existing select6() syscall
tests.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
V4:
- Move the setting of tv_sec/nsec within the ifdef as ts isn't available
  outside of it.

 testcases/kernel/syscalls/select/select_var.h | 25 ++++++++++++++++---
 1 file changed, 22 insertions(+), 3 deletions(-)

diff --git a/testcases/kernel/syscalls/select/select_var.h b/testcases/kernel/syscalls/select/select_var.h
index b19a1d1bf085..2c7604807cf6 100644
--- a/testcases/kernel/syscalls/select/select_var.h
+++ b/testcases/kernel/syscalls/select/select_var.h
@@ -6,6 +6,7 @@
 #define SELECT_VAR__
 
 #include "lapi/syscalls.h"
+#include "tst_timer.h"
 
 struct compat_sel_arg_struct {
 	long _n;
@@ -38,7 +39,7 @@ static int do_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *except
 	}
 	case 2: {
 		int ret;
-		struct timespec ts = {
+		struct __kernel_old_timespec ts = {
 			.tv_sec = timeout->tv_sec,
 			.tv_nsec = timeout->tv_usec * 1000,
 		};
@@ -47,7 +48,22 @@ static int do_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *except
 		timeout->tv_usec = ts.tv_nsec / 1000;
 		return ret;
 	}
-	case 3:
+	case 3: {
+		int ret = 0;
+#if (__NR_clock_settime64 != __LTP__NR_INVALID_SYSCALL)
+		struct __kernel_timespec ts = {
+			.tv_sec = timeout->tv_sec,
+			.tv_nsec = timeout->tv_usec * 1000,
+		};
+		ret = tst_syscall(__NR_pselect6_time64, nfds, readfds, writefds, exceptfds, &ts, NULL);
+		timeout->tv_sec = ts.tv_sec;
+		timeout->tv_usec = ts.tv_nsec / 1000;
+#else
+		tst_brk(TCONF, "__NR_pselect6 time64 variant not supported");
+#endif
+		return ret;
+	}
+	case 4:
 #ifdef __NR__newselect
 		return tst_syscall(__NR__newselect, nfds, readfds, writefds, exceptfds, timeout);
 #else
@@ -72,11 +88,14 @@ static void select_info(void)
 		tst_res(TINFO, "Testing SYS_pselect6 syscall");
 	break;
 	case 3:
+		tst_res(TINFO, "Testing SYS_pselect6 time64 syscall");
+	break;
+	case 4:
 		tst_res(TINFO, "Testing SYS__newselect syscall");
 	break;
 	}
 }
 
-#define TEST_VARIANTS 4
+#define TEST_VARIANTS 5
 
 #endif /* SELECT_VAR__ */
-- 
2.25.0.rc1.19.g042ed3e048af


^ permalink raw reply related	[flat|nested] 33+ messages in thread

end of thread, other threads:[~2020-06-25 11:13 UTC | newest]

Thread overview: 33+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-22 10:51 [LTP] [PATCH V4 00/17] Syscalls: Add support for time64 variants Viresh Kumar
2020-05-22 10:51 ` [LTP] [PATCH V4 01/17] syscalls/timer_gettime: Add support for time64 tests Viresh Kumar
2020-06-09 12:32   ` Li Wang
2020-06-10  3:26     ` Viresh Kumar
2020-06-10  3:34   ` [LTP] [PATCH V5 " Viresh Kumar
2020-06-10  3:38   ` [LTP] [PATCH V6 " Viresh Kumar
2020-06-24 14:23     ` Cyril Hrubis
2020-06-25  9:50       ` Viresh Kumar
2020-06-25 11:07         ` Cyril Hrubis
2020-06-25 11:10           ` Viresh Kumar
2020-06-25 11:13             ` Cyril Hrubis
2020-05-22 10:51 ` [LTP] [PATCH V4 02/17] syscalls/timer_settime: " Viresh Kumar
2020-06-24 14:30   ` Cyril Hrubis
2020-06-25  9:56     ` Viresh Kumar
2020-06-25 11:12       ` Cyril Hrubis
2020-05-22 10:51 ` [LTP] [PATCH V4 03/17] syscalls/timerfd: " Viresh Kumar
2020-05-22 10:51 ` [LTP] [PATCH V4 04/17] syscalls/sched_rr_get_interval: " Viresh Kumar
2020-05-22 10:51 ` [LTP] [PATCH V4 05/17] syscalls/futex: Merge futex_wait_bitset tests Viresh Kumar
2020-05-22 10:51 ` [LTP] [PATCH V4 06/17] syscalls/futex: Add support for time64 tests Viresh Kumar
2020-06-09 12:55   ` Li Wang
2020-06-10  3:35   ` [LTP] [PATCH V5 " Viresh Kumar
2020-05-22 10:51 ` [LTP] [PATCH V4 07/17] syscalls/io_pgetevents: " Viresh Kumar
2020-05-22 10:51 ` [LTP] [PATCH V4 08/17] syscalls/sigwaitinfo: Migrate to new test framework Viresh Kumar
2020-05-22 10:51 ` [LTP] [PATCH V4 09/17] syscalls/rt_sigtimedwait: Add support for time64 tests Viresh Kumar
2020-05-22 10:51 ` [LTP] [PATCH V4 10/17] syscalls/mq_timed{send|receive}: " Viresh Kumar
2020-05-22 10:51 ` [LTP] [PATCH V4 11/17] syscalls/recvmmsg: " Viresh Kumar
2020-05-22 10:51 ` [LTP] [PATCH V4 12/17] syscalls/ppoll: " Viresh Kumar
2020-05-22 10:51 ` [LTP] [PATCH V4 13/17] syscalls/select6: " Viresh Kumar
2020-05-22 10:51 ` [LTP] [PATCH V4 14/17] syscalls/semop: Migrate to new test framework Viresh Kumar
2020-05-22 10:51 ` [LTP] [PATCH V4 15/17] syscalls/semtimedop: Add support for semtimedop and its time64 version Viresh Kumar
2020-05-22 10:51 ` [LTP] [PATCH V4 16/17] syscalls/utimensat: Migrate to new test framework Viresh Kumar
2020-05-22 10:51 ` [LTP] [PATCH V4 17/17] syscalls/utimensat: Add support for time64 tests Viresh Kumar
  -- strict thread matches above, loose matches on Subject: below --
2020-05-18  8:15 [LTP] [PATCH V3 14/17] syscalls/semop: Migrate to new test framework Viresh Kumar
2020-05-18 10:27 ` [LTP] [PATCH V4 13/17] syscalls/select6: Add support for time64 tests Viresh Kumar

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.