All of lore.kernel.org
 help / color / mirror / Atom feed
* [LTP] [PATCH v2 0/9] Add basic time namespace testcases
@ 2020-03-18 15:37 Cyril Hrubis
  2020-03-18 15:37 ` [LTP] [PATCH v2 1/9] lapi/namespace_constants.h: Add CLONE_NEWTIME Cyril Hrubis
                   ` (8 more replies)
  0 siblings, 9 replies; 16+ messages in thread
From: Cyril Hrubis @ 2020-03-18 15:37 UTC (permalink / raw)
  To: ltp

This is a set of test for the time namespaces that are going to be part
of 5.6 kernel.

v2:

* Added git has into sysinfo03, as requested by ritchie

* Included description for the timens01 test as requsted by ritchie

* Added SAFE_NETNS() which fixed compilation problems reported by pvorel
  as well

Cyril Hrubis (9):
  lapi/namespace_constants.h: Add CLONE_NEWTIME
  lapi: Add a configure check and fallback for setns
  safe_macros: Add SAFE_SETNS()
  include/tst_timer: Fix normalization
  syscalls/sysinfo03: Add time namespace test
  syscalls/clock_nanosleep03: Add test for time namespace
  syscalls/clock_gettime03: Add basic time namespace test
  containers/timens: Add basic error test
  syscalls/timerfd04: Add time namespace test

 configure.ac                                  |   1 +
 include/lapi/namespaces_constants.h           |   3 +
 include/lapi/setns.h                          |  20 ++++
 include/tst_safe_macros.h                     |   4 +
 include/tst_timer.h                           |  35 +++---
 lib/tst_safe_macros.c                         |  12 ++
 runtest/containers                            |   7 ++
 runtest/syscalls                              |   4 +
 testcases/kernel/containers/timens/.gitignore |   1 +
 testcases/kernel/containers/timens/Makefile   |   6 +
 testcases/kernel/containers/timens/timens01.c |  68 +++++++++++
 .../kernel/syscalls/clock_gettime/.gitignore  |   1 +
 .../syscalls/clock_gettime/clock_gettime03.c  | 112 ++++++++++++++++++
 .../syscalls/clock_nanosleep/.gitignore       |   1 +
 .../clock_nanosleep/clock_nanosleep03.c       |  71 +++++++++++
 testcases/kernel/syscalls/sysinfo/.gitignore  |   1 +
 testcases/kernel/syscalls/sysinfo/sysinfo03.c |  81 +++++++++++++
 testcases/kernel/syscalls/timerfd/.gitignore  |   1 +
 testcases/kernel/syscalls/timerfd/timerfd04.c |  98 +++++++++++++++
 19 files changed, 510 insertions(+), 17 deletions(-)
 create mode 100644 include/lapi/setns.h
 create mode 100644 testcases/kernel/containers/timens/.gitignore
 create mode 100644 testcases/kernel/containers/timens/Makefile
 create mode 100644 testcases/kernel/containers/timens/timens01.c
 create mode 100644 testcases/kernel/syscalls/clock_gettime/clock_gettime03.c
 create mode 100644 testcases/kernel/syscalls/clock_nanosleep/clock_nanosleep03.c
 create mode 100644 testcases/kernel/syscalls/sysinfo/sysinfo03.c
 create mode 100644 testcases/kernel/syscalls/timerfd/timerfd04.c

-- 
2.24.1


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

* [LTP] [PATCH v2 1/9] lapi/namespace_constants.h: Add CLONE_NEWTIME
  2020-03-18 15:37 [LTP] [PATCH v2 0/9] Add basic time namespace testcases Cyril Hrubis
@ 2020-03-18 15:37 ` Cyril Hrubis
  2020-03-18 15:37 ` [LTP] [PATCH v2 2/9] lapi: Add a configure check and fallback for setns Cyril Hrubis
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 16+ messages in thread
From: Cyril Hrubis @ 2020-03-18 15:37 UTC (permalink / raw)
  To: ltp

Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
---
 include/lapi/namespaces_constants.h | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/include/lapi/namespaces_constants.h b/include/lapi/namespaces_constants.h
index da4a7a4a1..8f73c4302 100644
--- a/include/lapi/namespaces_constants.h
+++ b/include/lapi/namespaces_constants.h
@@ -24,5 +24,8 @@
 #ifndef CLONE_NEWUTS
 #  define CLONE_NEWUTS	0x04000000
 #endif
+#ifndef CLONE_NEWTIME
+#  define CLONE_NEWTIME 0x00000080
+#endif
 
 #endif /* __NAMESPACES_CONSTANTS_H__ */
-- 
2.24.1


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

* [LTP] [PATCH v2 2/9] lapi: Add a configure check and fallback for setns
  2020-03-18 15:37 [LTP] [PATCH v2 0/9] Add basic time namespace testcases Cyril Hrubis
  2020-03-18 15:37 ` [LTP] [PATCH v2 1/9] lapi/namespace_constants.h: Add CLONE_NEWTIME Cyril Hrubis
@ 2020-03-18 15:37 ` Cyril Hrubis
  2020-03-18 15:37 ` [LTP] [PATCH v2 3/9] safe_macros: Add SAFE_SETNS() Cyril Hrubis
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 16+ messages in thread
From: Cyril Hrubis @ 2020-03-18 15:37 UTC (permalink / raw)
  To: ltp

Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
---
 configure.ac         |  1 +
 include/lapi/setns.h | 20 ++++++++++++++++++++
 2 files changed, 21 insertions(+)
 create mode 100644 include/lapi/setns.h

diff --git a/configure.ac b/configure.ac
index 238d1cde8..ce03b3a55 100644
--- a/configure.ac
+++ b/configure.ac
@@ -111,6 +111,7 @@ AC_CHECK_FUNCS([ \
     renameat2 \
     sched_getcpu \
     sendmmsg \
+    setns \
     sigpending \
     splice \
     statx \
diff --git a/include/lapi/setns.h b/include/lapi/setns.h
new file mode 100644
index 000000000..7b0a7afc4
--- /dev/null
+++ b/include/lapi/setns.h
@@ -0,0 +1,20 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+  Copyright (c) 2020 Cyril Hrubis <chrubis@suse.cz>
+ */
+
+#ifndef LAPI_SETNS_H__
+#define LAPI_SETNS_H__
+
+#include "config.h"
+#include "lapi/syscalls.h"
+#include <sched.h>
+
+#ifndef HAVE_SETNS
+int setns(int fd, int nstype)
+{
+	return tst_syscall(__NR_setns, fd, nstype);
+}
+#endif
+
+#endif /* LAPI_SETNS_H__ */
-- 
2.24.1


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

* [LTP] [PATCH v2 3/9] safe_macros: Add SAFE_SETNS()
  2020-03-18 15:37 [LTP] [PATCH v2 0/9] Add basic time namespace testcases Cyril Hrubis
  2020-03-18 15:37 ` [LTP] [PATCH v2 1/9] lapi/namespace_constants.h: Add CLONE_NEWTIME Cyril Hrubis
  2020-03-18 15:37 ` [LTP] [PATCH v2 2/9] lapi: Add a configure check and fallback for setns Cyril Hrubis
@ 2020-03-18 15:37 ` Cyril Hrubis
  2020-03-23 16:11   ` Petr Vorel
  2020-03-18 15:37 ` [LTP] [PATCH v2 4/9] include/tst_timer: Fix normalization Cyril Hrubis
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 16+ messages in thread
From: Cyril Hrubis @ 2020-03-18 15:37 UTC (permalink / raw)
  To: ltp

