From: Cyril Hrubis <chrubis@suse.cz>
To: ltp@lists.linux.it
Subject: [LTP] [PATCH v2 6/7] API: Add tst_ncpus_available
Date: Wed, 7 Apr 2021 17:36:49 +0200 [thread overview]
Message-ID: <YG3RkQWnvIaRQ6sO@yuki> (raw)
In-Reply-To: <20210318130935.28528-7-rpalethorpe@suse.com>
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
next prev parent reply other threads:[~2021-04-07 15:36 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-18 13:09 [LTP] [PATCH v2 0/7] Fuzzy Sync single core support and tests Richard Palethorpe
2021-03-18 13:09 ` [LTP] [PATCH v2 1/7] fzsync: Add self tests Richard Palethorpe
2021-03-18 21:16 ` Petr Vorel
2021-03-19 7:57 ` Richard Palethorpe
2021-03-18 13:09 ` [LTP] [PATCH v2 2/7] fzsync: Reset delay bias Richard Palethorpe
2021-04-07 15:37 ` Cyril Hrubis
2021-03-18 13:09 ` [LTP] [PATCH v2 3/7] fzsync: Correctly print positive lower delay range bound Richard Palethorpe
2021-03-18 13:09 ` [LTP] [PATCH v2 4/7] fzsync: Add sched_yield for single core machine Richard Palethorpe
2021-03-18 13:09 ` [LTP] [PATCH v2 5/7] fzsync: Move yield check out of loop and add yield to delay Richard Palethorpe
2021-03-18 13:09 ` [LTP] [PATCH v2 6/7] API: Add tst_ncpus_available Richard Palethorpe
2021-04-07 15:36 ` Cyril Hrubis [this message]
2021-04-07 15:38 ` Cyril Hrubis
2021-03-18 13:09 ` [LTP] [PATCH v2 7/7] fzsync: Check processor affinity Richard Palethorpe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YG3RkQWnvIaRQ6sO@yuki \
--to=chrubis@suse.cz \
--cc=ltp@lists.linux.it \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox