Use the new cpuset to string function to replace other thread-specific functions which did similar work. Also use it for additional debug logs.
Signed-off-by: Bruce Richardson <[email protected]> --- lib/eal/common/eal_common_lcore.c | 13 ++++----- lib/eal/common/eal_common_options.c | 22 +++++++++++++++ lib/eal/common/eal_common_thread.c | 43 ++++++++--------------------- lib/eal/common/eal_thread.h | 13 ++------- 4 files changed, 42 insertions(+), 49 deletions(-) diff --git a/lib/eal/common/eal_common_lcore.c b/lib/eal/common/eal_common_lcore.c index 5c8b0f9aa2..39411f9370 100644 --- a/lib/eal/common/eal_common_lcore.c +++ b/lib/eal/common/eal_common_lcore.c @@ -481,12 +481,11 @@ static int lcore_dump_cb(unsigned int lcore_id, void *arg) { struct rte_config *cfg = rte_eal_get_configuration(); - char cpuset[RTE_CPU_AFFINITY_STR_LEN]; + char *cpuset; struct rte_lcore_usage usage; rte_lcore_usage_cb usage_cb; char *usage_str = NULL; FILE *f = arg; - int ret; /* The callback may not set all the fields in the structure, so clear it here. */ memset(&usage, 0, sizeof(usage)); @@ -499,12 +498,12 @@ lcore_dump_cb(unsigned int lcore_id, void *arg) return -ENOMEM; } } - ret = eal_thread_dump_affinity(&lcore_config[lcore_id].cpuset, cpuset, - sizeof(cpuset)); - fprintf(f, "lcore %u, socket %u, role %s, cpuset %s%s%s\n", lcore_id, + cpuset = eal_cpuset_to_str(&lcore_config[lcore_id].cpuset); + fprintf(f, "lcore %u, socket %u, role %s, cpuset %s\n", lcore_id, rte_lcore_to_socket_id(lcore_id), - lcore_role_str(cfg->lcore_role[lcore_id]), cpuset, - ret == 0 ? "" : "...", usage_str != NULL ? usage_str : ""); + lcore_role_str(cfg->lcore_role[lcore_id]), + cpuset != NULL ? cpuset : "<unknown>"); + free(cpuset); free(usage_str); return 0; diff --git a/lib/eal/common/eal_common_options.c b/lib/eal/common/eal_common_options.c index 3f26ecf513..1faad61e37 100644 --- a/lib/eal/common/eal_common_options.c +++ b/lib/eal/common/eal_common_options.c @@ -1050,6 +1050,21 @@ eal_parse_service_corelist(const char *corelist) "Please ensure -c or -l includes service cores"); } + /* log the configured service cores for debugging */ + rte_cpuset_t service_cpuset; + CPU_ZERO(&service_cpuset); + for (i = 0; i < RTE_MAX_LCORE; i++) { + if (lcore_config[i].core_role == ROLE_SERVICE) + CPU_SET(i, &service_cpuset); + } + if (CPU_COUNT(&service_cpuset) > 0) { + char *cpuset_str = eal_cpuset_to_str(&service_cpuset); + if (cpuset_str != NULL) { + EAL_LOG(DEBUG, "Service cores configured: %s", cpuset_str); + free(cpuset_str); + } + } + return 0; } @@ -2196,6 +2211,13 @@ compute_ctrl_threads_cpuset(struct internal_config *internal_cfg) memcpy(cpuset, &lcore_config[rte_get_main_lcore()].cpuset, sizeof(*cpuset)); } + + /* log the computed control thread cpuset for debugging */ + char *cpuset_str = eal_cpuset_to_str(cpuset); + if (cpuset_str != NULL) { + EAL_LOG(DEBUG, "Control threads will use cores: %s", cpuset_str); + free(cpuset_str); + } } int diff --git a/lib/eal/common/eal_common_thread.c b/lib/eal/common/eal_common_thread.c index c0622c5c23..dcd81f9e32 100644 --- a/lib/eal/common/eal_common_thread.c +++ b/lib/eal/common/eal_common_thread.c @@ -109,43 +109,24 @@ rte_thread_get_affinity(rte_cpuset_t *cpusetp) } int -eal_thread_dump_affinity(rte_cpuset_t *cpuset, char *str, unsigned int size) +eal_thread_dump_current_affinity(char *str, unsigned int size) { - unsigned cpu; + rte_cpuset_t cpuset; + char *cpuset_str; int ret; - unsigned int out = 0; - - for (cpu = 0; cpu < CPU_SETSIZE; cpu++) { - if (!CPU_ISSET(cpu, cpuset)) - continue; - - ret = snprintf(str + out, - size - out, "%u,", cpu); - if (ret < 0 || (unsigned)ret >= size - out) { - /* string will be truncated */ - ret = -1; - goto exit; - } - out += ret; - } + rte_thread_get_affinity(&cpuset); + cpuset_str = eal_cpuset_to_str(&cpuset); + if (cpuset_str == NULL) + return -1; - ret = 0; -exit: - /* remove the last separator */ - if (out > 0) - str[out - 1] = '\0'; + ret = snprintf(str, size, "%s", cpuset_str); + free(cpuset_str); - return ret; -} - -int -eal_thread_dump_current_affinity(char *str, unsigned int size) -{ - rte_cpuset_t cpuset; + if (ret < 0 || (unsigned int)ret >= size) + return -1; - rte_thread_get_affinity(&cpuset); - return eal_thread_dump_affinity(&cpuset, str, size); + return 0; } void diff --git a/lib/eal/common/eal_thread.h b/lib/eal/common/eal_thread.h index 1c3c3442d3..586de05081 100644 --- a/lib/eal/common/eal_thread.h +++ b/lib/eal/common/eal_thread.h @@ -33,28 +33,19 @@ unsigned eal_cpu_socket_id(unsigned cpu_id); #define RTE_CPU_AFFINITY_STR_LEN 256 /** - * Dump the cpuset as a human readable string. + * Dump the current thread cpuset as a human readable string. * This function is private to EAL. * * Note: * If the dump size is greater than the size of given buffer, * the string will be truncated and with '\0' at the end. * - * @param cpuset - * The CPU affinity object to dump. * @param str * The string buffer the cpuset will dump to. * @param size * The string buffer size. * @return - * 0 for success, -1 if truncation happens. - */ -int -eal_thread_dump_affinity(rte_cpuset_t *cpuset, char *str, unsigned int size); - -/** - * Dump the current thread cpuset. - * This is a wrapper on eal_thread_dump_affinity(). + * 0 for success, -1 if error or truncation happens. */ int eal_thread_dump_current_affinity(char *str, unsigned int size); -- 2.48.1

