2023-07-11 10:05:57

by Tiezhu Yang

[permalink] [raw]
Subject: [PATCH v2 0/2] Modify vDSO selftests

v2: Rebase on 6.5-rc1 and update the commit message

Tiezhu Yang (2):
selftests/vDSO: Add support for LoongArch
selftests/vDSO: Get version and name for all archs

tools/testing/selftests/vDSO/vdso_config.h | 6 ++++-
tools/testing/selftests/vDSO/vdso_test_getcpu.c | 16 +++++--------
.../selftests/vDSO/vdso_test_gettimeofday.c | 26 ++++++----------------
3 files changed, 18 insertions(+), 30 deletions(-)

--
2.1.0



2023-07-11 10:06:29

by Tiezhu Yang

[permalink] [raw]
Subject: [PATCH v2 2/2] selftests/vDSO: Get version and name for all archs

It could not find __vdso_getcpu and __vdso_gettimeofday when test
getcpu and gettimeofday on LoongArch.

# make headers && cd tools/testing/selftests/vDSO && make
# ./vdso_test_getcpu
Could not find __vdso_getcpu
# ./vdso_test_gettimeofday
Could not find __vdso_gettimeofday

One simple way is to add LoongArch case to define version and name,
just like commit d942f231afc0 ("selftests/vDSO: Add riscv getcpu &
gettimeofday test"), but it is not the best way.

Since each architecture has already defined names and versions in
vdso_config.h, it is proper to include vdso_config.h to get version
and name for all archs.

Signed-off-by: Tiezhu Yang <[email protected]>
---
tools/testing/selftests/vDSO/vdso_test_getcpu.c | 16 +++++--------
.../selftests/vDSO/vdso_test_gettimeofday.c | 26 ++++++----------------
2 files changed, 13 insertions(+), 29 deletions(-)

diff --git a/tools/testing/selftests/vDSO/vdso_test_getcpu.c b/tools/testing/selftests/vDSO/vdso_test_getcpu.c
index 1df5d05..b758f68 100644
--- a/tools/testing/selftests/vDSO/vdso_test_getcpu.c
+++ b/tools/testing/selftests/vDSO/vdso_test_getcpu.c
@@ -13,13 +13,7 @@

#include "../kselftest.h"
#include "parse_vdso.h"
-
-#if defined(__riscv)
-const char *version = "LINUX_4.15";
-#else
-const char *version = "LINUX_2.6";
-#endif
-const char *name = "__vdso_getcpu";
+#include "vdso_config.h"

struct getcpu_cache;
typedef long (*getcpu_t)(unsigned int *, unsigned int *,
@@ -27,6 +21,8 @@ typedef long (*getcpu_t)(unsigned int *, unsigned int *,

int main(int argc, char **argv)
{
+ const char *version = versions[VDSO_VERSION];
+ const char **name = (const char **)&names[VDSO_NAMES];
unsigned long sysinfo_ehdr;
unsigned int cpu, node;
getcpu_t get_cpu;
@@ -40,9 +36,9 @@ int main(int argc, char **argv)

vdso_init_from_sysinfo_ehdr(getauxval(AT_SYSINFO_EHDR));

- get_cpu = (getcpu_t)vdso_sym(version, name);
+ get_cpu = (getcpu_t)vdso_sym(version, name[4]);
if (!get_cpu) {
- printf("Could not find %s\n", name);
+ printf("Could not find %s\n", name[4]);
return KSFT_SKIP;
}

@@ -50,7 +46,7 @@ int main(int argc, char **argv)
if (ret == 0) {
printf("Running on CPU %u node %u\n", cpu, node);
} else {
- printf("%s failed\n", name);
+ printf("%s failed\n", name[4]);
return KSFT_FAIL;
}

diff --git a/tools/testing/selftests/vDSO/vdso_test_gettimeofday.c b/tools/testing/selftests/vDSO/vdso_test_gettimeofday.c
index e411f28..ee4f1ca 100644
--- a/tools/testing/selftests/vDSO/vdso_test_gettimeofday.c
+++ b/tools/testing/selftests/vDSO/vdso_test_gettimeofday.c
@@ -18,25 +18,13 @@

#include "../kselftest.h"
#include "parse_vdso.h"
-
-/*
- * ARM64's vDSO exports its gettimeofday() implementation with a different
- * name and version from other architectures, so we need to handle it as
- * a special case.
- */
-#if defined(__aarch64__)
-const char *version = "LINUX_2.6.39";
-const char *name = "__kernel_gettimeofday";
-#elif defined(__riscv)
-const char *version = "LINUX_4.15";
-const char *name = "__vdso_gettimeofday";
-#else
-const char *version = "LINUX_2.6";
-const char *name = "__vdso_gettimeofday";
-#endif
+#include "vdso_config.h"

int main(int argc, char **argv)
{
+ const char *version = versions[VDSO_VERSION];
+ const char **name = (const char **)&names[VDSO_NAMES];
+
unsigned long sysinfo_ehdr = getauxval(AT_SYSINFO_EHDR);
if (!sysinfo_ehdr) {
printf("AT_SYSINFO_EHDR is not present!\n");
@@ -47,10 +35,10 @@ int main(int argc, char **argv)

/* Find gettimeofday. */
typedef long (*gtod_t)(struct timeval *tv, struct timezone *tz);
- gtod_t gtod = (gtod_t)vdso_sym(version, name);
+ gtod_t gtod = (gtod_t)vdso_sym(version, name[0]);

if (!gtod) {
- printf("Could not find %s\n", name);
+ printf("Could not find %s\n", name[0]);
return KSFT_SKIP;
}

@@ -61,7 +49,7 @@ int main(int argc, char **argv)
printf("The time is %lld.%06lld\n",
(long long)tv.tv_sec, (long long)tv.tv_usec);
} else {
- printf("%s failed\n", name);
+ printf("%s failed\n", name[0]);
return KSFT_FAIL;
}

--
2.1.0


2023-07-11 10:14:03

by Tiezhu Yang

[permalink] [raw]
Subject: [PATCH v2 1/2] selftests/vDSO: Add support for LoongArch

There exist the following errors when build vDSO selftests on LoongArch:

# make headers && cd tools/testing/selftests/vDSO && make
...
error: 'VDSO_VERSION' undeclared (first use in this function)
...
error: 'VDSO_NAMES' undeclared (first use in this function)

We can see that VDSO_VERSION should be LINUX_5.10 and VDSO_NAMES should
be 1 for LoongArch in arch/loongarch/vdso/vdso.lds.S, add them to support
LoongArch.

Signed-off-by: Tiezhu Yang <[email protected]>
---
tools/testing/selftests/vDSO/vdso_config.h | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/tools/testing/selftests/vDSO/vdso_config.h b/tools/testing/selftests/vDSO/vdso_config.h
index cdfed40..7b543e7 100644
--- a/tools/testing/selftests/vDSO/vdso_config.h
+++ b/tools/testing/selftests/vDSO/vdso_config.h
@@ -53,15 +53,19 @@
#if __riscv_xlen == 32
#define VDSO_32BIT 1
#endif
+#elif defined(__loongarch__)
+#define VDSO_VERSION 6
+#define VDSO_NAMES 1
#endif

-static const char *versions[6] = {
+static const char *versions[7] = {
"LINUX_2.6",
"LINUX_2.6.15",
"LINUX_2.6.29",
"LINUX_2.6.39",
"LINUX_4",
"LINUX_4.15",
+ "LINUX_5.10"
};

static const char *names[2][6] = {
--
2.1.0


2023-08-19 12:43:49

by Tiezhu Yang

[permalink] [raw]
Subject: Re: [PATCH v2 0/2] Modify vDSO selftests

Hi Shuah,

On 07/11/2023 05:57 PM, Tiezhu Yang wrote:
> v2: Rebase on 6.5-rc1 and update the commit message
>
> Tiezhu Yang (2):
> selftests/vDSO: Add support for LoongArch
> selftests/vDSO: Get version and name for all archs
>
> tools/testing/selftests/vDSO/vdso_config.h | 6 ++++-
> tools/testing/selftests/vDSO/vdso_test_getcpu.c | 16 +++++--------
> .../selftests/vDSO/vdso_test_gettimeofday.c | 26 ++++++----------------
> 3 files changed, 18 insertions(+), 30 deletions(-)
>

Any comments? I guess this should go through the linux-kselftest tree.

Thanks,
Tiezhu


2023-10-12 01:53:08

by Tiezhu Yang

[permalink] [raw]
Subject: Re: [PATCH v2 0/2] Modify vDSO selftests

Cc: Andrew Morton <[email protected]>

On 08/17/2023 03:20 PM, Tiezhu Yang wrote:
> Hi Shuah,
>
> On 07/11/2023 05:57 PM, Tiezhu Yang wrote:
>> v2: Rebase on 6.5-rc1 and update the commit message
>>
>> Tiezhu Yang (2):
>> selftests/vDSO: Add support for LoongArch
>> selftests/vDSO: Get version and name for all archs
>>
>> tools/testing/selftests/vDSO/vdso_config.h | 6 ++++-
>> tools/testing/selftests/vDSO/vdso_test_getcpu.c | 16 +++++--------
>> .../selftests/vDSO/vdso_test_gettimeofday.c | 26
>> ++++++----------------
>> 3 files changed, 18 insertions(+), 30 deletions(-)
>>
>
> Any comments? I guess this should go through the linux-kselftest tree.
>
> Thanks,
> Tiezhu
>

What are the status of these patches?

https://lore.kernel.org/lkml/[email protected]/

This is a ping message, maybe you have forgot them?

Thanks,
Tiezhu