All of lore.kernel.org
 help / color / mirror / Atom feed
* [LTP] [PATCH v4 1/3] lib: adding .supported_archs field in tst_test structure
@ 2021-11-09 13:09 Li Wang
  2021-11-09 13:09 ` [LTP] [PATCH v4 2/3] testcase: make use of .supported_archs Li Wang
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Li Wang @ 2021-11-09 13:09 UTC (permalink / raw)
  To: ltp

Testcases for specific arch should be limited on that only being supported
platform to run, we now involve a .supported_archs to achieve this feature
in LTP library. All you need to run a test on the expected arch is to set
the '.supported_archs' array in the 'struct tst_test' to choose the required
arch list. e.g.

    .supported_archs = (const char *const []){"x86_64", "ppc64", NULL}

This helps move the TCONF info from code to tst_test metadata as well.

And, we also export a struct tst_arch to save the system architecture
for using in the whole test cases.

    extern const struct tst_arch {
             char name[16];
             enum tst_arch_type type;
    } tst_arch;

Signed-off-by: Li Wang <liwang@redhat.com>
---
 doc/c-test-api.txt | 36 ++++++++++++++++++
 include/tst_arch.h | 39 +++++++++++++++++++
 include/tst_test.h |  7 ++++
 lib/tst_arch.c     | 94 ++++++++++++++++++++++++++++++++++++++++++++++
 lib/tst_test.c     |  3 ++
 5 files changed, 179 insertions(+)
 create mode 100644 include/tst_arch.h
 create mode 100644 lib/tst_arch.c

diff --git a/doc/c-test-api.txt b/doc/c-test-api.txt
index 3127018a4..64d0630ce 100644
--- a/doc/c-test-api.txt
+++ b/doc/c-test-api.txt
@@ -2261,6 +2261,42 @@ struct tst_test test = {
 };
 -------------------------------------------------------------------------------
 
+1.39 Testing on the specific architecture
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Testcases for specific arch should be limited on that only being supported
+platform to run, we now involve a .supported_archs to achieve this feature
+in LTP library. All you need to run a test on the expected arch is to set
+the '.supported_archs' array in the 'struct tst_test' to choose the required
+arch list. e.g.
+
+    .supported_archs = (const char *const []){"x86_64", "ppc64", NULL}
+
+This helps move the TCONF info from code to tst_test metadata as well.
+
+And, we also export a struct tst_arch to save the system architecture for
+using in the whole test cases.
+
+    extern const struct tst_arch {
+             char name[16];
+             enum tst_arch_type type;
+    } tst_arch;
+
+[source,c]
+-------------------------------------------------------------------------------
+#include "tst_test.h"
+
+static struct tst_test test = {
+       ...
+       .setup = setup,
+       .supported_archs = (const char *const []) {
+                 "x86_64",
+                 "ppc64",
+                 "s390x",
+                 NULL
+       },
+};
+-------------------------------------------------------------------------------
+
 2. Common problems
 ------------------
 
diff --git a/include/tst_arch.h b/include/tst_arch.h
new file mode 100644
index 000000000..e6d0a63d6
--- /dev/null
+++ b/include/tst_arch.h
@@ -0,0 +1,39 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later
+ * Copyright (c) 2021 Li Wang <liwang@redhat.com>
+ */
+
+#ifndef TST_ARCH_H__
+#define TST_ARCH_H__
+
+enum tst_arch_type {
+	TST_UNKNOWN,
+	TST_I386,
+	TST_X86_64,
+	TST_IA64,
+	TST_PPC,
+	TST_PPC64,
+	TST_S390,
+	TST_S390X,
+	TST_ARM,
+	TST_AARCH64,
+	TST_SPARC,
+};
+
+/*
+ * This tst_arch is to save the system architecture for
+ * using in the whole testcase.
+ */
+extern const struct tst_arch {
+        char name[16];
+        enum tst_arch_type type;
+} tst_arch;
+
+/*
+ * Check if test platform is in the given arch list. If yes return 1,
+ * otherwise return 0.
+ *
+ * @archlist A NULL terminated array of architectures to support.
+ */
+int tst_is_on_arch(const char *const *archlist);
+
+#endif /* TST_ARCH_H__ */
diff --git a/include/tst_test.h b/include/tst_test.h
index 3dcb45de0..e3ca3f528 100644
--- a/include/tst_test.h
+++ b/include/tst_test.h
@@ -43,6 +43,7 @@
 #include "tst_fips.h"
 #include "tst_taint.h"
 #include "tst_memutils.h"
+#include "tst_arch.h"
 
 /*
  * Reports testcase result.
@@ -139,6 +140,12 @@ struct tst_test {
 
 	const char *min_kver;
 
+	/*
+	 * The supported_archs is a NULL terminated list of archs the test
+	 * does support.
+	 */
+	const char *const *supported_archs;
+
 	/* If set the test is compiled out */
 	const char *tconf_msg;
 
diff --git a/lib/tst_arch.c b/lib/tst_arch.c
new file mode 100644
index 000000000..67a955789
--- /dev/null
+++ b/lib/tst_arch.c
@@ -0,0 +1,94 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later
+ * Copyright (c) 2021 Li Wang <liwang@redhat.com>
+ */
+
+#include <string.h>
+#include <stdlib.h>
+
+#define TST_NO_DEFAULT_MAIN
+#include "tst_arch.h"
+#include "tst_test.h"
+
+const struct tst_arch tst_arch = {
+#if defined(__x86_64__)
+        .name = "x86_64",
+        .type = TST_X86_64,
+#elif defined(__i386__)
+        .name = "i386",
+        .type = TST_I386,
+#elif defined(__ia64__)
+        .name = "ia64",
+        .type = TST_IA64,
+#elif defined(__powerpc64__) || defined(__ppc64__)
+        .name = "ppc64",
+        .type = TST_PPC64,
+#elif defined(__powerpc__) || defined(__ppc__)
+        .name = "ppc",
+        .type = TST_PPC,
+#elif defined(__s390x__)
+        .name = "s390x",
+        .type = TST_S390X,
+#elif defined(__s390__)
+        .name = "s390",
+        .type = TST_S390,
+#elif defined(__aarch64__)
+        .name = "aarch64",
+        .type = TST_AARCH64,
+#elif defined(__arm__)
+        .name = "arm",
+        .type = TST_ARM,
+#elif defined(__sparc__)
+        .name = "sparc",
+        .type = TST_SPARC,
+#else
+        .name = "unknown",
+        .type = TST_UNKNOWN,
+#endif
+};
+
+static const char *const arch_type_list[] = {
+	"i386",
+	"x86_64",
+	"ia64",
+	"ppc",
+	"ppc64",
+	"s390",
+	"s390x",
+	"arm",
+	"aarch64",
+	"sparc",
+	NULL
+};
+
+static int is_valid_arch_name(const char *name)
+{
+	unsigned int i;
+
+	for (i = 0; arch_type_list[i]; i++) {
+		if (!strcmp(arch_type_list[i], name))
+			return 1;
+	}
+
+	return 0;
+}
+
+int tst_is_on_arch(const char *const *archlist)
+{
+	unsigned int i;
+
+	if (!archlist)
+		return 1;
+
+	for (i = 0; archlist[i]; i++) {
+		if (!is_valid_arch_name(archlist[i]))
+			tst_brk(TBROK, "%s is invalid arch, please reset!",
+					archlist[i]);
+	}
+
+	for (i = 0; archlist[i]; i++) {
+		if (!strcmp(tst_arch.name, archlist[i]))
+			return 1;
+	}
+
+	return 0;
+}
diff --git a/lib/tst_test.c b/lib/tst_test.c
index 02ae28335..73b19d3ec 100644
--- a/lib/tst_test.c
+++ b/lib/tst_test.c
@@ -975,6 +975,9 @@ static void do_setup(int argc, char *argv[])
 	if (tst_test->min_kver)
 		check_kver();
 
+	if (tst_test->supported_archs && !tst_is_on_arch(tst_test->supported_archs))
+		tst_brk(TCONF, "This arch '%s' is not supported for test!", tst_arch.name);
+
 	if (tst_test->skip_in_lockdown && tst_lockdown_enabled())
 		tst_brk(TCONF, "Kernel is locked down, skipping test");
 
-- 
2.31.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

* [LTP] [PATCH v4 2/3] testcase: make use of .supported_archs
  2021-11-09 13:09 [LTP] [PATCH v4 1/3] lib: adding .supported_archs field in tst_test structure Li Wang
@ 2021-11-09 13:09 ` Li Wang
  2021-11-09 16:23   ` Cyril Hrubis
  2021-11-09 13:09 ` [LTP] [PATCH v4 3/3] max_map_count: replace ifdefs by tst_arch Li Wang
  2021-11-09 16:11 ` [LTP] [PATCH v4 1/3] lib: adding .supported_archs field in tst_test structure Cyril Hrubis
  2 siblings, 1 reply; 9+ messages in thread
From: Li Wang @ 2021-11-09 13:09 UTC (permalink / raw)
  To: ltp

In some places, we have to keep ifdefs to make the compiler work
with unportable code.

Signed-off-by: Li Wang <liwang@redhat.com>
---
 configure.ac                                  |  1 +
 testcases/cve/meltdown.c                      | 16 ++++++-----
 testcases/kernel/syscalls/ptrace/ptrace07.c   | 11 ++++----
 testcases/kernel/syscalls/ptrace/ptrace08.c   | 22 ++++++++-------
 testcases/kernel/syscalls/ptrace/ptrace09.c   | 11 +++++---
 testcases/kernel/syscalls/ptrace/ptrace10.c   | 12 +++++----
 .../syscalls/set_mempolicy/set_mempolicy05.c  | 27 +++++++++----------
 7 files changed, 54 insertions(+), 46 deletions(-)

diff --git a/configure.ac b/configure.ac
index 5bf3c52ec..7efd9df87 100644
--- a/configure.ac
+++ b/configure.ac
@@ -42,6 +42,7 @@ AC_CHECK_DECLS([SEM_STAT_ANY],,,[#include <sys/sem.h>])
 
 AC_CHECK_HEADERS_ONCE([ \
     asm/ldt.h \
+    emmintrin.h \
     ifaddrs.h \
     keyutils.h \
     linux/can.h \
diff --git a/testcases/cve/meltdown.c b/testcases/cve/meltdown.c
index 5a984aba3..2577c1a80 100644
--- a/testcases/cve/meltdown.c
+++ b/testcases/cve/meltdown.c
@@ -6,8 +6,6 @@
 #include "config.h"
 #include "tst_test.h"
 
-#if defined(__x86_64__) || defined(__i386__)
-
 #include <stdio.h>
 #include <string.h>
 #include <signal.h>
@@ -17,6 +15,7 @@
 #include <ctype.h>
 #include <sys/utsname.h>
 
+#ifdef HAVE_EMMINTRIN_H
 #include <emmintrin.h>
 
 #include "tst_tsc.h"
@@ -378,14 +377,17 @@ static struct tst_test test = {
 	.test_all = run,
 	.cleanup = cleanup,
 	.min_kver = "2.6.32",
+	.supported_archs = (const char *const []) {
+		"i386",
+		"x86_64",
+		NULL
+	},
 	.tags = (const struct tst_tag[]) {
 		{"CVE", "2017-5754"},
 		{}
 	}
 };
 
-#else /* #if defined(__x86_64__) || defined(__i386__) */
-
-TST_TEST_TCONF("not x86_64 or i386");
-
-#endif /* #else #if defined(__x86_64__) || defined(__i386__) */
+#else /* HAVE_EMMINTRIN_H */
+	TST_TEST_TCONF("<emmintrin.h> is not supported");
+#endif
diff --git a/testcases/kernel/syscalls/ptrace/ptrace07.c b/testcases/kernel/syscalls/ptrace/ptrace07.c
index 9e3f7511d..da62cadb0 100644
--- a/testcases/kernel/syscalls/ptrace/ptrace07.c
+++ b/testcases/kernel/syscalls/ptrace/ptrace07.c
@@ -48,13 +48,13 @@
 # define NT_X86_XSTATE 0x202
 #endif
 
-#ifdef __x86_64__
 static void check_regs_loop(uint32_t initval)
 {
 	const unsigned long num_iters = 1000000000;
 	uint32_t xmm0[4] = { initval, initval, initval, initval };
 	int status = 1;
 
+#ifdef __x86_64__
 	asm volatile("   movdqu %0, %%xmm0\n"
 		     "   mov %0, %%rbx\n"
 		     "1: dec %2\n"
@@ -68,6 +68,7 @@ static void check_regs_loop(uint32_t initval)
 		     "3:\n"
 		     : "+m" (xmm0), "+r" (status)
 		     : "r" (num_iters) : "rax", "rbx", "xmm0");
+#endif
 
 	if (status) {
 		tst_res(TFAIL,
@@ -178,6 +179,10 @@ static struct tst_test test = {
 	.test_all = do_test,
 	.forks_child = 1,
 	.needs_checkpoints = 1,
+	.supported_archs = (const char *const []) {
+		"x86_64",
+		NULL
+	},
 	.tags = (const struct tst_tag[]) {
 		{"linux-git", "814fb7bb7db5"},
 		{"CVE", "2017-15537"},
@@ -185,7 +190,3 @@ static struct tst_test test = {
 	}
 
 };
-
-#else /* !__x86_64__ */
-	TST_TEST_TCONF("this test is only supported on x86_64");
-#endif /* __x86_64__ */
diff --git a/testcases/kernel/syscalls/ptrace/ptrace08.c b/testcases/kernel/syscalls/ptrace/ptrace08.c
index f86f69a9c..77c4c10c3 100644
--- a/testcases/kernel/syscalls/ptrace/ptrace08.c
+++ b/testcases/kernel/syscalls/ptrace/ptrace08.c
@@ -43,18 +43,16 @@
 #include "tst_test.h"
 #include "tst_safe_stdio.h"
 
-#if defined(__i386__) || defined(__x86_64__)
-
 static pid_t child_pid;
 
-#if defined(__x86_64__)
-# define KERN_ADDR_MIN 0xffff800000000000
-# define KERN_ADDR_MAX 0xffffffffffffffff
-# define KERN_ADDR_BITS 64
-#elif defined(__i386__)
+#if defined(__i386__)
 # define KERN_ADDR_MIN 0xc0000000
 # define KERN_ADDR_MAX 0xffffffff
 # define KERN_ADDR_BITS 32
+#else
+# define KERN_ADDR_MIN 0xffff800000000000
+# define KERN_ADDR_MAX 0xffffffffffffffff
+# define KERN_ADDR_BITS 64
 #endif
 
 static int deffered_check;
@@ -106,6 +104,7 @@ static void ptrace_try_kern_addr(unsigned long kern_addr)
 	if (SAFE_WAITPID(child_pid, &status, WUNTRACED) != child_pid)
 		tst_brk(TBROK, "Received event from unexpected PID");
 
+#if defined(__i386__) || defined(__x86_64__)
 	SAFE_PTRACE(PTRACE_ATTACH, child_pid, NULL, NULL);
 	SAFE_PTRACE(PTRACE_POKEUSER, child_pid,
 		(void *)offsetof(struct user, u_debugreg[0]), (void *)1);
@@ -135,6 +134,7 @@ static void ptrace_try_kern_addr(unsigned long kern_addr)
 
 	addr = ptrace(PTRACE_PEEKUSER, child_pid,
 	              (void*)offsetof(struct user, u_debugreg[0]), NULL);
+#endif
 
 	if (!deffered_check && addr == kern_addr)
 		tst_res(TFAIL, "Was able to set breakpoint on kernel addr");
@@ -164,6 +164,11 @@ static struct tst_test test = {
 	.setup = setup,
 	.cleanup = cleanup,
 	.forks_child = 1,
+	.supported_archs = (const char *const []) {
+		"i386",
+		"x86_64",
+		NULL
+	},
 	.tags = (const struct tst_tag[]) {
 		{"linux-git", "f67b15037a7a"},
 		{"CVE", "2018-1000199"},
@@ -171,6 +176,3 @@ static struct tst_test test = {
 		{}
 	}
 };
-#else
-TST_TEST_TCONF("This test is only supported on x86 systems");
-#endif
diff --git a/testcases/kernel/syscalls/ptrace/ptrace09.c b/testcases/kernel/syscalls/ptrace/ptrace09.c
index 85875ce65..8ccdfcc4b 100644
--- a/testcases/kernel/syscalls/ptrace/ptrace09.c
+++ b/testcases/kernel/syscalls/ptrace/ptrace09.c
@@ -22,7 +22,6 @@
 #include <signal.h>
 #include "tst_test.h"
 
-#if defined(__i386__) || defined(__x86_64__)
 static short watchpoint;
 static pid_t child_pid;
 
@@ -46,6 +45,7 @@ static void run(void)
 {
 	int status;
 
+#if defined(__i386__) || defined(__x86_64__)
 	child_pid = SAFE_FORK();
 
 	if (!child_pid) {
@@ -60,6 +60,7 @@ static void run(void)
 	SAFE_PTRACE(PTRACE_POKEUSER, child_pid,
 		(void *)offsetof(struct user, u_debugreg[7]), (void *)0x30001);
 	SAFE_PTRACE(PTRACE_CONT, child_pid, NULL, NULL);
+#endif
 
 	while (1) {
 		if (SAFE_WAITPID(child_pid, &status, 0) != child_pid)
@@ -92,12 +93,14 @@ static struct tst_test test = {
 	.test_all = run,
 	.cleanup = cleanup,
 	.forks_child = 1,
+	.supported_archs = (const char *const []) {
+		"i386",
+		"x86_64",
+		NULL
+	},
 	.tags = (const struct tst_tag[]) {
 		{"linux-git", "d8ba61ba58c8"},
 		{"CVE", "2018-8897"},
 		{}
 	}
 };
-#else
-TST_TEST_TCONF("This test is only supported on x86 systems");
-#endif
diff --git a/testcases/kernel/syscalls/ptrace/ptrace10.c b/testcases/kernel/syscalls/ptrace/ptrace10.c
index b5d6b9f8f..3bd8ca1a9 100644
--- a/testcases/kernel/syscalls/ptrace/ptrace10.c
+++ b/testcases/kernel/syscalls/ptrace/ptrace10.c
@@ -22,8 +22,6 @@
 #include <signal.h>
 #include "tst_test.h"
 
-#if defined(__i386__) || defined(__x86_64__)
-
 static pid_t child_pid;
 
 static void child_main(void)
@@ -45,6 +43,7 @@ static void run(void)
 	if (SAFE_WAITPID(child_pid, &status, WUNTRACED) != child_pid)
 		tst_brk(TBROK, "Received event from unexpected PID");
 
+#if defined(__i386__) || defined(__x86_64__)
 	SAFE_PTRACE(PTRACE_ATTACH, child_pid, NULL, NULL);
 	SAFE_PTRACE(PTRACE_POKEUSER, child_pid,
 		(void *)offsetof(struct user, u_debugreg[0]), (void *)1);
@@ -53,6 +52,7 @@ static void run(void)
 
 	addr = ptrace(PTRACE_PEEKUSER, child_pid,
 	              (void*)offsetof(struct user, u_debugreg[0]), NULL);
+#endif
 
 	if (addr == 2)
 		tst_res(TPASS, "The rd0 was set on second PTRACE_POKEUSR");
@@ -76,11 +76,13 @@ static struct tst_test test = {
 	.test_all = run,
 	.cleanup = cleanup,
 	.forks_child = 1,
+	.supported_archs = (const char *const []) {
+		"i386",
+		"x86_64",
+		NULL
+	},
 	.tags = (const struct tst_tag[]) {
 		{"linux-git", "bd14406b78e6"},
 		{}
 	}
 };
-#else
-TST_TEST_TCONF("This test is only supported on x86 systems");
-#endif
diff --git a/testcases/kernel/syscalls/set_mempolicy/set_mempolicy05.c b/testcases/kernel/syscalls/set_mempolicy/set_mempolicy05.c
index 86f6a95dc..f56b7b26f 100644
--- a/testcases/kernel/syscalls/set_mempolicy/set_mempolicy05.c
+++ b/testcases/kernel/syscalls/set_mempolicy/set_mempolicy05.c
@@ -37,18 +37,10 @@
 #include "config.h"
 #include "tst_test.h"
 
-#if defined(__i386__) || defined(__powerpc__)
-
 #include <string.h>
 
 static unsigned int i;
 static int sys_ret;
-#ifdef __i386__
-static const int sys_num = 276;
-static const int mode;
-static const int node_mask_ptr = UINT_MAX;
-static const int node_mask_sz = UINT_MAX;
-#endif
 static volatile char *stack_ptr;
 
 static void run(void)
@@ -58,6 +50,11 @@ static void run(void)
 	register long mode __asm__("r3");
 	register long node_mask_ptr __asm__("r4");
 	register long node_mask_sz __asm__("r5");
+#else
+	static const int sys_num = 276;
+	static const int mode;
+	static const int node_mask_ptr = UINT_MAX;
+	static const int node_mask_sz = UINT_MAX;
 #endif
 	char stack_pattern[0x400];
 
@@ -78,7 +75,8 @@ static void run(void)
 		:
 		"memory", "cr0", "r6", "r7", "r8", "r9", "r10", "r11", "r12");
 	sys_ret = mode;
-#else /* __i386__ */
+#endif
+#ifdef __i386__
 	asm volatile (
 		"add $0x400, %%esp\n\t"
 		"int $0x80\n\t"
@@ -114,15 +112,14 @@ static void run(void)
 
 static struct tst_test test = {
 	.test_all = run,
+	.supported_archs = (const char *const []) {
+		"i386",
+		"ppc",
+		NULL
+	},
 	.tags = (const struct tst_tag[]) {
 		{"linux-git", "cf01fb9985e8"},
 		{"CVE", "CVE-2017-7616"},
 		{}
 	}
 };
-
-#else /* #if defined(__x86_64__) || defined(__powerpc__) */
-
-TST_TEST_TCONF("not i386 or powerpc");
-
-#endif /* #else #if defined(__x86_64__) || defined(__powerpc__) */
-- 
2.31.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

* [LTP] [PATCH v4 3/3] max_map_count: replace ifdefs by tst_arch
  2021-11-09 13:09 [LTP] [PATCH v4 1/3] lib: adding .supported_archs field in tst_test structure Li Wang
  2021-11-09 13:09 ` [LTP] [PATCH v4 2/3] testcase: make use of .supported_archs Li Wang
