[LTP] [PATCH v3] getcpu01: Reinstate node_id test
Richard Palethorpe
rpalethorpe@suse.com
Thu Dec 15 11:13:22 CET 2022
Presently the node_id is only checked on i386 and it is broken. The
sched_getcpu call was substituted for getcpu when
available. sched_getcpu does not have the node_id parameter, it's not
the same thing as getcpu.
Also we can check the node_id on any platform which has NUMA. Which
includes more than just x86.
Signed-off-by: Richard Palethorpe <rpalethorpe@suse.com>
Cc: Cyril Hrubis <chrubis@suse.cz>
---
V2:
* Removed all the ifdefs
* Use libc getcpu when available
* Remove kernel version check
V3:
* Add back the kernel version check bc it conflicts with other patch
configure.ac | 1 +
include/lapi/sched.h | 7 ++++++
testcases/kernel/syscalls/getcpu/getcpu01.c | 28 +++------------------
3 files changed, 11 insertions(+), 25 deletions(-)
diff --git a/configure.ac b/configure.ac
index e9b15c7f7..1ab7cc60d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -101,6 +101,7 @@ AC_CHECK_FUNCS_ONCE([ \
fstatat \
getauxval \
getcontext \
+ getcpu \
getdents \
getdents64 \
io_pgetevents \
diff --git a/include/lapi/sched.h b/include/lapi/sched.h
index 1d22a9d7e..1065665d1 100644
--- a/include/lapi/sched.h
+++ b/include/lapi/sched.h
@@ -70,6 +70,13 @@ static inline void clone3_supported_by_kernel(void)
}
}
+#ifndef HAVE_GETCPU
+static inline int getcpu(unsigned *cpu, unsigned *node)
+{
+ return tst_syscall(__NR_getcpu, cpu, node, NULL);
+}
+#endif
+
#ifndef SCHED_DEADLINE
# define SCHED_DEADLINE 6
#endif
diff --git a/testcases/kernel/syscalls/getcpu/getcpu01.c b/testcases/kernel/syscalls/getcpu/getcpu01.c
index fcc273e29..4c4d86764 100644
--- a/testcases/kernel/syscalls/getcpu/getcpu01.c
+++ b/testcases/kernel/syscalls/getcpu/getcpu01.c
@@ -11,26 +11,12 @@
#define _GNU_SOURCE
#include <dirent.h>
#include <errno.h>
-#include <sched.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
-#include "lapi/syscalls.h"
-#include "lapi/cpuset.h"
#include "tst_test.h"
-#include "config.h"
-
-static inline int get_cpu(unsigned *cpu_id,
- unsigned *node_id LTP_ATTRIBUTE_UNUSED,
- void *cache_struct LTP_ATTRIBUTE_UNUSED)
-{
-#ifndef HAVE_SCHED_GETCPU
- return tst_syscall(__NR_getcpu, cpu_id, node_id, cache_struct);
-#else
- *cpu_id = sched_getcpu();
-#endif
- return 0;
-}
+#include "lapi/cpuset.h"
+#include "lapi/sched.h"
static unsigned int max_cpuid(size_t size, cpu_set_t * set)
{
@@ -78,7 +64,6 @@ realloc:
return cpu_max;
}
-#ifdef __i386__
static unsigned int get_nodeid(unsigned int cpu_id)
{
DIR *directory_parent, *directory_node;
@@ -119,33 +104,26 @@ static unsigned int get_nodeid(unsigned int cpu_id)
}
return node_id;
}
-#endif
static void run(void)
{
unsigned int cpu_id, node_id = 0;
unsigned int cpu_set;
-#ifdef __i386__
unsigned int node_set;
-#endif
cpu_set = set_cpu_affinity();
-#ifdef __i386__
node_set = get_nodeid(cpu_set);
-#endif
- TEST(get_cpu(&cpu_id, &node_id, NULL));
+ TEST(getcpu(&cpu_id, &node_id));
if (TST_RET == 0) {
if (cpu_id != cpu_set)
tst_res(TFAIL, "getcpu() returned wrong value"
" expected cpuid:%d, returned value cpuid: %d",
cpu_set, cpu_id);
-#ifdef __i386__
else if (node_id != node_set)
tst_res(TFAIL, "getcpu() returned wrong value"
" expected node id:%d returned node id:%d",
node_set, node_id);
-#endif
else
tst_res(TPASS, "getcpu() returned proper"
" cpuid:%d, node id:%d", cpu_id,
--
2.38.1
More information about the ltp
mailing list