From 2dcf4a56d118a8198424a1c30163f04fc04ddf32 Mon Sep 17 00:00:00 2001 From: Stanislav Kholmanskikh Date: Tue, 29 Oct 2013 10:03:59 +0000 Subject: [PATCH] xfstests: src/feature.c: print a number of online CPUs For this purpose we use sysconf() as it is the preferred platform neutral interface for getting this sort of information. Based on Dave Chinner proposal. Signed-off-by: Stanislav Kholmanskikh Reviewed-by: Rich Johnston Signed-off-by: Rich Johnston --- src/feature.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/feature.c b/src/feature.c index 2619ca53..334063b1 100644 --- a/src/feature.c +++ b/src/feature.c @@ -30,6 +30,7 @@ * Return code: 0 is true, anything else is error/not supported * * Test for machine features + * -o report a number of online cpus * -s report pagesize * -w report bits per long */ @@ -39,6 +40,7 @@ #include #include #include +#include #ifdef HAVE_XFS_XQM_H #include @@ -64,7 +66,7 @@ usage(void) fprintf(stderr, "Usage: feature [-v] - \n"); fprintf(stderr, " feature [-v] -c \n"); fprintf(stderr, " feature [-v] -t \n"); - fprintf(stderr, " feature -s | -w\n"); + fprintf(stderr, " feature -o | -s | -w\n"); exit(1); } @@ -212,9 +214,10 @@ main(int argc, char **argv) int uflag = 0; int Uflag = 0; int wflag = 0; + int oflag = 0; char *fs = NULL; - while ((c = getopt(argc, argv, "ctgGpPqsuUvw")) != EOF) { + while ((c = getopt(argc, argv, "ctgGopPqsuUvw")) != EOF) { switch (c) { case 'c': cflag++; @@ -228,6 +231,9 @@ main(int argc, char **argv) case 'G': Gflag++; break; + case 'o': + oflag++; + break; case 'p': pflag++; break; @@ -262,7 +268,7 @@ main(int argc, char **argv) if (optind != argc-1) /* need a device */ usage(); fs = argv[argc-1]; - } else if (wflag || sflag) { + } else if (wflag || sflag || oflag) { if (optind != argc) usage(); } else @@ -306,6 +312,21 @@ bozo! #endif exit(0); } + if (oflag) { + long ncpus = -1; + +#if defined(_SC_NPROCESSORS_ONLN) + ncpus = sysconf(_SC_NPROCESSORS_ONLN); +#elif defined(_SC_NPROC_ONLN) + ncpus = sysconf(_SC_NPROC_ONLN); +#endif + if (ncpus == -1) + ncpus = 1; + + printf("%ld\n", ncpus); + + exit(0); + } fprintf(stderr, "feature: dunno what you're after.\n"); return(1); -- 2.39.5