From: Cyril Hrubis <metan@ucw.cz>

Signed-off-by: Cyril Hrubis <metan@ucw.cz>
---
 include/tst_safe_macros.h |  4 ++++
 lib/tst_safe_macros.c     | 12 ++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/include/tst_safe_macros.h b/include/tst_safe_macros.h
index 80c4d9cb9..291f2a722 100644
--- a/include/tst_safe_macros.h
+++ b/include/tst_safe_macros.h
@@ -547,4 +547,8 @@ int safe_personality(const char *filename, unsigned int lineno,
 void safe_unshare(const char *file, const int lineno, int flags);
 #define SAFE_UNSHARE(flags) safe_unshare(__FILE__, __LINE__, (flags))
 
+
+void safe_setns(const char *file, const int lineno, int fd, int nstype);
+#define SAFE_SETNS(fd, nstype) safe_setns(__FILE__, __LINE__, (fd), (nstype));
+
 #endif /* SAFE_MACROS_H__ */
diff --git a/lib/tst_safe_macros.c b/lib/tst_safe_macros.c
index f5413a18e..353ef5b1d 100644
--- a/lib/tst_safe_macros.c
+++ b/lib/tst_safe_macros.c
@@ -6,6 +6,7 @@
 #define _GNU_SOURCE
 #include <unistd.h>
 #include <errno.h>
+#include "lapi/setns.h"
 #include <sched.h>
 #include "config.h"
 #ifdef HAVE_SYS_FANOTIFY_H
@@ -202,3 +203,14 @@ void safe_unshare(const char *file, const int lineno, int flags)
 		}
 	}
 }
+
+void safe_setns(const char *file, const int lineno, int fd, int nstype)
+{
+	int ret;
+
+	ret = setns(fd, nstype);
+	if (ret == -1) {
+		tst_brk_(file, lineno, TBROK | TERRNO, "setns(%i, %i) failed",
+		         fd, nstype);
+	}
+}
-- 
2.24.1


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

* [LTP] [PATCH v2 4/9] include/tst_timer: Fix normalization
  2020-03-18 15:37 [LTP] [PATCH v2 0/9] Add basic time namespace testcases Cyril Hrubis
                   ` (2 preceding siblings ...)
  2020-03-18 15:37 ` [LTP] [PATCH v2 3/9] safe_macros: Add SAFE_SETNS() Cyril Hrubis
@ 2020-03-18 15:37 ` Cyril Hrubis
  2020-03-18 15:37 ` [LTP] [PATCH v2 5/9] syscalls/sysinfo03: Add time namespace test Cyril Hrubis
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 16+ messages in thread
From: Cyril Hrubis @ 2020-03-18 15:37 UTC (permalink / raw)
  To: ltp

The timespec_add and timespec_sub functions were producing incorrect
results when passed negative input. We have to normalize the result in
both cases for nseconds < 0 && nseconds > 1s.

Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
---
 include/tst_timer.h | 35 ++++++++++++++++++-----------------
 1 file changed, 18 insertions(+), 17 deletions(-)

diff --git a/include/tst_timer.h b/include/tst_timer.h
index de60bc62a..b091137dc 100644
--- a/include/tst_timer.h
+++ b/include/tst_timer.h
@@ -134,6 +134,21 @@ static inline int tst_timespec_lt(struct timespec t1, struct timespec t2)
 	return t1.tv_sec < t2.tv_sec;
 }
 
+static inline struct timespec tst_timespec_normalize(struct timespec t)
+{
+	if (t.tv_nsec >= 1000000000) {
+		t.tv_sec++;
+		t.tv_nsec -= 1000000000;
+	}
+
+	if (t.tv_nsec < 0) {
+		t.tv_sec--;
+		t.tv_nsec += 1000000000;
+	}
+
+	return t;
+}
+
 /*
  * Adds us microseconds to t.
  */
