int eal_thread_dump_affinity(char *str, unsigned size) { rte_cpuset_t cpuset; unsigned cpu; int ret; unsigned int out = 0; rte_thread_get_affinity(&cpuset); for (cpu = 0; cpu < RTE_MAX_LCORE; 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; } ret = 0; exit: /* remove the last separator */ if (out > 0) str[out - 1] = '\0'; return ret; }
void * spdk_call_unaffinitized(void *cb(void *arg), void *arg) { rte_cpuset_t orig_cpuset, new_cpuset; void *ret; long num_cores, i; if (cb == NULL) { return NULL; } rte_thread_get_affinity(&orig_cpuset); CPU_ZERO(&new_cpuset); num_cores = sysconf(_SC_NPROCESSORS_CONF); /* Create a mask containing all CPUs */ for (i = 0; i < num_cores; i++) { CPU_SET(i, &new_cpuset); } rte_thread_set_affinity(&new_cpuset); ret = cb(arg); rte_thread_set_affinity(&orig_cpuset); return ret; }