[LTP] [PATCH v2 6/7] API: Add tst_ncpus_available
Cyril Hrubis
chrubis@suse.cz
Wed Apr 7 17:36:49 CEST 2021
Hi!
> Signed-off-by: Richard Palethorpe <rpalethorpe@suse.com>
> ---
> include/tst_cpu.h | 1 +
> lib/tst_cpu.c | 23 +++++++++++++++++++++++
> 2 files changed, 24 insertions(+)
>
> diff --git a/include/tst_cpu.h b/include/tst_cpu.h
> index 117e27087..b3a449bea 100644
> --- a/include/tst_cpu.h
> +++ b/include/tst_cpu.h
> @@ -8,6 +8,7 @@
> long tst_ncpus(void);
> long tst_ncpus_conf(void);
> long tst_ncpus_max(void);
> +long tst_ncpus_available(void);
>
> #define VIRT_ANY 0 /* catch-all argument for tst_is_virt() */
> #define VIRT_XEN 1 /* xen dom0/domU */
> diff --git a/lib/tst_cpu.c b/lib/tst_cpu.c
> index 033155e47..581215199 100644
> --- a/lib/tst_cpu.c
> +++ b/lib/tst_cpu.c
> @@ -17,6 +17,8 @@
> * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> */
>
> +#include "lapi/cpuset.h"
> +
> #include <stdlib.h>
> #include <unistd.h>
> #include "test.h"
> @@ -71,3 +73,24 @@ long tst_ncpus_max(void)
> }
> return ncpus_max;
> }
> +
> +long tst_ncpus_available(void)
> +{
> +#ifdef CPU_COUNT
> + long ncpus = tst_ncpus_max();
> + size_t cpusz = CPU_ALLOC_SIZE(ncpus);
> + cpu_set_t *cpus = CPU_ALLOC(ncpus);
The CPU_ALLOC() is allowed to fail an return NULL, I guess that the
worst that would happen here is EFAULT from sched_getaffinity() but it
would be nicer to do something as:
if (!cpus) {
tst_resm(TWARN | TERRNO, "CPU_ALLOC() failed");
return ncpus;
}
> + if (sched_getaffinity(0, cpusz, cpus)) {
> + tst_resm(TWARN | TERRNO, "sched_getaffinity(0, %zu, %zx)",
> + cpusz, (size_t)cpus);
> + } else {
> + ncpus = CPU_COUNT(cpus);
> + }
> + free(cpus);
This should be CPU_FREE() if we are pedantic.
I guess that nothing stops glibc from using alloca() if we have less
than a few bytes to allocate and switch to malloc() only if the ncpus is
bigger than certain threshold internally in the CPU_ALLOC() macro.
> + return ncpus;
> +#else
> + return tst_ncpus();
> +#endif
> +}
> --
> 2.30.1
>
>
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
--
Cyril Hrubis
chrubis@suse.cz
More information about the ltp
mailing list