@@ -143,12 +158,8 @@ static inline struct timespec tst_timespec_add_us(struct timespec t,
 	t.tv_sec += us / 1000000;
 	t.tv_nsec += (us % 1000000) * 1000;
 
-	if (t.tv_nsec >= 1000000000) {
-		t.tv_sec++;
-		t.tv_nsec -= 1000000000;
-	}
 
-	return t;
+	return tst_timespec_normalize(t);
 }
 
 /*
@@ -162,12 +173,7 @@ static inline struct timespec tst_timespec_add(struct timespec t1,
 	res.tv_sec = t1.tv_sec + t2.tv_sec;
 	res.tv_nsec = t1.tv_nsec + t2.tv_nsec;
 
-	if (res.tv_nsec >= 1000000000) {
-		res.tv_sec++;
-		res.tv_nsec -= 1000000000;
-	}
-
-	return res;
+	return tst_timespec_normalize(res);
 }
 
 /*
@@ -179,12 +185,7 @@ static inline struct timespec tst_timespec_sub_us(struct timespec t,
 	t.tv_sec -= us / 1000000;
 	t.tv_nsec -= (us % 1000000) * 1000;
 
-	if (t.tv_nsec < 0) {
-		t.tv_sec--;
-		t.tv_nsec += 1000000000;
-	}
-
-	return t;
+	return tst_timespec_normalize(t);
 }
 
 /*
-- 
2.24.1


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

* [LTP] [PATCH v2 5/9] syscalls/sysinfo03: Add time namespace test
  2020-03-18 15:37 [LTP] [PATCH v2 0/9] Add basic time namespace testcases Cyril Hrubis
                   ` (3 preceding siblings ...)
  2020-03-18 15:37 ` [LTP] [PATCH v2 4/9] include/tst_timer: Fix normalization Cyril Hrubis
@ 2020-03-18 15:37 ` Cyril Hrubis
  2020-03-19  7:55   ` Li Wang
  2020-03-23 18:47   ` Petr Vorel
  2020-03-18 15:37 ` [LTP] [PATCH v2 6/9] syscalls/clock_nanosleep03: Add test for time namespace Cyril Hrubis
                   ` (3 subsequent siblings)
  8 siblings, 2 replies; 16+ messages in thread
From: Cyril Hrubis @ 2020-03-18 15:37 UTC (permalink / raw)
  To: ltp

This tests that the uptime in sysinfo() is adjusted correctly by the
namespace offset.

Also check that /proc/uptime is consistent with the uptime from the
sysinfo() syscall.

Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
---
 runtest/containers                            |  3 +
 runtest/syscalls                              |  1 +
 testcases/kernel/syscalls/sysinfo/.gitignore  |  1 +
 testcases/kernel/syscalls/sysinfo/sysinfo03.c | 81 +++++++++++++++++++
 4 files changed, 86 insertions(+)
 create mode 100644 testcases/kernel/syscalls/sysinfo/sysinfo03.c

diff --git a/runtest/containers b/runtest/containers
index 871cd2a42..4dc05af93 100644
--- a/runtest/containers
+++ b/runtest/containers
@@ -85,3 +85,6 @@ userns04 userns04
 userns05 userns05
 userns06 userns06
 userns07 userns07
+
+# time namespaces
+sysinfo03 sysinfo03
diff --git a/runtest/syscalls b/runtest/syscalls
index 6f2dcd82a..fb0b9e539 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls
@@ -1465,6 +1465,7 @@ sysfs06 sysfs06
 
 sysinfo01 sysinfo01
 sysinfo02 sysinfo02
+sysinfo03 sysinfo03
 
 syslog01 syslog01
 syslog02 syslog02
diff --git a/testcases/kernel/syscalls/sysinfo/.gitignore b/testcases/kernel/syscalls/sysinfo/.gitignore
index aa7c26946..8ad2279a4 100644
--- a/testcases/kernel/syscalls/sysinfo/.gitignore
+++ b/testcases/kernel/syscalls/sysinfo/.gitignore
@@ -1,2 +1,3 @@
 /sysinfo01
 /sysinfo02
+/sysinfo03
diff --git a/testcases/kernel/syscalls/sysinfo/sysinfo03.c b/testcases/kernel/syscalls/sysinfo/sysinfo03.c
new file mode 100644
index 000000000..af1024915
--- /dev/null
+++ b/testcases/kernel/syscalls/sysinfo/sysinfo03.c
@@ -0,0 +1,81 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+  Copyright (c) 2020 Cyril Hrubis <chrubis@suse.cz>
+ */
+/*
+
+  Test if CLOCK_BOOTTIME namespace offset is applied to sysinfo uptime and that
+  it's consistent with /proc/uptime as well.
+
+  After a call to unshare(CLONE_NEWTIME) a new timer namespace is created, the
+  process that has called the unshare() can adjust offsets for CLOCK_MONOTONIC
+  and CLOCK_BOOTTIME for its children by writing to the '/proc/self/timens_offsets'.
+
+ */
+
+#include <sys/sysinfo.h>
+#include "lapi/namespaces_constants.h"
+#include "tst_test.h"
+
+static int offsets[] = {
+	10,
+	-10,
+	3600,
+};
+
+static long read_proc_uptime(void)
+{
+	long sec, sec_rem;
+
+	SAFE_FILE_SCANF("/proc/uptime", "%li.%li", &sec, &sec_rem);
+
+	return sec + (sec_rem ? 1 : 0);
+}
+
+static void verify_sysinfo(unsigned int n)
+{
+	struct sysinfo si;
+	long uptime;
+	int off = offsets[n];
+
+	SAFE_UNSHARE(CLONE_NEWTIME);
+
+        SAFE_FILE_PRINTF("/proc/self/timens_offsets", "%d %d 0",
+	                 CLOCK_BOOTTIME, off);
+
+	sysinfo(&si);
+
+	uptime = si.uptime;
+
+	if (!SAFE_FORK()) {
+		sysinfo(&si);
+		long proc_uptime = read_proc_uptime();
+
+		long diff = si.uptime - uptime;
+
+		if (diff < off || diff > off + 1)
+			tst_res(TFAIL, "Wrong sysinfo uptime offset %li", diff);
+		else
+			tst_res(TPASS, "Correct sysinfo uptime offset %i", off);
+
+		if (si.uptime < proc_uptime || si.uptime > proc_uptime + 1) {
+			tst_res(TFAIL, "/proc/uptime %li differs from sysinfo %li",
+			        proc_uptime, si.uptime);
+		} else {
+			tst_res(TPASS, "/proc/uptime is consistent with sysinfo");
+		}
+	}
+}
+
+static struct tst_test test = {
+	.tcnt = ARRAY_SIZE(offsets),
+	.test = verify_sysinfo,
+	.needs_root = 1,
+	.forks_child = 1,
+	.needs_kconfigs = (const char *[]) {
+		"CONFIG_TIME_NS=y"
+	}
+	.tags = (const struct tst_tag[]) {
+		{"linux-git", "ecc421e05bab"},
+	}
+};
-- 
2.24.1


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

* [LTP] [PATCH v2 6/9] syscalls/clock_nanosleep03: Add test for time namespace
  2020-03-18 15:37 [LTP] [PATCH v2 0/9] Add basic time namespace testcases Cyril Hrubis
                   ` (4 preceding siblings ...)
  2020-03-18 15:37 ` [LTP] [PATCH v2 5/9] syscalls/sysinfo03: Add time namespace test Cyril Hrubis
@ 2020-03-18 15:37 ` Cyril Hrubis
  2020-03-18 15:37 ` [LTP] [PATCH v2 7/9] syscalls/clock_gettime03: Add basic time namespace test Cyril Hrubis
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 16+ messages in thread
From: Cyril Hrubis @ 2020-03-18 15:37 UTC (permalink / raw)
  To: ltp

Test that absolute timeout for clock nanosleep is adjusted by the offset
correctly inside of a time namespace.

Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
---
 runtest/containers                            |  1 +
 runtest/syscalls                              |  1 +
 .../syscalls/clock_nanosleep/.gitignore       |  1 +
 .../clock_nanosleep/clock_nanosleep03.c       | 71 +++++++++++++++++++
 4 files changed, 74 insertions(+)
 create mode 100644 testcases/kernel/syscalls/clock_nanosleep/clock_nanosleep03.c

diff --git a/runtest/containers b/runtest/containers
index 4dc05af93..8100cd2bc 100644
--- a/runtest/containers
+++ b/runtest/containers
@@ -88,3 +88,4 @@ userns07 userns07
 
 # time namespaces
 sysinfo03 sysinfo03
+clock_nanosleep03 clock_nanosleep03
diff --git a/runtest/syscalls b/runtest/syscalls
index fb0b9e539..eac4eeffc 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls
@@ -87,6 +87,7 @@ clock_getres01 clock_getres01
 clock_nanosleep01 clock_nanosleep01
 clock_nanosleep02 clock_nanosleep02
 clock_nanosleep2_01 clock_nanosleep2_01
+clock_nanosleep03 clock_nanosleep03
 
 clock_gettime01 clock_gettime01
 clock_gettime02 clock_gettime02
diff --git a/testcases/kernel/syscalls/clock_nanosleep/.gitignore b/testcases/kernel/syscalls/clock_nanosleep/.gitignore
index 6714ff468..406897cde 100644
--- a/testcases/kernel/syscalls/clock_nanosleep/.gitignore
+++ b/testcases/kernel/syscalls/clock_nanosleep/.gitignore
@@ -1,2 +1,3 @@
 /clock_nanosleep01
 /clock_nanosleep02
