Re: [PATCH] tst_test: Add needs_cpu_vendor to struct tst_test
Jan Stancek via ltp <[email protected]>
| Newsgroups | gmane.linux.ltp |
|---|---|
| Message-ID | <CAASaF6wcvPUD38N=9o+MSv6e0oFkURCiCB-s5o+ip-hVg-x4Ew@mail.gmail.com> |
On Tue, Jun 9, 2026 at 4:32 PM Cyril Hrubis <[email protected]> wrote: > > This adds a generic implementaiton of needs_cpu_vendor to the tst_test > structure that is based on parsing /proc/cpuinfo. It does not likely > work for non-x86 CPUs since the /proc/cpuinfo format is different, but > we do not care at the moment. For arm we would have to look at the > implementer field instead, we will add that if/once needed. > > Signed-off-by: Cyril Hrubis <[email protected]> > CC: Piotr Kubaj <[email protected]> Acked-by: Jan Stancek <[email protected]> I'm curios what test needs it. > --- > include/tst_cpu.h | 9 +++++++++ > include/tst_test.h | 5 +++++ > lib/newlib_tests/.gitignore | 1 + > lib/newlib_tests/test_cpu_vendor.c | 16 ++++++++++++++++ > lib/tst_cpu.c | 18 ++++++++++++++++++ > lib/tst_test.c | 5 +++++ > 6 files changed, 54 insertions(+) > create mode 100644 lib/newlib_tests/test_cpu_vendor.c > > diff --git a/include/tst_cpu.h b/include/tst_cpu.h > index 0724975f0..31222a3e1 100644 > --- a/include/tst_cpu.h > +++ b/include/tst_cpu.h > @@ -10,6 +10,13 @@ long tst_ncpus_conf(void); > long tst_ncpus_max(void); > long tst_ncpus_available(void); > > +/** > + * tst_cpu_vendor() - Returns CPU vendor. > + * > + * Return: A CPU vendor e.g. "GenuineIntel" or "AuthenticAMD". > + */ > +const char *tst_cpu_vendor(void); > + > #define VIRT_ANY 0 /* catch-all argument for tst_is_virt() */ > #define VIRT_XEN 1 /* xen dom0/domU */ > #define VIRT_KVM 2 /* only default virtual CPU */ > @@ -21,4 +28,6 @@ long tst_ncpus_available(void); > > int tst_is_virt(int virt_type); > > + > + > #endif /* TST_CPU_H__ */ > diff --git a/include/tst_test.h b/include/tst_test.h > index 9bc67cf6a..c69362485 100644 > --- a/include/tst_test.h > +++ b/include/tst_test.h > @@ -391,6 +391,9 @@ struct tst_fs { > * > * @min_cpus: Minimal number of online CPUs the test needs to run. > * > + * @needs_cpu_vendor: The test needs a specific CPU vendor e.g. "GenuineIntel" > + * or "AuthenticAMD". > + * > * @min_mem_avail: Minimal amount of available RAM memory in megabytes required > * for the test to run. > * > @@ -581,6 +584,8 @@ struct tst_fs { > const char *const *skip_filesystems; > > unsigned long min_cpus; > + const char *needs_cpu_vendor; > + > unsigned long min_mem_avail; > unsigned long min_swap_avail; > > diff --git a/lib/newlib_tests/.gitignore b/lib/newlib_tests/.gitignore > index 1586e0ad6..b85163824 100644 > --- a/lib/newlib_tests/.gitignore > +++ b/lib/newlib_tests/.gitignore > @@ -71,3 +71,4 @@ test_brk_parent > test_brk_pass > test_brk_variant > test_fail_variant > +test_cpu_vendor > diff --git a/lib/newlib_tests/test_cpu_vendor.c b/lib/newlib_tests/test_cpu_vendor.c > new file mode 100644 > index 000000000..10b473b7e > --- /dev/null > +++ b/lib/newlib_tests/test_cpu_vendor.c > @@ -0,0 +1,16 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later > +/* > + * Copyright (c) 2026 Cyril Hrubis <[email protected]> > + */ > + > +#include "tst_test.h" > + > +static void do_test(void) > +{ > + tst_res(TPASS, "Test passed!"); > +} > + > +static struct tst_test test = { > + .test_all = do_test, > + .needs_cpu_vendor = "Nonexistent", > +}; > diff --git a/lib/tst_cpu.c b/lib/tst_cpu.c > index faffcba91..177661c82 100644 > --- a/lib/tst_cpu.c > +++ b/lib/tst_cpu.c > @@ -23,6 +23,7 @@ > #include <unistd.h> > #include "test.h" > #include "tso_safe_macros.h" > +#include "tso_safe_file_ops.h" > > long tst_ncpus(void) > { > @@ -97,3 +98,20 @@ long tst_ncpus_available(void) > return tst_ncpus(); > #endif > } > + > +const char *tst_cpu_vendor(void) > +{ > + static char cpu_vendor[16]; > + int ret; > + > + if (cpu_vendor[0]) > + return cpu_vendor; > + > + ret = FILE_LINES_SCANF(NULL, "/proc/cpuinfo", "vendor_id : %16s[^\n]", cpu_vendor); > + if (ret) > + strcpy(cpu_vendor, "Unknown"); > + > + tst_resm(TDEBUG, "CPU vendor '%s'", cpu_vendor); > + > + return cpu_vendor; > +} > diff --git a/lib/tst_test.c b/lib/tst_test.c > index 0bebb0a3e..5f7156403 100644 > --- a/lib/tst_test.c > +++ b/lib/tst_test.c > @@ -1416,6 +1416,11 @@ static void do_setup(int argc, char *argv[]) > 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->needs_cpu_vendor && strcmp(tst_test->needs_cpu_vendor, tst_cpu_vendor())) { > + tst_brk(TCONF, "Tests needs '%s' CPU to continue have '%s'", > + tst_test->needs_cpu_vendor, tst_cpu_vendor()); > + } > + > if (tst_test->sample) > tst_test = tst_timer_test_setup(tst_test); > > -- > 2.53.0 > > > -- > Mailing list info: https://lists.linux.it/listinfo/ltp > -- Mailing list info: https://lists.linux.it/listinfo/ltp