From: Dmitry Safonov <dima@arista.com>
To: linux-kernel@vger.kernel.org
Cc: Dmitry Safonov <0x7f454c46@gmail.com>,
Dmitry Safonov <dima@arista.com>, Adrian Reber <adrian@lisas.de>,
Andrei Vagin <avagin@openvz.org>,
Andy Lutomirski <luto@kernel.org>,
Christian Brauner <christian.brauner@ubuntu.com>,
Cyrill Gorcunov <gorcunov@openvz.org>,
"Eric W. Biederman" <ebiederm@xmission.com>,
"H. Peter Anvin" <hpa@zytor.com>, Ingo Molnar <mingo@redhat.com>,
Jeff Dike <jdike@addtoit.com>, Oleg Nesterov <oleg@redhat.com>,
Pavel Emelyanov <xemul@virtuozzo.com>,
Shuah Khan <shuah@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
containers@lists.linux-foundation.org, criu@openvz.org,
linux-api@vger.kernel.org, x86@kernel.org,
linux-kselftest@vger.kernel.org
Subject: [RFC 19/20] timens/selftest: Add procfs selftest
Date: Wed, 19 Sep 2018 21:50:36 +0100 [thread overview]
Message-ID: <20180919205037.9574-20-dima@arista.com> (raw)
In-Reply-To: <20180919205037.9574-1-dima@arista.com>
Currently only uptime check, but procfs checks for REALTIME might be
added in future.
Cc: linux-kselftest@vger.kernel.org
Signed-off-by: Dmitry Safonov <dima@arista.com>
---
tools/testing/selftests/timens/.gitignore | 1 +
tools/testing/selftests/timens/Makefile | 2 +-
tools/testing/selftests/timens/procfs.c | 145 ++++++++++++++++++++++++++++++
3 files changed, 147 insertions(+), 1 deletion(-)
create mode 100644 tools/testing/selftests/timens/procfs.c
diff --git a/tools/testing/selftests/timens/.gitignore b/tools/testing/selftests/timens/.gitignore
index 9b6c8ddac2c8..94ffdd9cead7 100644
--- a/tools/testing/selftests/timens/.gitignore
+++ b/tools/testing/selftests/timens/.gitignore
@@ -1,3 +1,4 @@
clock_nanosleep
+procfs
timens
timerfd
diff --git a/tools/testing/selftests/timens/Makefile b/tools/testing/selftests/timens/Makefile
index 76a1dc891184..f96f50d1fef8 100644
--- a/tools/testing/selftests/timens/Makefile
+++ b/tools/testing/selftests/timens/Makefile
@@ -1,4 +1,4 @@
-TEST_GEN_PROGS := timens timerfd clock_nanosleep
+TEST_GEN_PROGS := timens timerfd clock_nanosleep procfs
CFLAGS := -Wall -Werror
diff --git a/tools/testing/selftests/timens/procfs.c b/tools/testing/selftests/timens/procfs.c
new file mode 100644
index 000000000000..5067cbbddcc5
--- /dev/null
+++ b/tools/testing/selftests/timens/procfs.c
@@ -0,0 +1,145 @@
+// SPDX-License-Identifier: GPL-2.0
+#define _GNU_SOURCE
+#include <errno.h>
+#include <fcntl.h>
+#include <math.h>
+#include <sched.h>
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <sys/syscall.h>
+#include <sys/types.h>
+#include <time.h>
+#include <unistd.h>
+#include <time.h>
+
+#include "log.h"
+
+#ifndef CLONE_NEWTIME
+# define CLONE_NEWTIME 0x00001000
+#endif
+
+/*
+ * Test shouldn't be run for a day, so add 10 days to child
+ * time and check parent's time to be in the same day.
+ */
+#define MAX_TEST_TIME_SEC (60*5)
+#define DAY_IN_SEC (60*60*24)
+#define TEN_DAYS_IN_SEC (10*DAY_IN_SEC)
+
+#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
+
+static int child_ns, parent_ns;
+
+static int switch_ns(int fd)
+{
+ if (setns(fd, CLONE_NEWTIME))
+ return pr_perror("setns()");
+
+ return 0;
+}
+
+static int init_namespaces(void)
+{
+ char path[] = "/proc/self/ns/time";
+ struct stat st1, st2;
+
+ parent_ns = open(path, O_RDONLY);
+ if (parent_ns <= 0)
+ return pr_perror("Unable to open %s", path);
+
+ if (fstat(parent_ns, &st1))
+ return pr_perror("Unable to stat the parent timens");
+
+ if (unshare(CLONE_NEWTIME))
+ return pr_perror("Can't unshare() timens");
+
+ child_ns = open(path, O_RDONLY);
+ if (child_ns <= 0)
+ return pr_perror("Unable to open %s", path);
+
+ if (fstat(child_ns, &st2))
+ return pr_perror("Unable to stat the timens");
+
+ if (st1.st_ino == st2.st_ino)
+ return pr_err("The same child_ns after CLONE_NEWTIME");
+
+ return 0;
+}
+
+static int read_proc_uptime(struct timespec *uptime)
+{
+ unsigned long up_sec, up_nsec;
+ FILE *proc;
+
+ proc = fopen("/proc/uptime", "r");
+ if (proc == NULL) {
+ pr_perror("Unable to open /proc/uptime");
+ return -1;
+ }
+
+ if (fscanf(proc, "%lu.%02lu", &up_sec, &up_nsec) != 2) {
+ if (errno) {
+ pr_perror("fscanf");
+ return -errno;
+ }
+ pr_err("failed to parse /proc/uptime");
+ return -1;
+ }
+ fclose(proc);
+
+ uptime->tv_sec = up_sec;
+ uptime->tv_nsec = up_nsec;
+ return 0;
+}
+
+static int check_uptime(void)
+{
+ struct timespec ts_btime, uptime_new, uptime_old;
+ time_t uptime_expected;
+ double prec = MAX_TEST_TIME_SEC;
+
+ if (switch_ns(parent_ns))
+ return pr_err("switch_ns(%d)", parent_ns);
+
+ if (clock_gettime(CLOCK_BOOTTIME, &ts_btime))
+ return pr_perror("clock_gettime()");
+
+ if (read_proc_uptime(&uptime_old))
+ return 1;
+
+ ts_btime.tv_sec += TEN_DAYS_IN_SEC;
+
+ if (switch_ns(child_ns))
+ return pr_err("switch_ns(%d)", child_ns);
+
+ if (clock_settime(CLOCK_BOOTTIME, &ts_btime))
+ return pr_perror("clock_settime()");
+
+ if (read_proc_uptime(&uptime_new))
+ return 1;
+
+ uptime_expected = uptime_old.tv_sec + TEN_DAYS_IN_SEC;
+ if (fabs(difftime(uptime_new.tv_sec, uptime_expected)) > prec) {
+ pr_fail("uptime in /proc/uptime: old %ld, new %ld [%ld]",
+ uptime_old.tv_sec, uptime_new.tv_sec,
+ uptime_old.tv_sec + TEN_DAYS_IN_SEC);
+ return 1;
+ }
+
+ pr_msg("Passed for /proc/uptime", "OK");
+ return 0;
+}
+
+int main(int argc, char *argv[])
+{
+ int ret = 0;
+
+ if (init_namespaces())
+ return 1;
+
+ ret |= check_uptime();
+
+ return ret;
+}
--
2.13.6
WARNING: multiple messages have this Message-ID (diff)
From: dima at arista.com (Dmitry Safonov)
Subject: [RFC 19/20] timens/selftest: Add procfs selftest
Date: Wed, 19 Sep 2018 21:50:36 +0100 [thread overview]
Message-ID: <20180919205037.9574-20-dima@arista.com> (raw)
In-Reply-To: <20180919205037.9574-1-dima@arista.com>
Currently only uptime check, but procfs checks for REALTIME might be
added in future.
Cc: linux-kselftest at vger.kernel.org
Signed-off-by: Dmitry Safonov <dima at arista.com>
---
tools/testing/selftests/timens/.gitignore | 1 +
tools/testing/selftests/timens/Makefile | 2 +-
tools/testing/selftests/timens/procfs.c | 145 ++++++++++++++++++++++++++++++
3 files changed, 147 insertions(+), 1 deletion(-)
create mode 100644 tools/testing/selftests/timens/procfs.c
diff --git a/tools/testing/selftests/timens/.gitignore b/tools/testing/selftests/timens/.gitignore
index 9b6c8ddac2c8..94ffdd9cead7 100644
--- a/tools/testing/selftests/timens/.gitignore
+++ b/tools/testing/selftests/timens/.gitignore
@@ -1,3 +1,4 @@
clock_nanosleep
+procfs
timens
timerfd
diff --git a/tools/testing/selftests/timens/Makefile b/tools/testing/selftests/timens/Makefile
index 76a1dc891184..f96f50d1fef8 100644
--- a/tools/testing/selftests/timens/Makefile
+++ b/tools/testing/selftests/timens/Makefile
@@ -1,4 +1,4 @@
-TEST_GEN_PROGS := timens timerfd clock_nanosleep
+TEST_GEN_PROGS := timens timerfd clock_nanosleep procfs
CFLAGS := -Wall -Werror
diff --git a/tools/testing/selftests/timens/procfs.c b/tools/testing/selftests/timens/procfs.c
new file mode 100644
index 000000000000..5067cbbddcc5
--- /dev/null
+++ b/tools/testing/selftests/timens/procfs.c
@@ -0,0 +1,145 @@
+// SPDX-License-Identifier: GPL-2.0
+#define _GNU_SOURCE
+#include <errno.h>
+#include <fcntl.h>
+#include <math.h>
+#include <sched.h>
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <sys/syscall.h>
+#include <sys/types.h>
+#include <time.h>
+#include <unistd.h>
+#include <time.h>
+
+#include "log.h"
+
+#ifndef CLONE_NEWTIME
+# define CLONE_NEWTIME 0x00001000
+#endif
+
+/*
+ * Test shouldn't be run for a day, so add 10 days to child
+ * time and check parent's time to be in the same day.
+ */
+#define MAX_TEST_TIME_SEC (60*5)
+#define DAY_IN_SEC (60*60*24)
+#define TEN_DAYS_IN_SEC (10*DAY_IN_SEC)
+
+#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
+
+static int child_ns, parent_ns;
+
+static int switch_ns(int fd)
+{
+ if (setns(fd, CLONE_NEWTIME))
+ return pr_perror("setns()");
+
+ return 0;
+}
+
+static int init_namespaces(void)
+{
+ char path[] = "/proc/self/ns/time";
+ struct stat st1, st2;
+
+ parent_ns = open(path, O_RDONLY);
+ if (parent_ns <= 0)
+ return pr_perror("Unable to open %s", path);
+
+ if (fstat(parent_ns, &st1))
+ return pr_perror("Unable to stat the parent timens");
+
+ if (unshare(CLONE_NEWTIME))
+ return pr_perror("Can't unshare() timens");
+
+ child_ns = open(path, O_RDONLY);
+ if (child_ns <= 0)
+ return pr_perror("Unable to open %s", path);
+
+ if (fstat(child_ns, &st2))
+ return pr_perror("Unable to stat the timens");
+
+ if (st1.st_ino == st2.st_ino)
+ return pr_err("The same child_ns after CLONE_NEWTIME");
+
+ return 0;
+}
+
+static int read_proc_uptime(struct timespec *uptime)
+{
+ unsigned long up_sec, up_nsec;
+ FILE *proc;
+
+ proc = fopen("/proc/uptime", "r");
+ if (proc == NULL) {
+ pr_perror("Unable to open /proc/uptime");
+ return -1;
+ }
+
+ if (fscanf(proc, "%lu.%02lu", &up_sec, &up_nsec) != 2) {
+ if (errno) {
+ pr_perror("fscanf");
+ return -errno;
+ }
+ pr_err("failed to parse /proc/uptime");
+ return -1;
+ }
+ fclose(proc);
+
+ uptime->tv_sec = up_sec;
+ uptime->tv_nsec = up_nsec;
+ return 0;
+}
+
+static int check_uptime(void)
+{
+ struct timespec ts_btime, uptime_new, uptime_old;
+ time_t uptime_expected;
+ double prec = MAX_TEST_TIME_SEC;
+
+ if (switch_ns(parent_ns))
+ return pr_err("switch_ns(%d)", parent_ns);
+
+ if (clock_gettime(CLOCK_BOOTTIME, &ts_btime))
+ return pr_perror("clock_gettime()");
+
+ if (read_proc_uptime(&uptime_old))
+ return 1;
+
+ ts_btime.tv_sec += TEN_DAYS_IN_SEC;
+
+ if (switch_ns(child_ns))
+ return pr_err("switch_ns(%d)", child_ns);
+
+ if (clock_settime(CLOCK_BOOTTIME, &ts_btime))
+ return pr_perror("clock_settime()");
+
+ if (read_proc_uptime(&uptime_new))
+ return 1;
+
+ uptime_expected = uptime_old.tv_sec + TEN_DAYS_IN_SEC;
+ if (fabs(difftime(uptime_new.tv_sec, uptime_expected)) > prec) {
+ pr_fail("uptime in /proc/uptime: old %ld, new %ld [%ld]",
+ uptime_old.tv_sec, uptime_new.tv_sec,
+ uptime_old.tv_sec + TEN_DAYS_IN_SEC);
+ return 1;
+ }
+
+ pr_msg("Passed for /proc/uptime", "OK");
+ return 0;
+}
+
+int main(int argc, char *argv[])
+{
+ int ret = 0;
+
+ if (init_namespaces())
+ return 1;
+
+ ret |= check_uptime();
+
+ return ret;
+}
--
2.13.6
WARNING: multiple messages have this Message-ID (diff)
From: dima@arista.com (Dmitry Safonov)
Subject: [RFC 19/20] timens/selftest: Add procfs selftest
Date: Wed, 19 Sep 2018 21:50:36 +0100 [thread overview]
Message-ID: <20180919205037.9574-20-dima@arista.com> (raw)
Message-ID: <20180919205036.PY_CCVyEre_qDocjOLu9f2rHfCtVGw2xs-voYiifp6E@z> (raw)
In-Reply-To: <20180919205037.9574-1-dima@arista.com>
Currently only uptime check, but procfs checks for REALTIME might be
added in future.
Cc: linux-kselftest at vger.kernel.org
Signed-off-by: Dmitry Safonov <dima at arista.com>
---
tools/testing/selftests/timens/.gitignore | 1 +
tools/testing/selftests/timens/Makefile | 2 +-
tools/testing/selftests/timens/procfs.c | 145 ++++++++++++++++++++++++++++++
3 files changed, 147 insertions(+), 1 deletion(-)
create mode 100644 tools/testing/selftests/timens/procfs.c
diff --git a/tools/testing/selftests/timens/.gitignore b/tools/testing/selftests/timens/.gitignore
index 9b6c8ddac2c8..94ffdd9cead7 100644
--- a/tools/testing/selftests/timens/.gitignore
+++ b/tools/testing/selftests/timens/.gitignore
@@ -1,3 +1,4 @@
clock_nanosleep
+procfs
timens
timerfd
diff --git a/tools/testing/selftests/timens/Makefile b/tools/testing/selftests/timens/Makefile
index 76a1dc891184..f96f50d1fef8 100644
--- a/tools/testing/selftests/timens/Makefile
+++ b/tools/testing/selftests/timens/Makefile
@@ -1,4 +1,4 @@
-TEST_GEN_PROGS := timens timerfd clock_nanosleep
+TEST_GEN_PROGS := timens timerfd clock_nanosleep procfs
CFLAGS := -Wall -Werror
diff --git a/tools/testing/selftests/timens/procfs.c b/tools/testing/selftests/timens/procfs.c
new file mode 100644
index 000000000000..5067cbbddcc5
--- /dev/null
+++ b/tools/testing/selftests/timens/procfs.c
@@ -0,0 +1,145 @@
+// SPDX-License-Identifier: GPL-2.0
+#define _GNU_SOURCE
+#include <errno.h>
+#include <fcntl.h>
+#include <math.h>
+#include <sched.h>
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <sys/syscall.h>
+#include <sys/types.h>
+#include <time.h>
+#include <unistd.h>
+#include <time.h>
+
+#include "log.h"
+
+#ifndef CLONE_NEWTIME
+# define CLONE_NEWTIME 0x00001000
+#endif
+
+/*
+ * Test shouldn't be run for a day, so add 10 days to child
+ * time and check parent's time to be in the same day.
+ */
+#define MAX_TEST_TIME_SEC (60*5)
+#define DAY_IN_SEC (60*60*24)
+#define TEN_DAYS_IN_SEC (10*DAY_IN_SEC)
+
+#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
+
+static int child_ns, parent_ns;
+
+static int switch_ns(int fd)
+{
+ if (setns(fd, CLONE_NEWTIME))
+ return pr_perror("setns()");
+
+ return 0;
+}
+
+static int init_namespaces(void)
+{
+ char path[] = "/proc/self/ns/time";
+ struct stat st1, st2;
+
+ parent_ns = open(path, O_RDONLY);
+ if (parent_ns <= 0)
+ return pr_perror("Unable to open %s", path);
+
+ if (fstat(parent_ns, &st1))
+ return pr_perror("Unable to stat the parent timens");
+
+ if (unshare(CLONE_NEWTIME))
+ return pr_perror("Can't unshare() timens");
+
+ child_ns = open(path, O_RDONLY);
+ if (child_ns <= 0)
+ return pr_perror("Unable to open %s", path);
+
+ if (fstat(child_ns, &st2))
+ return pr_perror("Unable to stat the timens");
+
+ if (st1.st_ino == st2.st_ino)
+ return pr_err("The same child_ns after CLONE_NEWTIME");
+
+ return 0;
+}
+
+static int read_proc_uptime(struct timespec *uptime)
+{
+ unsigned long up_sec, up_nsec;
+ FILE *proc;
+
+ proc = fopen("/proc/uptime", "r");
+ if (proc == NULL) {
+ pr_perror("Unable to open /proc/uptime");
+ return -1;
+ }
+
+ if (fscanf(proc, "%lu.%02lu", &up_sec, &up_nsec) != 2) {
+ if (errno) {
+ pr_perror("fscanf");
+ return -errno;
+ }
+ pr_err("failed to parse /proc/uptime");
+ return -1;
+ }
+ fclose(proc);
+
+ uptime->tv_sec = up_sec;
+ uptime->tv_nsec = up_nsec;
+ return 0;
+}
+
+static int check_uptime(void)
+{
+ struct timespec ts_btime, uptime_new, uptime_old;
+ time_t uptime_expected;
+ double prec = MAX_TEST_TIME_SEC;
+
+ if (switch_ns(parent_ns))
+ return pr_err("switch_ns(%d)", parent_ns);
+
+ if (clock_gettime(CLOCK_BOOTTIME, &ts_btime))
+ return pr_perror("clock_gettime()");
+
+ if (read_proc_uptime(&uptime_old))
+ return 1;
+
+ ts_btime.tv_sec += TEN_DAYS_IN_SEC;
+
+ if (switch_ns(child_ns))
+ return pr_err("switch_ns(%d)", child_ns);
+
+ if (clock_settime(CLOCK_BOOTTIME, &ts_btime))
+ return pr_perror("clock_settime()");
+
+ if (read_proc_uptime(&uptime_new))
+ return 1;
+
+ uptime_expected = uptime_old.tv_sec + TEN_DAYS_IN_SEC;
+ if (fabs(difftime(uptime_new.tv_sec, uptime_expected)) > prec) {
+ pr_fail("uptime in /proc/uptime: old %ld, new %ld [%ld]",
+ uptime_old.tv_sec, uptime_new.tv_sec,
+ uptime_old.tv_sec + TEN_DAYS_IN_SEC);
+ return 1;
+ }
+
+ pr_msg("Passed for /proc/uptime", "OK");
+ return 0;
+}
+
+int main(int argc, char *argv[])
+{
+ int ret = 0;
+
+ if (init_namespaces())
+ return 1;
+
+ ret |= check_uptime();
+
+ return ret;
+}
--
2.13.6
next prev parent reply other threads:[~2018-09-19 20:50 UTC|newest]
Thread overview: 164+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-19 20:50 [RFC 00/20] ns: Introduce Time Namespace Dmitry Safonov
2018-09-19 20:50 ` Dmitry Safonov
2018-09-19 20:50 ` Dmitry Safonov
2018-09-19 20:50 ` dima
2018-09-19 20:50 ` [RFC 01/20] " Dmitry Safonov
2018-09-28 18:20 ` Laurent Vivier
2018-09-19 20:50 ` [RFC 02/20] timens: Add timens_offsets Dmitry Safonov
2018-09-20 18:45 ` Cyrill Gorcunov
2018-09-20 22:14 ` Cyrill Gorcunov
2018-09-19 20:50 ` [RFC 03/20] timens: Introduce CLOCK_MONOTONIC offsets Dmitry Safonov
2018-09-19 20:50 ` [RFC 04/20] timens: Introduce CLOCK_BOOTTIME offset Dmitry Safonov
2018-09-30 3:18 ` [LKP] [timens] 3cc8de9dcb: RIP:posix_get_boottime kernel test robot
2018-09-30 3:18 ` kernel test robot
2018-09-30 3:18 ` kernel test robot
2018-09-19 20:50 ` [RFC 05/20] timerfd/timens: Take into account ns clock offsets Dmitry Safonov
2018-09-19 20:50 ` [RFC 06/20] kernel: Take into account timens clock offsets in clock_nanosleep Dmitry Safonov
2018-09-19 20:50 ` [RFC 07/20] timens: Shift /proc/uptime Dmitry Safonov
2018-09-19 20:50 ` [RFC 08/20] x86/vdso: Restrict splitting vvar vma Dmitry Safonov
2018-09-19 20:50 ` [RFC 09/20] x86/vdso/timens: Add offsets page in vvar Dmitry Safonov
2018-09-19 20:50 ` [RFC 10/20] x86/vdso: Use set_normalized_timespec() to avoid 32 bit overflow Dmitry Safonov
2018-09-19 20:50 ` [RFC 11/20] x86/vdso: Purge timens page on setns()/unshare()/clone() Dmitry Safonov
2018-09-19 20:50 ` [RFC 12/20] x86/vdso: Look for vvar vma to purge timens page Dmitry Safonov
2018-09-19 20:50 ` [RFC 13/20] posix-timers/timens: Take into account clock offsets Dmitry Safonov
2018-09-30 3:11 ` [LKP] [posix] 25217c6e39: BUG:KASAN:null-ptr-deref_in_c kernel test robot
2018-09-30 3:11 ` kernel test robot
2018-09-30 3:11 ` kernel test robot
2018-09-19 20:50 ` [RFC 14/20] timens: Add align for timens_offsets Dmitry Safonov
2018-09-19 20:50 ` [RFC 15/20] timens: Optimize zero-offsets Dmitry Safonov
2018-09-19 20:50 ` [RFC 16/20] selftest: Add Time Namespace test for supported clocks Dmitry Safonov
2018-09-19 20:50 ` Dmitry Safonov
2018-09-19 20:50 ` dima
2018-09-24 21:36 ` Shuah Khan
2018-09-24 21:36 ` Shuah Khan
2018-09-24 21:36 ` shuah
2018-09-19 20:50 ` [RFC 17/20] selftest/timens: Add test for timerfd Dmitry Safonov
2018-09-19 20:50 ` Dmitry Safonov
2018-09-19 20:50 ` dima
2018-09-19 20:50 ` [RFC 18/20] selftest/timens: Add test for clock_nanosleep Dmitry Safonov
2018-09-19 20:50 ` Dmitry Safonov
2018-09-19 20:50 ` dima
2018-09-19 20:50 ` Dmitry Safonov [this message]
2018-09-19 20:50 ` [RFC 19/20] timens/selftest: Add procfs selftest Dmitry Safonov
2018-09-19 20:50 ` dima
2018-09-19 20:50 ` [RFC 20/20] timens/selftest: Add timer offsets test Dmitry Safonov
2018-09-19 20:50 ` Dmitry Safonov
2018-09-19 20:50 ` dima
2018-09-21 12:27 ` [RFC 00/20] ns: Introduce Time Namespace Eric W. Biederman
2018-09-21 12:27 ` Eric W. Biederman
2018-09-21 12:27 ` ebiederm
2018-09-24 20:51 ` Andrey Vagin
2018-09-24 20:51 ` Andrey Vagin
2018-09-24 20:51 ` Andrey Vagin
2018-09-24 20:51 ` avagin
2018-09-24 22:02 ` Eric W. Biederman
2018-09-24 22:02 ` Eric W. Biederman
2018-09-24 22:02 ` Eric W. Biederman
2018-09-24 22:02 ` ebiederm
2018-09-25 1:42 ` Andrey Vagin
2018-09-25 1:42 ` Andrey Vagin
2018-09-25 1:42 ` Andrey Vagin
2018-09-25 1:42 ` avagin
2018-09-26 17:36 ` Eric W. Biederman
2018-09-26 17:36 ` Eric W. Biederman
2018-09-26 17:36 ` Eric W. Biederman
2018-09-26 17:36 ` ebiederm
2018-09-26 17:59 ` Dmitry Safonov
2018-09-26 17:59 ` Dmitry Safonov
2018-09-26 17:59 ` Dmitry Safonov
2018-09-26 17:59 ` 0x7f454c46
2018-09-27 21:30 ` Thomas Gleixner
2018-09-27 21:30 ` Thomas Gleixner
2018-09-27 21:30 ` Thomas Gleixner
2018-09-27 21:30 ` tglx
2018-09-27 21:41 ` Thomas Gleixner
2018-09-27 21:41 ` Thomas Gleixner
2018-09-27 21:41 ` Thomas Gleixner
2018-09-27 21:41 ` tglx
2018-10-01 23:20 ` Andrey Vagin
2018-10-01 23:20 ` Andrey Vagin
2018-10-01 23:20 ` Andrey Vagin
2018-10-01 23:20 ` avagin
2018-10-02 6:15 ` Thomas Gleixner
2018-10-02 6:15 ` Thomas Gleixner
2018-10-02 6:15 ` Thomas Gleixner
2018-10-02 6:15 ` tglx
2018-10-02 21:05 ` Dmitry Safonov
2018-10-02 21:05 ` Dmitry Safonov
2018-10-02 21:05 ` 0x7f454c46
2018-10-02 21:26 ` Thomas Gleixner
2018-10-02 21:26 ` Thomas Gleixner
2018-10-02 21:26 ` tglx
2018-09-28 17:03 ` Eric W. Biederman
2018-09-28 17:03 ` Eric W. Biederman
2018-09-28 17:03 ` Eric W. Biederman
2018-09-28 17:03 ` ebiederm
2018-09-28 19:32 ` Thomas Gleixner
2018-09-28 19:32 ` Thomas Gleixner
2018-09-28 19:32 ` Thomas Gleixner
2018-09-28 19:32 ` tglx
2018-10-01 9:05 ` Eric W. Biederman
2018-10-01 9:05 ` Eric W. Biederman
2018-10-01 9:05 ` Eric W. Biederman
2018-10-01 9:05 ` ebiederm
2018-10-01 9:15 ` Setting monotonic time? Eric W. Biederman
2018-10-01 9:15 ` Eric W. Biederman
2018-10-01 9:15 ` Eric W. Biederman
2018-10-01 9:15 ` ebiederm
2018-10-01 18:52 ` Thomas Gleixner
2018-10-01 18:52 ` Thomas Gleixner
2018-10-01 18:52 ` Thomas Gleixner
2018-10-01 18:52 ` tglx
2018-10-02 20:00 ` Arnd Bergmann
2018-10-02 20:00 ` Arnd Bergmann
2018-10-02 20:00 ` arnd
2018-10-02 20:06 ` Thomas Gleixner
2018-10-02 20:06 ` Thomas Gleixner
2018-10-02 20:06 ` tglx
2018-10-03 4:50 ` Eric W. Biederman
2018-10-03 4:50 ` Eric W. Biederman
2018-10-03 4:50 ` ebiederm
2018-10-03 5:25 ` Thomas Gleixner
2018-10-03 5:25 ` Thomas Gleixner
2018-10-03 5:25 ` tglx
2018-10-03 6:14 ` Eric W. Biederman
2018-10-03 6:14 ` Eric W. Biederman
2018-10-03 6:14 ` ebiederm
2018-10-03 7:02 ` Arnd Bergmann
2018-10-03 7:02 ` Arnd Bergmann
2018-10-03 7:02 ` arnd
2018-10-03 6:14 ` Thomas Gleixner
2018-10-03 6:14 ` Thomas Gleixner
2018-10-03 6:14 ` tglx
2018-10-01 20:51 ` Andrey Vagin
2018-10-01 20:51 ` Andrey Vagin
2018-10-01 20:51 ` Andrey Vagin
2018-10-01 20:51 ` avagin
2018-10-02 6:16 ` Thomas Gleixner
2018-10-02 6:16 ` Thomas Gleixner
2018-10-02 6:16 ` Thomas Gleixner
2018-10-02 6:16 ` tglx
2018-10-21 1:41 ` [RFC 00/20] ns: Introduce Time Namespace Andrei Vagin
2018-10-21 1:41 ` Andrei Vagin
2018-10-21 1:41 ` Andrei Vagin
2018-10-21 1:41 ` avagin
2018-10-21 3:54 ` Andrei Vagin
2018-10-21 3:54 ` Andrei Vagin
2018-10-21 3:54 ` Andrei Vagin
2018-10-21 3:54 ` avagin
2018-10-29 20:33 ` Thomas Gleixner
2018-10-29 20:33 ` Thomas Gleixner
2018-10-29 20:33 ` Thomas Gleixner
2018-10-29 20:33 ` tglx
2018-10-29 21:21 ` Eric W. Biederman
2018-10-29 21:21 ` Eric W. Biederman
2018-10-29 21:21 ` Eric W. Biederman
2018-10-29 21:21 ` ebiederm
2018-10-29 21:36 ` Thomas Gleixner
2018-10-29 21:36 ` Thomas Gleixner
2018-10-29 21:36 ` Thomas Gleixner
2018-10-29 21:36 ` tglx
2018-10-31 16:26 ` Andrei Vagin
2018-10-31 16:26 ` Andrei Vagin
2018-10-31 16:26 ` Andrei Vagin
2018-10-31 16:26 ` avagin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180919205037.9574-20-dima@arista.com \
--to=dima@arista.com \
--cc=0x7f454c46@gmail.com \
--cc=adrian@lisas.de \
--cc=avagin@openvz.org \
--cc=christian.brauner@ubuntu.com \
--cc=containers@lists.linux-foundation.org \
--cc=criu@openvz.org \
--cc=ebiederm@xmission.com \
--cc=gorcunov@openvz.org \
--cc=hpa@zytor.com \
--cc=jdike@addtoit.com \
--cc=linux-api@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=luto@kernel.org \
--cc=mingo@redhat.com \
--cc=oleg@redhat.com \
--cc=shuah@kernel.org \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
--cc=xemul@virtuozzo.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.