+/clock_nanosleep03
diff --git a/testcases/kernel/syscalls/clock_nanosleep/clock_nanosleep03.c b/testcases/kernel/syscalls/clock_nanosleep/clock_nanosleep03.c
new file mode 100644
index 000000000..99ff99736
--- /dev/null
+++ b/testcases/kernel/syscalls/clock_nanosleep/clock_nanosleep03.c
@@ -0,0 +1,71 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+
+  Copyright (c) 2020 Cyril Hrubis <chrubis@suse.cz>
+
+ */
+/*
+
+   Test that clock_nanosleep() adds correctly an offset with absolute timeout
+   and CLOCK_MONOTONIC inside of a timer namespace.
+
+   After a call to unshare(CLONE_NEWTIME) a new timer namespace is created, the
+   process that has called the unshare() can adjust offsets for CLOCK_MONOTONIC
+   and CLOCK_BOOTTIME for its children by writing to the '/proc/self/timens_offsets'.
+
+ */
+
+#include <stdlib.h>
+#include "tst_safe_clocks.h"
+#include "tst_timer.h"
+#include "lapi/namespaces_constants.h"
+#include "tst_test.h"
+
+#define OFFSET_S 10
+#define SLEEP_US 100000
+
+static void verify_clock_nanosleep(void)
+{
+	struct timespec start, end, sleep_abs;
+
+	SAFE_UNSHARE(CLONE_NEWTIME);
+
+	SAFE_FILE_PRINTF("/proc/self/timens_offsets", "%d %d 0", CLOCK_MONOTONIC, OFFSET_S);
+
+	SAFE_CLOCK_GETTIME(CLOCK_MONOTONIC, &start);
+
+	sleep_abs = tst_timespec_add_us(start, 1000000 * OFFSET_S + SLEEP_US);
+
+	if (!SAFE_FORK()) {
+		clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, &sleep_abs, NULL);
+		exit(0);
+	}
+
+	SAFE_WAIT(NULL);
+
+	SAFE_CLOCK_GETTIME(CLOCK_MONOTONIC, &end);
+
+	long long diff = tst_timespec_diff_us(end, start);
+
+	if (diff > 5 * SLEEP_US) {
+		tst_res(TFAIL, "clock_nanosleep() slept too long %lli", diff);
+		return;
+	}
+
+	if (diff < SLEEP_US) {
+		tst_res(TFAIL, "clock_nanosleep() slept too short %lli", diff);
+		return;
+	}
+
+	tst_res(TPASS, "clock_nanosleep() slept correctly %lli", diff);
+}
+
+static struct tst_test test = {
+	.test_all = verify_clock_nanosleep,
+	.needs_root = 1,
+	.forks_child = 1,
+	.needs_kconfigs = (const char *[]) {
+		"CONFIG_TIME_NS=y"
+	}
+
+};
-- 
2.24.1


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

* [LTP] [PATCH v2 7/9] syscalls/clock_gettime03: Add basic time namespace test
  2020-03-18 15:37 [LTP] [PATCH v2 0/9] Add basic time namespace testcases Cyril Hrubis
                   ` (5 preceding siblings ...)
  2020-03-18 15:37 ` [LTP] [PATCH v2 6/9] syscalls/clock_nanosleep03: Add test for time namespace Cyril Hrubis