@ 2021-11-09 13:09 ` Li Wang
  2021-11-09 16:24   ` Cyril Hrubis
  2021-11-09 16:11 ` [LTP] [PATCH v4 1/3] lib: adding .supported_archs field in tst_test structure Cyril Hrubis
  2 siblings, 1 reply; 9+ messages in thread
From: Li Wang @ 2021-11-09 13:09 UTC (permalink / raw)
  To: ltp

Signed-off-by: Li Wang <liwang@redhat.com>
---
 testcases/kernel/mem/tunable/max_map_count.c | 46 ++++++++++----------
 1 file changed, 24 insertions(+), 22 deletions(-)

diff --git a/testcases/kernel/mem/tunable/max_map_count.c b/testcases/kernel/mem/tunable/max_map_count.c
index 4f0ad0037..bd5af0ff6 100644
--- a/testcases/kernel/mem/tunable/max_map_count.c
+++ b/testcases/kernel/mem/tunable/max_map_count.c
@@ -55,7 +55,6 @@
 
 static long old_max_map_count = -1;
 static long old_overcommit = -1;
-static struct utsname un;
 
 static void setup(void)
 {
@@ -66,9 +65,6 @@ static void setup(void)
 	old_max_map_count = get_sys_tune("max_map_count");
 	old_overcommit = get_sys_tune("overcommit_memory");
 	set_sys_tune("overcommit_memory", 0, 1);
-
-	if (uname(&un) != 0)
-		tst_brk(TBROK | TERRNO, "uname error");
 }
 
 static void cleanup(void)
@@ -91,24 +87,30 @@ static bool filter_map(const char *line)
 	if (ret != 1)
 		return false;
 
-#if defined(__x86_64__) || defined(__x86__)
-	/* On x86, there's an old compat vsyscall page */
-	if (!strcmp(buf, "[vsyscall]"))
-		return true;
-#elif defined(__ia64__)
-	/* On ia64, the vdso is not a proper mapping */
-	if (!strcmp(buf, "[vdso]"))
-		return true;
-#elif defined(__arm__)
-	/* Skip it when run it in aarch64 */
-	if ((!strcmp(un.machine, "aarch64"))
-	|| (!strcmp(un.machine, "aarch64_be")))
-		return false;
-
-	/* Older arm kernels didn't label their vdso maps */
-	if (!strncmp(line, "ffff0000-ffff1000", 17))
-		return true;
-#endif
+	switch (tst_arch.type) {
+	case TST_I386:
+	case TST_X86_64:
+		/* On x86, there's an old compat vsyscall page */
+		if (!strcmp(buf, "[vsyscall]"))
+			return true;
+		break;
+	case TST_IA64:
+		/* On ia64, the vdso is not a proper mapping */
+		if (!strcmp(buf, "[vdso]"))
+			return true;
+		break;
+	case TST_ARM:
+		/* Skip it when run it in aarch64 */
+		if (tst_kernel_bits() == 64)
+			return false;
+
+		/* Older arm kernels didn't label their vdso maps */
+		if (!strncmp(line, "ffff0000-ffff1000", 17))
+			return true;
+		break;
+	default:
+		break;
+	};
 
 	return false;
 }
-- 
2.31.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

* Re: [LTP] [PATCH v4 1/3] lib: adding .supported_archs field in tst_test structure
  2021-11-09 13:09 [LTP] [PATCH v4 1/3] lib: adding .supported_archs field in tst_test structure Li Wang
  2021-11-09 13:09 ` [LTP] [PATCH v4 2/3] testcase: make use of .supported_archs Li Wang
  2021-11-09 13:09 ` [LTP] [PATCH v4 3/3] max_map_count: replace ifdefs by tst_arch Li Wang
@ 2021-11-09 16:11 ` Cyril Hrubis
  2021-11-12  6:41   ` Li Wang
  2 siblings, 1 reply; 9+ messages in thread
From: Cyril Hrubis @ 2021-11-09 16:11 UTC (permalink / raw)
  To: Li Wang; +Cc: ltp

Hi!
> diff --git a/include/tst_arch.h b/include/tst_arch.h
> new file mode 100644
> index 000000000..e6d0a63d6
> --- /dev/null
> +++ b/include/tst_arch.h
> @@ -0,0 +1,39 @@
> +/* SPDX-License-Identifier: GPL-2.0-or-later
> + * Copyright (c) 2021 Li Wang <liwang@redhat.com>
> + */
> +
> +#ifndef TST_ARCH_H__
> +#define TST_ARCH_H__
> +
> +enum tst_arch_type {
> +	TST_UNKNOWN,
> +	TST_I386,

I would still probably name this TST_X86, Linux does not support i386
anymore, the remaining 32bit distributions usually require at least i586
or i686...

Anyways:

Reviewed-by: Cyril Hrubis <chrubis@suse.cz>

-- 
Cyril Hrubis
chrubis@suse.cz

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

* Re: [LTP] [PATCH v4 2/3] testcase: make use of .supported_archs
  2021-11-09 13:09 ` [LTP] [PATCH v4 2/3] testcase: make use of .supported_archs Li Wang
