Hi Mark,
On 5/5/20 11:47 AM, Mark Brown wrote:
Provide a very basic selftest for getcpu() which similarly to our existing test for gettimeofday() looks up the function in the vDSO and prints the results it gets if the function exists and succeeds.
Signed-off-by: Mark Brown broonie@kernel.org
tools/testing/selftests/vDSO/.gitignore | 1 + tools/testing/selftests/vDSO/Makefile | 3 +- .../testing/selftests/vDSO/vdso_test_getcpu.c | 50 +++++++++++++++++++ 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 tools/testing/selftests/vDSO/vdso_test_getcpu.c
diff --git a/tools/testing/selftests/vDSO/.gitignore b/tools/testing/selftests/vDSO/.gitignore index 74f49bd5f6dd..5eb64d41e541 100644 --- a/tools/testing/selftests/vDSO/.gitignore +++ b/tools/testing/selftests/vDSO/.gitignore @@ -1,4 +1,5 @@ # SPDX-License-Identifier: GPL-2.0-only vdso_test vdso_test_gettimeofday +vdso_test_getcpu vdso_standalone_test_x86 diff --git a/tools/testing/selftests/vDSO/Makefile b/tools/testing/selftests/vDSO/Makefile index ae15d700b62e..0069f2f83f86 100644 --- a/tools/testing/selftests/vDSO/Makefile +++ b/tools/testing/selftests/vDSO/Makefile @@ -4,7 +4,7 @@ include ../lib.mk uname_M := $(shell uname -m 2>/dev/null || echo not) ARCH ?= $(shell echo $(uname_M) | sed -e s/i.86/x86/ -e s/x86_64/x86/) -TEST_GEN_PROGS := $(OUTPUT)/vdso_test_gettimeofday +TEST_GEN_PROGS := $(OUTPUT)/vdso_test_gettimeofday $(OUTPUT)/vdso_test_getcpu ifeq ($(ARCH),x86) TEST_GEN_PROGS += $(OUTPUT)/vdso_standalone_test_x86 endif @@ -18,6 +18,7 @@ endif all: $(TEST_GEN_PROGS) $(OUTPUT)/vdso_test_gettimeofday: parse_vdso.c vdso_test_gettimeofday.c +$(OUTPUT)/vdso_test_getcpu: parse_vdso.c vdso_test_getcpu.c $(OUTPUT)/vdso_standalone_test_x86: vdso_standalone_test_x86.c parse_vdso.c $(CC) $(CFLAGS) $(CFLAGS_vdso_standalone_test_x86) \ vdso_standalone_test_x86.c parse_vdso.c \ diff --git a/tools/testing/selftests/vDSO/vdso_test_getcpu.c b/tools/testing/selftests/vDSO/vdso_test_getcpu.c new file mode 100644 index 000000000000..a9dd3db145f3 --- /dev/null +++ b/tools/testing/selftests/vDSO/vdso_test_getcpu.c @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: GPL-2.0-only +/*
- vdso_test_getcpu.c: Sample code to test parse_vdso.c and vDSO getcpu()
- Copyright (c) 2020 Arm Ltd
- */
+#include <stdint.h> +#include <elf.h> +#include <stdio.h> +#include <sys/auxv.h> +#include <sys/time.h>
+#include "../kselftest.h" +#include "parse_vdso.h"
+const char *version = "LINUX_2.6"; +const char *name = "__vdso_getcpu";
+struct getcpu_cache; +typedef long (*getcpu_t)(unsigned int *, unsigned int *,
struct getcpu_cache *);
+int main(int argc, char **argv) +{
- unsigned long sysinfo_ehdr = getauxval(AT_SYSINFO_EHDR);
WARNING: Missing a blank line after declarations WARNING: Missing a blank line after declarations #135: FILE: tools/testing/selftests/vDSO/vdso_test_getcpu.c:27: + unsigned long sysinfo_ehdr = getauxval(AT_SYSINFO_EHDR); + if (!sysinfo_ehdr) {
WARNING: Missing a blank line after declarations #143: FILE: tools/testing/selftests/vDSO/vdso_test_getcpu.c:35: + getcpu_t get_cpu = (getcpu_t)vdso_sym(version, name); + if (!get_cpu) {
WARNING: Missing a blank line after declarations #150: FILE: tools/testing/selftests/vDSO/vdso_test_getcpu.c:42: + long ret = get_cpu(&cpu, &node, 0); + if (ret == 0) {
Please send v2 for this one.
thanks, -- Shuah