@ 2020-03-18 15:37 ` Cyril Hrubis
  2020-03-18 15:38 ` [LTP] [PATCH v2 8/9] containers/timens: Add basic error test Cyril Hrubis
  2020-03-18 15:38 ` [LTP] [PATCH v2 9/9] syscalls/timerfd04: Add time namespace test Cyril Hrubis
  8 siblings, 0 replies; 16+ messages in thread
From: Cyril Hrubis @ 2020-03-18 15:37 UTC (permalink / raw)
  To: ltp

Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
---
 runtest/containers                            |   1 +
 runtest/syscalls                              |   1 +
 .../kernel/syscalls/clock_gettime/.gitignore  |   1 +
 .../syscalls/clock_gettime/clock_gettime03.c  | 112 ++++++++++++++++++
 4 files changed, 115 insertions(+)
 create mode 100644 testcases/kernel/syscalls/clock_gettime/clock_gettime03.c

diff --git a/runtest/containers b/runtest/containers
index 8100cd2bc..1006d8d35 100644
--- a/runtest/containers
+++ b/runtest/containers
@@ -89,3 +89,4 @@ userns07 userns07
 # time namespaces
 sysinfo03 sysinfo03
 clock_nanosleep03 clock_nanosleep03
+clock_gettime03 clock_gettime03
diff --git a/runtest/syscalls b/runtest/syscalls
index eac4eeffc..4949b5d36 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls
@@ -91,6 +91,7 @@ clock_nanosleep03 clock_nanosleep03
 
 clock_gettime01 clock_gettime01
 clock_gettime02 clock_gettime02
+clock_gettime03 clock_gettime03
 leapsec01 leapsec01
 
 clock_settime01 clock_settime01
diff --git a/testcases/kernel/syscalls/clock_gettime/.gitignore b/testcases/kernel/syscalls/clock_gettime/.gitignore
index ba471c859..9d06613b6 100644
--- a/testcases/kernel/syscalls/clock_gettime/.gitignore
+++ b/testcases/kernel/syscalls/clock_gettime/.gitignore
@@ -1,3 +1,4 @@
 clock_gettime01
 clock_gettime02
+clock_gettime03
 leapsec01
diff --git a/testcases/kernel/syscalls/clock_gettime/clock_gettime03.c b/testcases/kernel/syscalls/clock_gettime/clock_gettime03.c
new file mode 100644
index 000000000..8b8613ed1
--- /dev/null
+++ b/testcases/kernel/syscalls/clock_gettime/clock_gettime03.c
@@ -0,0 +1,112 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+
+  Copyright (c) 2020 Cyril Hrubis <chrubis@suse.cz>
+
+ */
+/*
+
+  Basic test for timer namespaces.
+
+  After a call to unshare(CLONE_NEWTIME) a new timer namespace is created, the
+  process that has called the unshare() can adjust offsets for CLOCK_MONOTONIC
+  and CLOCK_BOOTTIME for its children by writing to the '/proc/self/timens_offsets'.
+
+  The child processes also switch to the initial parent namespace and checks
+  that the offset is set to 0.
+
+ */
+
+#define _GNU_SOURCE
+#include "tst_safe_clocks.h"
+#include "tst_timer.h"
+#include "lapi/namespaces_constants.h"
+#include "tst_test.h"
+
+static struct tcase {
+	int clk_id;
+	int clk_off;
+	int off;
+} tcases[] = {
+	{CLOCK_MONOTONIC, CLOCK_MONOTONIC, 10},
+	{CLOCK_BOOTTIME, CLOCK_BOOTTIME, 10},
+
+	{CLOCK_MONOTONIC, CLOCK_MONOTONIC, -10},
+	{CLOCK_BOOTTIME, CLOCK_BOOTTIME, -10},
+
+	{CLOCK_MONOTONIC_RAW, CLOCK_MONOTONIC, 100},
+	{CLOCK_MONOTONIC_COARSE, CLOCK_MONOTONIC, 100},
+};
+
+static struct timespec now;
+static int parent_ns;
+
+static void child(struct tcase *tc)
+{
+	struct timespec then;
+	struct timespec parent_then;
+	long long diff;
+
+	SAFE_CLOCK_GETTIME(tc->clk_id, &then);
+
+	SAFE_SETNS(parent_ns, CLONE_NEWTIME);
+
+	SAFE_CLOCK_GETTIME(tc->clk_id, &parent_then);
+
+	diff = tst_timespec_diff_ms(then, now);
+
+	if (diff/1000 != tc->off) {
+		tst_res(TFAIL, "Wrong offset (%s) read %llims",
+		        tst_clock_name(tc->clk_id), diff);
+	} else {
+		tst_res(TPASS, "Offset (%s) is correct %llims",
+		        tst_clock_name(tc->clk_id), diff);
+	}
+
+	diff = tst_timespec_diff_ms(parent_then, now);
+
+	if (diff/1000) {
+		tst_res(TFAIL, "Wrong offset (%s) read %llims",
+		        tst_clock_name(tc->clk_id), diff);
+	} else {
+		tst_res(TPASS, "Offset (%s) is correct %llims",
+		        tst_clock_name(tc->clk_id), diff);
+	}
+}
+
+static void verify_ns_clock(unsigned int n)
+{
+	struct tcase *tc = &tcases[n];
+
+	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, &now);
+
+	if (!SAFE_FORK())
+		child(tc);
+}
+
+static void setup(void)
+{
+	parent_ns = SAFE_OPEN("/proc/self/ns/time_for_children", O_RDONLY);
+}
+
+static void cleanup(void)
+{
+	SAFE_CLOSE(parent_ns);
+}
+
+static struct tst_test test = {
+	.setup = setup,
+	.cleanup = cleanup,
+	.tcnt = ARRAY_SIZE(tcases),
+	.test = verify_ns_clock,
+	.needs_root = 1,
+	.forks_child = 1,
+	.needs_kconfigs = (const char *[]) {
+		"CONFIG_TIME_NS=y"
+	}
+};
-- 
2.24.1


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

* [LTP] [PATCH v2 8/9] containers/timens: Add basic error test
  2020-03-18 15:37 [LTP] [PATCH v2 0/9] Add basic time namespace testcases Cyril Hrubis
                   ` (6 preceding siblings ...)
  2020-03-18 15:37 ` [LTP] [PATCH v2 7/9] syscalls/clock_gettime03: Add basic time namespace test Cyril Hrubis
@ 2020-03-18 15:38 ` Cyril Hrubis
  2020-03-18 15:38 ` [LTP] [PATCH v2 9/9] syscalls/timerfd04: Add time namespace test Cyril Hrubis
  8 siblings, 0 replies; 16+ messages in thread
From: Cyril Hrubis @ 2020-03-18 15:38 UTC (permalink / raw)
  To: ltp

Add basic error handling test for the /proc/$PID/timens_offsets file.

Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
---
 runtest/containers                            |  1 +
 testcases/kernel/containers/timens/.gitignore |  1 +
 testcases/kernel/containers/timens/Makefile   |  6 ++
 testcases/kernel/containers/timens/timens01.c | 68 +++++++++++++++++++
 4 files changed, 76 insertions(+)
 create mode 100644 testcases/kernel/containers/timens/.gitignore
 create mode 100644 testcases/kernel/containers/timens/Makefile
 create mode 100644 testcases/kernel/containers/timens/timens01.c

diff --git a/runtest/containers b/runtest/containers
index 1006d8d35..23e4a533d 100644
--- a/runtest/containers
+++ b/runtest/containers
@@ -90,3 +90,4 @@ userns07 userns07
 sysinfo03 sysinfo03
 clock_nanosleep03 clock_nanosleep03
 clock_gettime03 clock_gettime03
+timens01 timens01
diff --git a/testcases/kernel/containers/timens/.gitignore b/testcases/kernel/containers/timens/.gitignore
new file mode 100644
index 000000000..bcd2dd9dd
--- /dev/null
+++ b/testcases/kernel/containers/timens/.gitignore
@@ -0,0 +1 @@
+timens01
diff --git a/testcases/kernel/containers/timens/Makefile b/testcases/kernel/containers/timens/Makefile
new file mode 100644
index 000000000..5ea7d67db
--- /dev/null
+++ b/testcases/kernel/containers/timens/Makefile
@@ -0,0 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+top_srcdir		?= ../../../..
+
+include $(top_srcdir)/include/mk/testcases.mk
+include $(top_srcdir)/include/mk/generic_leaf_target.mk
diff --git a/testcases/kernel/containers/timens/timens01.c b/testcases/kernel/containers/timens/timens01.c
new file mode 100644
index 000000000..2dbfebfa8
--- /dev/null
+++ b/testcases/kernel/containers/timens/timens01.c
@@ -0,0 +1,68 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+
+  Copyright (c) 2020 Cyril Hrubis <chrubis@suse.cz>
+
+ */
+/*
+
+  Basic test for timens_offsets error handling.
+
+  After a call to unshare(CLONE_NEWTIME) a new timer namespace is created, the
+  process that has called the unshare() can adjust offsets for CLOCK_MONOTONIC
+  and CLOCK_BOOTTIME for its children by writing to the '/proc/self/timens_offsets'.
+
+ */
+
+#define _GNU_SOURCE
+#include "lapi/namespaces_constants.h"
+#include "lapi/posix_clocks.h"
+#include "tst_test.h"
+
+static struct tcase {
+	const char *desc;
+	const char *offsets;
+	int exp_err;
+} tcases[] = {
+	{"Obvious garbage", "not an offset", EINVAL},
+	{"Missing nanoseconds", "1 10", EINVAL},
+	{"Negative nanoseconds", "1 10 -10", EINVAL},
+	{"Nanoseconds > 1s", "1 10 1000000001", EINVAL},
+	{"Unsupported CLOCK_REALTIME", "0 10 0", EINVAL},
+	{"Mess on the second line", "1 10 0\na", EINVAL},
+	{"Overflow kernel 64bit ns timer", "1 9223372036 0", ERANGE},
+	{"Overflow kernel 64bit ns timer", "1 -9223372036 0", ERANGE},
+};
+
+static void verify_ns_clock(unsigned int n)
+{
+	struct tcase *tc = &tcases[n];
+	int fd, ret;
+
+	SAFE_UNSHARE(CLONE_NEWTIME);
+
+	fd = SAFE_OPEN("/proc/self/timens_offsets", O_WRONLY);
+	ret = write(fd, tc->offsets, strlen(tc->offsets));
+
+	if (ret != -1) {
+		tst_res(TFAIL, "%s returned %i", tc->desc, ret);
+		return;
+	}
+
+	if (errno != tc->exp_err) {
+		tst_res(TFAIL | TERRNO, "%s should fail with %s, got:",
+			tc->desc, tst_strerrno(tc->exp_err));
+		return;
+	}
+
+	tst_res(TPASS | TERRNO, "%s", tc->desc);
+}
+
+static struct tst_test test = {
+	.tcnt = ARRAY_SIZE(tcases),
+	.test = verify_ns_clock,
+	.needs_root = 1,
+	.needs_kconfigs = (const char *[]) {
+		"CONFIG_TIME_NS=y"
+	}
+};
-- 
2.24.1


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

* [LTP] [PATCH v2 9/9] syscalls/timerfd04: Add time namespace test
  2020-03-18 15:37 [LTP] [PATCH v2 0/9] Add basic time namespace testcases Cyril Hrubis
                   ` (7 preceding siblings ...)
  2020-03-18 15:38 ` [LTP] [PATCH v2 8/9] containers/timens: Add basic error test Cyril Hrubis
@ 2020-03-18 15:38 ` Cyril Hrubis
  8 siblings, 0 replies; 16+ messages in thread