@ 2021-11-09 16:23   ` Cyril Hrubis
  2021-11-16 10:27     ` Richard Palethorpe
  0 siblings, 1 reply; 9+ messages in thread
From: Cyril Hrubis @ 2021-11-09 16:23 UTC (permalink / raw)
  To: Li Wang; +Cc: ltp

Hi!
>  static void run(void)
> @@ -58,6 +50,11 @@ static void run(void)
>  	register long mode __asm__("r3");
>  	register long node_mask_ptr __asm__("r4");
>  	register long node_mask_sz __asm__("r5");
> +#else
> +	static const int sys_num = 276;
> +	static const int mode;
> +	static const int node_mask_ptr = UINT_MAX;
> +	static const int node_mask_sz = UINT_MAX;

These shouldn't be static anymore.

>  #endif
>  	char stack_pattern[0x400];
>  
> @@ -78,7 +75,8 @@ static void run(void)
>  		:
>  		"memory", "cr0", "r6", "r7", "r8", "r9", "r10", "r11", "r12");
>  	sys_ret = mode;
> -#else /* __i386__ */
> +#endif
> +#ifdef __i386__
>  	asm volatile (
>  		"add $0x400, %%esp\n\t"
>  		"int $0x80\n\t"
> @@ -114,15 +112,14 @@ static void run(void)
>  
>  static struct tst_test test = {
>  	.test_all = run,
> +	.supported_archs = (const char *const []) {
> +		"i386",
> +		"ppc",

And we should add "ppc64" here as well, right? 

> +		NULL
> +	},
>  	.tags = (const struct tst_tag[]) {
>  		{"linux-git", "cf01fb9985e8"},
>  		{"CVE", "CVE-2017-7616"},
>  		{}
>  	}
>  };

Other than these two:

Reviewed-by: Cyril Hrubis <chrubis@suse.cz>

-- 
Cyril Hrubis
chrubis@suse.cz

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

* Re: [LTP] [PATCH v4 3/3] max_map_count: replace ifdefs by tst_arch
  2021-11-09 13:09 ` [LTP] [PATCH v4 3/3] max_map_count: replace ifdefs by tst_arch Li Wang
@ 2021-11-09 16:24   ` Cyril Hrubis
  0 siblings, 0 replies; 9+ messages in thread
From: Cyril Hrubis @ 2021-11-09 16:24 UTC (permalink / raw)
  To: Li Wang; +Cc: ltp

Hi!
Reviewed-by: Cyril Hrubis <chrubis@suse.cz>

-- 
Cyril Hrubis
chrubis@suse.cz

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

* Re: [LTP] [PATCH v4 1/3] lib: adding .supported_archs field in tst_test structure
  2021-11-09 16:11 ` [LTP] [PATCH v4 1/3] lib: adding .supported_archs field in tst_test structure Cyril Hrubis
@ 2021-11-12  6:41   ` Li Wang
  2021-11-16 10:30     ` Richard Palethorpe
  0 siblings, 1 reply; 9+ messages in thread
From: Li Wang @ 2021-11-12  6:41 UTC (permalink / raw)
  To: Cyril Hrubis; +Cc: LTP List


[-- Attachment #1.1: Type: text/plain, Size: 1911 bytes --]

> > +#ifndef TST_ARCH_H__
> > +#define TST_ARCH_H__
> > +
> > +enum tst_arch_type {
> > +     TST_UNKNOWN,
> > +     TST_I386,
>
> I would still probably name this TST_X86, Linux does not support i386
> anymore, the remaining 32bit distributions usually require at least i586
> or i686...
>

Sure, If go with that TST_X86, we just need to do modifications based on
V4 like below, right? What else am I missing here?

--- a/include/tst_arch.h
+++ b/include/tst_arch.h
@@ -7,7 +7,7 @@

 enum tst_arch_type {
        TST_UNKNOWN,
-       TST_I386,
+       TST_X86,
        TST_X86_64,
        TST_IA64,
        TST_PPC,
diff --git a/lib/tst_arch.c b/lib/tst_arch.c
index 67a955789..f19802a03 100644
--- a/lib/tst_arch.c
+++ b/lib/tst_arch.c
@@ -13,9 +13,9 @@ const struct tst_arch tst_arch = {
 #if defined(__x86_64__)
         .name = "x86_64",
         .type = TST_X86_64,
-#elif defined(__i386__)
-        .name = "i386",
-        .type = TST_I386,
+#elif defined(__i386__) || defined(__i586__) || defined(__i686__)
+        .name = "x86",
+        .type = TST_X86,
 #elif defined(__ia64__)
         .name = "ia64",
         .type = TST_IA64,
@@ -48,6 +48,8 @@ const struct tst_arch tst_arch = {

 static const char *const arch_type_list[] = {
        "i386",
+       "i586",
+       "i686",
        "x86_64",
        "ia64",
        "ppc",
diff --git a/testcases/kernel/mem/tunable/max_map_count.c
b/testcases/kernel/mem/tunable/max_map_count.c
index bd5af0ff6..a4c3dbf8e 100644
--- a/testcases/kernel/mem/tunable/max_map_count.c
+++ b/testcases/kernel/mem/tunable/max_map_count.c
@@ -88,7 +88,7 @@ static bool filter_map(const char *line)
                return false;

        switch (tst_arch.type) {
-       case TST_I386:
+       case TST_X86:
        case TST_X86_64:
                /* On x86, there's an old compat vsyscall page */
                if (!strcmp(buf, "[vsyscall]"))

-- 
Regards,
Li Wang

[-- Attachment #1.2: Type: text/html, Size: 2982 bytes --]

[-- Attachment #2: Type: text/plain, Size: 60 bytes --]


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

* Re: [LTP] [PATCH v4 2/3] testcase: make use of .supported_archs
  2021-11-09 16:23   ` Cyril Hrubis
@ 2021-11-16 10:27     ` Richard Palethorpe
  0 siblings, 0 replies; 9+ messages in thread
From: Richard Palethorpe @ 2021-11-16 10:27 UTC (permalink / raw)
  To: Cyril Hrubis; +Cc: ltp

Hello,

Cyril Hrubis <chrubis@suse.cz> writes:

> Hi!
>>  static void run(void)
>> @@ -58,6 +50,11 @@ static void run(void)
>>  	register long mode __asm__("r3");
>>  	register long node_mask_ptr __asm__("r4");
>>  	register long node_mask_sz __asm__("r5");
>> +#else
>> +	static const int sys_num = 276;
>> +	static const int mode;
>> +	static const int node_mask_ptr = UINT_MAX;
>> +	static const int node_mask_sz = UINT_MAX;
>
> These shouldn't be static anymore.
>
>>  #endif
>>  	char stack_pattern[0x400];
>>  
>> @@ -78,7 +75,8 @@ static void run(void)
>>  		:
>>  		"memory", "cr0", "r6", "r7", "r8", "r9", "r10", "r11", "r12");
>>  	sys_ret = mode;
>> -#else /* __i386__ */
>> +#endif
>> +#ifdef __i386__
>>  	asm volatile (
>>  		"add $0x400, %%esp\n\t"
>>  		"int $0x80\n\t"
>> @@ -114,15 +112,14 @@ static void run(void)
>>  
>>  static struct tst_test test = {
>>  	.test_all = run,
>> +	.supported_archs = (const char *const []) {
>> +		"i386",
>> +		"ppc",
>
> And we should add "ppc64" here as well, right?

Nope, I think this is only 32-bit

>
>> +		NULL
>> +	},
>>  	.tags = (const struct tst_tag[]) {
>>  		{"linux-git", "cf01fb9985e8"},
>>  		{"CVE", "CVE-2017-7616"},
>>  		{}
>>  	}
>>  };
>
> Other than these two:
>
> Reviewed-by: Cyril Hrubis <chrubis@suse.cz>
>
> -- 
> Cyril Hrubis
> chrubis@suse.cz


-- 
Thank you,
Richard.

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

* Re: [LTP] [PATCH v4 1/3] lib: adding .supported_archs field in tst_test structure
  2021-11-12  6:41   ` Li Wang
@ 2021-11-16 10:30     ` Richard Palethorpe
  0 siblings, 0 replies; 9+ messages in thread
From: Richard Palethorpe @ 2021-11-16 10:30 UTC (permalink / raw)
  To: Li Wang; +Cc: ltp

Hello Li,

Li Wang <liwang@redhat.com> writes:

>  
>  > +#ifndef TST_ARCH_H__
>  > +#define TST_ARCH_H__
>  > +
>  > +enum tst_arch_type {
>  > +     TST_UNKNOWN,
>  > +     TST_I386,
>
>  I would still probably name this TST_X86, Linux does not support i386
>  anymore, the remaining 32bit distributions usually require at least i586
>  or i686...
>
> Sure, If go with that TST_X86, we just need to do modifications based on
> V4 like below, right? What else am I missing here?

Cyril made another comment about static keyword usage on patch 2. Could
you please roll a V5?

-- 
Thank you,
Richard.

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

end of thread, other threads:[~2021-11-16 10:32 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-09 13:09 [LTP] [PATCH v4 1/3] lib: adding .supported_archs field in tst_test structure Li Wang
2021-11-09 13:09 ` [LTP] [PATCH v4 2/3] testcase: make use of .supported_archs Li Wang
2021-11-09 16:23   ` Cyril Hrubis
2021-11-16 10:27     ` Richard Palethorpe
2021-11-09 13:09 ` [LTP] [PATCH v4 3/3] max_map_count: replace ifdefs by tst_arch Li Wang
2021-11-09 16:24   ` Cyril Hrubis
2021-11-09 16:11 ` [LTP] [PATCH v4 1/3] lib: adding .supported_archs field in tst_test structure Cyril Hrubis
2021-11-12  6:41   ` Li Wang
2021-11-16 10:30     ` Richard Palethorpe

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.