[PATCH v8 13/18] eal: add internal fn for converting cpuset to string
Bruce Richardson
bruce.richardson at intel.com
Thu Oct 2 19:43:10 CEST 2025
The existing "available_cores" function in eal_common_options.c has
general code for converting a set of cores to a printable string.
Generalize this code into an "eal_cpuset_to_str" function which takes a
cpuset as parameter, and create a new "available_cores" function using
this new utility function.
Signed-off-by: Bruce Richardson <bruce.richardson at intel.com>
---
lib/eal/common/eal_common_options.c | 33 ++++++++++++++++++++++-------
lib/eal/common/eal_private.h | 10 +++++++++
2 files changed, 35 insertions(+), 8 deletions(-)
diff --git a/lib/eal/common/eal_common_options.c b/lib/eal/common/eal_common_options.c
index d7a8263f08..e89ca615b8 100644
--- a/lib/eal/common/eal_common_options.c
+++ b/lib/eal/common/eal_common_options.c
@@ -1570,8 +1570,8 @@ eal_parse_base_virtaddr(const char *arg)
}
/* caller is responsible for freeing the returned string */
-static char *
-available_cores(void)
+char *
+eal_cpuset_to_str(const rte_cpuset_t *cpuset)
{
char *str = NULL;
int previous;
@@ -1579,13 +1579,13 @@ available_cores(void)
char *tmp;
int idx;
- /* find the first available cpu */
- for (idx = 0; idx < RTE_MAX_LCORE; idx++) {
- if (eal_cpu_detected(idx) == 0)
+ /* find the first set cpu */
+ for (idx = 0; idx < CPU_SETSIZE; idx++) {
+ if (!CPU_ISSET(idx, cpuset))
continue;
break;
}
- if (idx >= RTE_MAX_LCORE)
+ if (idx >= CPU_SETSIZE)
return NULL;
/* first sequence */
@@ -1594,8 +1594,8 @@ available_cores(void)
previous = idx;
sequence = 0;
- for (idx++ ; idx < RTE_MAX_LCORE; idx++) {
- if (eal_cpu_detected(idx) == 0)
+ for (idx++ ; idx < CPU_SETSIZE; idx++) {
+ if (!CPU_ISSET(idx, cpuset))
continue;
if (idx == previous + 1) {
@@ -1638,6 +1638,23 @@ available_cores(void)
return str;
}
+/* caller is responsible for freeing the returned string */
+static char *
+available_cores(void)
+{
+ rte_cpuset_t cpuset;
+ int idx;
+
+ /* build cpuset of available cores */
+ CPU_ZERO(&cpuset);
+ for (idx = 0; idx < RTE_MAX_LCORE; idx++) {
+ if (eal_cpu_detected(idx))
+ CPU_SET(idx, &cpuset);
+ }
+
+ return eal_cpuset_to_str(&cpuset);
+}
+
#define HUGE_UNLINK_NEVER "never"
static int
diff --git a/lib/eal/common/eal_private.h b/lib/eal/common/eal_private.h
index ab8b37b956..e032dd10c9 100644
--- a/lib/eal/common/eal_private.h
+++ b/lib/eal/common/eal_private.h
@@ -83,6 +83,16 @@ struct rte_config *rte_eal_get_configuration(void);
*/
int eal_collate_args(int argc, char **argv);
+/**
+ * Convert an rte_cpuset_t to string form suitable for parsing by argparse.
+ *
+ * @param cpuset
+ * The cpuset to convert to string form.
+ * @return
+ * String representation of the cpuset (caller must free), or NULL on error.
+ */
+char *eal_cpuset_to_str(const rte_cpuset_t *cpuset);
+
/**
* Initialize the memzone subsystem (private to eal).
*
--
2.48.1
More information about the dev
mailing list