From: Cyril Hrubis @ 2020-03-18 15:38 UTC (permalink / raw)
  To: ltp

Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
---
 runtest/containers                            |  1 +
 runtest/syscalls                              |  1 +
 testcases/kernel/syscalls/timerfd/.gitignore  |  1 +
 testcases/kernel/syscalls/timerfd/timerfd04.c | 98 +++++++++++++++++++
 4 files changed, 101 insertions(+)
 create mode 100644 testcases/kernel/syscalls/timerfd/timerfd04.c

diff --git a/runtest/containers b/runtest/containers
index 23e4a533d..276096709 100644
--- a/runtest/containers
+++ b/runtest/containers
@@ -91,3 +91,4 @@ sysinfo03 sysinfo03
 clock_nanosleep03 clock_nanosleep03
 clock_gettime03 clock_gettime03
 timens01 timens01
+timerfd04 timerfd04
diff --git a/runtest/syscalls b/runtest/syscalls
index 4949b5d36..16ed8d8ec 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls
@@ -1497,6 +1497,7 @@ times03 times03
 timerfd01 timerfd01
 timerfd02 timerfd02
 timerfd03 timerfd03
+timerfd04 timerfd04
 timerfd_create01 timerfd_create01
 timerfd_gettime01 timerfd_gettime01
 timerfd_settime01 timerfd_settime01
diff --git a/testcases/kernel/syscalls/timerfd/.gitignore b/testcases/kernel/syscalls/timerfd/.gitignore
index 1c5329966..ef388685d 100644
--- a/testcases/kernel/syscalls/timerfd/.gitignore
+++ b/testcases/kernel/syscalls/timerfd/.gitignore
@@ -1,6 +1,7 @@
 /timerfd01
 /timerfd02
 /timerfd03
+/timerfd04
 /timerfd_create01
 /timerfd_gettime01
 /timerfd_settime01
diff --git a/testcases/kernel/syscalls/timerfd/timerfd04.c b/testcases/kernel/syscalls/timerfd/timerfd04.c
new file mode 100644
index 000000000..28f9e4e02
--- /dev/null
+++ b/testcases/kernel/syscalls/timerfd/timerfd04.c
@@ -0,0 +1,98 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+
+  Copyright (c) 2020 Cyril Hrubis <chrubis@suse.cz>
+
+ */
+/*
+
+   Test that timerfd adds correctly an offset with absolute expiration time.
+
+   After a call to unshare(CLONE_NEWTIME) a new timer namespace is created, the
+   process that has called the unshare() can adjust offsets for CLOCK_MONOTONIC
+   and CLOCK_BOOTTIME for its children by writing to the '/proc/self/timens_offsets'.
+
+ */
+
+#include <stdlib.h>
+#include "tst_safe_clocks.h"
+#include "tst_safe_timerfd.h"
+#include "tst_timer.h"
+#include "lapi/namespaces_constants.h"
+#include "tst_test.h"
+
+#define SLEEP_US 40000
+
+static struct tcase {
+	int clk_id;
+	int clk_off;
+	int off;
+} tcases[] = {
+	{CLOCK_MONOTONIC, CLOCK_MONOTONIC, 10},
+	{CLOCK_BOOTTIME, CLOCK_BOOTTIME, 10},
+
+	{CLOCK_MONOTONIC, CLOCK_MONOTONIC, -10},
+	{CLOCK_BOOTTIME, CLOCK_BOOTTIME, -10},
+};
+
+static void verify_timerfd(unsigned int n)
+{
+	struct timespec start, end;
+	struct itimerspec it = {};
+	struct tcase *tc = &tcases[n];
+
+	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);
+
+	it.it_value = tst_timespec_add_us(start, 1000000 * tc->off + SLEEP_US);
+
+	if (!SAFE_FORK()) {
+		uint64_t exp;
+		int fd = SAFE_TIMERFD_CREATE(tc->clk_id, 0);
+
+		SAFE_TIMERFD_SETTIME(fd, TFD_TIMER_ABSTIME, &it, NULL);
+
+		SAFE_READ(1, fd, &exp, sizeof(exp));
+
+		if (exp != 1)
+			tst_res(TFAIL, "Got %llu expirations", (long long unsigned)exp);
+
+		SAFE_CLOSE(fd);
+		exit(0);
+	}
+
+	SAFE_WAIT(NULL);
+
+	SAFE_CLOCK_GETTIME(CLOCK_MONOTONIC, &end);
+
+	long long diff = tst_timespec_diff_us(end, start);
+
+	if (diff > 5 * SLEEP_US) {
+		tst_res(TFAIL, "timerfd %s slept too long %lli",
+		        tst_clock_name(tc->clk_id), diff);
+		return;
+	}
+
+	if (diff < SLEEP_US) {
+		tst_res(TFAIL, "timerfd %s slept too short %lli",
+		        tst_clock_name(tc->clk_id), diff);
+		return;
+	}
+
+	tst_res(TPASS, "timerfd %s slept correctly %lli",
+		tst_clock_name(tc->clk_id), diff);
+}
+
+static struct tst_test test = {
+	.tcnt = ARRAY_SIZE(tcases),
+	.test = verify_timerfd,
+	.needs_root = 1,
+	.forks_child = 1,
+	.needs_kconfigs = (const char *[]) {
+		"CONFIG_TIME_NS=y"
+	}
+};
-- 
2.24.1


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

* [LTP] [PATCH v2 5/9] syscalls/sysinfo03: Add time namespace test
  2020-03-18 15:37 ` [LTP] [PATCH v2 5/9] syscalls/sysinfo03: Add time namespace test Cyril Hrubis
@ 2020-03-19  7:55   ` Li Wang
  2020-03-19 22:00     ` Cyril Hrubis
  2020-03-23 18:47   ` Petr Vorel
  1 sibling, 1 reply; 16+ messages in thread
From: Li Wang @ 2020-03-19  7:55 UTC (permalink / raw)
  To: ltp

On Wed, Mar 18, 2020 at 11:35 PM Cyril Hrubis <chrubis@suse.cz> wrote:

> This tests that the uptime in sysinfo() is adjusted correctly by the
> namespace offset.
>
> Also check that /proc/uptime is consistent with the uptime from the
> sysinfo() syscall.
>
> Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
> ---
>  runtest/containers                            |  3 +
>  runtest/syscalls                              |  1 +
>  testcases/kernel/syscalls/sysinfo/.gitignore  |  1 +
>  testcases/kernel/syscalls/sysinfo/sysinfo03.c | 81 +++++++++++++++++++
>  4 files changed, 86 insertions(+)
>  create mode 100644 testcases/kernel/syscalls/sysinfo/sysinfo03.c
>
> diff --git a/runtest/containers b/runtest/containers
> index 871cd2a42..4dc05af93 100644
> --- a/runtest/containers
> +++ b/runtest/containers
> @@ -85,3 +85,6 @@ userns04 userns04
>  userns05 userns05
>  userns06 userns06
>  userns07 userns07
> +
> +# time namespaces
> +sysinfo03 sysinfo03
> diff --git a/runtest/syscalls b/runtest/syscalls
> index 6f2dcd82a..fb0b9e539 100644
> --- a/runtest/syscalls
> +++ b/runtest/syscalls
> @@ -1465,6 +1465,7 @@ sysfs06 sysfs06
>
>  sysinfo01 sysinfo01
>  sysinfo02 sysinfo02
> +sysinfo03 sysinfo03
>
>  syslog01 syslog01
>  syslog02 syslog02
> diff --git a/testcases/kernel/syscalls/sysinfo/.gitignore
> b/testcases/kernel/syscalls/sysinfo/.gitignore
> index aa7c26946..8ad2279a4 100644
> --- a/testcases/kernel/syscalls/sysinfo/.gitignore
> +++ b/testcases/kernel/syscalls/sysinfo/.gitignore
> @@ -1,2 +1,3 @@
>  /sysinfo01
>  /sysinfo02
> +/sysinfo03
> diff --git a/testcases/kernel/syscalls/sysinfo/sysinfo03.c
> b/testcases/kernel/syscalls/sysinfo/sysinfo03.c
> new file mode 100644
> index 000000000..af1024915
> --- /dev/null
> +++ b/testcases/kernel/syscalls/sysinfo/sysinfo03.c
> @@ -0,0 +1,81 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> +  Copyright (c) 2020 Cyril Hrubis <chrubis@suse.cz>
> + */
> +/*
> +
> +  Test if CLOCK_BOOTTIME namespace offset is applied to sysinfo uptime
> and that
> +  it's consistent with /proc/uptime as well.
> +
> +  After a call to unshare(CLONE_NEWTIME) a new timer namespace is
> created, the
> +  process that has called the unshare() can adjust offsets for
> CLOCK_MONOTONIC
> +  and CLOCK_BOOTTIME for its children by writing to the
> '/proc/self/timens_offsets'.
> +
> + */
> +
> +#include <sys/sysinfo.h>
> +#include "lapi/namespaces_constants.h"
> +#include "tst_test.h"
> +
> +static int offsets[] = {
> +       10,
> +       -10,
> +       3600,
> +};
> +
> +static long read_proc_uptime(void)
> +{
> +       long sec, sec_rem;
> +
> +       SAFE_FILE_SCANF("/proc/uptime", "%li.%li", &sec, &sec_rem);
> +
> +       return sec + (sec_rem ? 1 : 0);
> +}
> +
> +static void verify_sysinfo(unsigned int n)
> +{
> +       struct sysinfo si;
> +       long uptime;
> +       int off = offsets[n];
> +
> +       SAFE_UNSHARE(CLONE_NEWTIME);
> +
> +        SAFE_FILE_PRINTF("/proc/self/timens_offsets", "%d %d 0",
> +                        CLOCK_BOOTTIME, off);
> +
> +       sysinfo(&si);
> +
> +       uptime = si.uptime;
> +
> +       if (!SAFE_FORK()) {
> +               sysinfo(&si);
> +               long proc_uptime = read_proc_uptime();
> +
> +               long diff = si.uptime - uptime;
> +
> +               if (diff < off || diff > off + 1)
> +                       tst_res(TFAIL, "Wrong sysinfo uptime offset %li",
> diff);
> +               else
> +                       tst_res(TPASS, "Correct sysinfo uptime offset %i",
> off);
> +
> +               if (si.uptime < proc_uptime || si.uptime > proc_uptime +
> 1) {
> +                       tst_res(TFAIL, "/proc/uptime %li differs from
> sysinfo %li",
> +                               proc_uptime, si.uptime);
> +               } else {
> +                       tst_res(TPASS, "/proc/uptime is consistent with
> sysinfo");
> +               }
> +       }
> +}
> +
> +static struct tst_test test = {
> +       .tcnt = ARRAY_SIZE(offsets),
> +       .test = verify_sysinfo,
> +       .needs_root = 1,
> +       .forks_child = 1,
> +       .needs_kconfigs = (const char *[]) {
> +               "CONFIG_TIME_NS=y"
>

Shouldn't end with 'NULL' in kconfig struct?
If not that will mislead arrary_len to recognise wrong number of arrry(cnt)
and caused segmentation fault in test.



> +       }
>

A comma is required here ^, otherwise it'd be failing in the build phase.

+       .tags = (const struct tst_tag[]) {
> +               {"linux-git", "ecc421e05bab"},
>

Ending with '{}' in tags struct?


> +       }
> +};
> --
> 2.24.1
>
>
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
>
>

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

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

* [LTP] [PATCH v2 5/9] syscalls/sysinfo03: Add time namespace test
  2020-03-19  7:55   ` Li Wang
@ 2020-03-19 22:00     ` Cyril Hrubis
  2020-03-20  7:32       ` Li Wang
  0 siblings, 1 reply; 16+ messages in thread
From: Cyril Hrubis @ 2020-03-19 22:00 UTC (permalink / raw)
  To: ltp

Hi!
> > +static struct tst_test test = {
> > +       .tcnt = ARRAY_SIZE(offsets),
> > +       .test = verify_sysinfo,
> > +       .needs_root = 1,
> > +       .forks_child = 1,
> > +       .needs_kconfigs = (const char *[]) {
> > +               "CONFIG_TIME_NS=y"
> >
> 
> Shouldn't end with 'NULL' in kconfig struct?
> If not that will mislead arrary_len to recognise wrong number of arrry(cnt)
> and caused segmentation fault in test.
> 
> 
> 
> > +       }
> >
> 
> A comma is required here ^, otherwise it'd be failing in the build phase.
> 
> +       .tags = (const struct tst_tag[]) {
> > +               {"linux-git", "ecc421e05bab"},
> >
> 
> Ending with '{}' in tags struct?

Of course, thanks for catching that!

I will fix these before applying, if the patchset is acked otherwise.

-- 
Cyril Hrubis
chrubis@suse.cz

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

* [LTP] [PATCH v2 5/9] syscalls/sysinfo03: Add time namespace test
  2020-03-19 22:00     ` Cyril Hrubis
@ 2020-03-20  7:32       ` Li Wang
  0 siblings, 0 replies; 16+ messages in thread
From: Li Wang @ 2020-03-20  7:32 UTC (permalink / raw)
  To: ltp

Hi Cyril,

On Thu, Mar 19, 2020 at 10:04 PM Cyril Hrubis <chrubis@suse.cz> wrote:

> ...
> > Ending with '{}' in tags struct?
>
> Of course, thanks for catching that!
>

Thanks, and don't forget to fix in rest patches too.


>
> I will fix these before applying, if the patchset is acked otherwise.
>

I have finished all the patches' reviews. Nice patchset!
LGTM.

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

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

* [LTP] [PATCH v2 3/9] safe_macros: Add SAFE_SETNS()
  2020-03-18 15:37 ` [LTP] [PATCH v2 3/9] safe_macros: Add SAFE_SETNS() Cyril Hrubis
@ 2020-03-23 16:11   ` Petr Vorel
  2020-03-30 14:09     ` Cyril Hrubis
  0 siblings, 1 reply; 16+ messages in thread
From: Petr Vorel @ 2020-03-23 16:11 UTC (permalink / raw)
  To: ltp

Hi Cyril,

...
> diff --git a/lib/tst_safe_macros.c b/lib/tst_safe_macros.c
> index f5413a18e..353ef5b1d 100644
> --- a/lib/tst_safe_macros.c
> +++ b/lib/tst_safe_macros.c
> @@ -6,6 +6,7 @@
>  #define _GNU_SOURCE
>  #include <unistd.h>
>  #include <errno.h>
> +#include "lapi/setns.h"
One more fix needed: lapi file needs to be loaded later:

diff --git lib/tst_safe_macros.c lib/tst_safe_macros.c
index 353ef5b1d..7d33f2b79 100644
--- lib/tst_safe_macros.c
+++ lib/tst_safe_macros.c
@@ -6,7 +6,6 @@
 #define _GNU_SOURCE
 #include <unistd.h>
 #include <errno.h>
-#include "lapi/setns.h"
 #include <sched.h>
 #include "config.h"
 #ifdef HAVE_SYS_FANOTIFY_H
@@ -14,6 +13,7 @@
 #endif
 #define TST_NO_DEFAULT_MAIN
 #include "tst_test.h"
+#include "lapi/setns.h"
 #include "tst_safe_macros.h"
 #include "lapi/personality.h"
 
to prevent failure:
In file included from /usr/src/ltp/lib/tst_safe_macros.c:9:
/usr/src/ltp/include/lapi/setns.h: In function 'setns':
/usr/src/ltp/include/lapi/setns.h:16: error: implicit declaration of function 'tst_brk'
/usr/src/ltp/include/lapi/setns.h:16: error: 'TCONF' undeclared (first use in this function)
/usr/src/ltp/include/lapi/setns.h:16: error: (Each undeclared identifier is reported only once

The rest of the patchset looks ok to me:

Reviewed-by: Petr Vorel <pvorel@suse.cz>

Kind regards,
Petr

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

* [LTP] [PATCH v2 5/9] syscalls/sysinfo03: Add time namespace test
  2020-03-18 15:37 ` [LTP] [PATCH v2 5/9] syscalls/sysinfo03: Add time namespace test Cyril Hrubis
  2020-03-19  7:55   ` Li Wang
@ 2020-03-23 18:47   ` Petr Vorel
  1 sibling, 0 replies; 16+ messages in thread
From: Petr Vorel @ 2020-03-23 18:47 UTC (permalink / raw)
  To: ltp

Hi Cyril,

> +++ b/testcases/kernel/syscalls/sysinfo/sysinfo03.c
...
> +#include <sys/sysinfo.h>
> +#include "lapi/namespaces_constants.h"
> +#include "tst_test.h"
...
> +static void verify_sysinfo(unsigned int n)
> +{
> +	struct sysinfo si;
> +	long uptime;
> +	int off = offsets[n];
> +
> +	SAFE_UNSHARE(CLONE_NEWTIME);
> +
> +        SAFE_FILE_PRINTF("/proc/self/timens_offsets", "%d %d 0",
> +	                 CLOCK_BOOTTIME, off);
One more fix needed for CentOS 6 to get missing definition: CLOCK_BOOTTIME

#include "lapi/posix_clocks.h"

Or do we want to finally drop CentOS 6 ? (see [1]).

Kind regards,
Petr

[1] https://lists.linux.it/pipermail/ltp/2020-March/016164.html

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

* [LTP] [PATCH v2 3/9] safe_macros: Add SAFE_SETNS()
  2020-03-23 16:11   ` Petr Vorel
@ 2020-03-30 14:09     ` Cyril Hrubis
  0 siblings, 0 replies; 16+ messages in thread
From: Cyril Hrubis @ 2020-03-30 14:09 UTC (permalink / raw)
  To: ltp

Hi!
I've fixed up problems pointed out by you and Li and pushed.

Peter, Li thanks a lot for the review.

-- 
Cyril Hrubis
chrubis@suse.cz

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

end of thread, other threads:[~2020-03-30 14:09 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-03-18 15:37 [LTP] [PATCH v2 0/9] Add basic time namespace testcases Cyril Hrubis
2020-03-18 15:37 ` [LTP] [PATCH v2 1/9] lapi/namespace_constants.h: Add CLONE_NEWTIME Cyril Hrubis
2020-03-18 15:37 ` [LTP] [PATCH v2 2/9] lapi: Add a configure check and fallback for setns Cyril Hrubis
2020-03-18 15:37 ` [LTP] [PATCH v2 3/9] safe_macros: Add SAFE_SETNS() Cyril Hrubis
2020-03-23 16:11   ` Petr Vorel
2020-03-30 14:09     ` Cyril Hrubis
2020-03-18 15:37 ` [LTP] [PATCH v2 4/9] include/tst_timer: Fix normalization Cyril Hrubis
2020-03-18 15:37 ` [LTP] [PATCH v2 5/9] syscalls/sysinfo03: Add time namespace test Cyril Hrubis
2020-03-19  7:55   ` Li Wang
2020-03-19 22:00     ` Cyril Hrubis
2020-03-20  7:32       ` Li Wang
2020-03-23 18:47   ` Petr Vorel
2020-03-18 15:37 ` [LTP] [PATCH v2 6/9] syscalls/clock_nanosleep03: Add test for time namespace Cyril Hrubis
2020-03-18 15:37 ` [LTP] [PATCH v2 7/9] syscalls/clock_gettime03: Add basic time namespace test Cyril Hrubis
2020-03-18 15:38 ` [LTP] [PATCH v2 8/9] containers/timens: Add basic error test Cyril Hrubis
2020-03-18 15:38 ` [LTP] [PATCH v2 9/9] syscalls/timerfd04: Add time namespace test Cyril Hrubis

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.