env: Remove all use of RTE_LCORE_FOREACH

Replace with an env abstraction.

Change-Id: I706374d265a270890e1f3ca920a10a0dc09624b0
Signed-off-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Ben Walker 2017-04-03 15:02:49 -07:00
parent c80454a283
commit 7f7c03a935
8 changed files with 59 additions and 44 deletions

View File

@ -160,20 +160,20 @@ ioat_done(void *cb_arg)
static int static int
register_workers(void) register_workers(void)
{ {
unsigned lcore; uint32_t i;
struct worker_thread *worker; struct worker_thread *worker;
g_workers = NULL; g_workers = NULL;
g_num_workers = 0; g_num_workers = 0;
RTE_LCORE_FOREACH(lcore) { SPDK_ENV_FOREACH_CORE(i) {
worker = calloc(1, sizeof(*worker)); worker = calloc(1, sizeof(*worker));
if (worker == NULL) { if (worker == NULL) {
fprintf(stderr, "Unable to allocate worker\n"); fprintf(stderr, "Unable to allocate worker\n");
return -1; return -1;
} }
worker->lcore = lcore; worker->lcore = i;
worker->next = g_workers; worker->next = g_workers;
g_workers = worker; g_workers = worker;
g_num_workers++; g_num_workers++;

View File

@ -438,7 +438,7 @@ get_next_chan(void)
int int
main(int argc, char **argv) main(int argc, char **argv)
{ {
unsigned lcore_id; uint32_t i, current_core;
struct thread_entry threads[RTE_MAX_LCORE] = {}; struct thread_entry threads[RTE_MAX_LCORE] = {};
int rc; int rc;
@ -453,21 +453,27 @@ main(int argc, char **argv)
dump_user_config(&g_user_config); dump_user_config(&g_user_config);
g_next_device = TAILQ_FIRST(&g_devices); g_next_device = TAILQ_FIRST(&g_devices);
RTE_LCORE_FOREACH_SLAVE(lcore_id) {
threads[lcore_id].chan = get_next_chan(); current_core = spdk_env_get_current_core();
rte_eal_remote_launch(work_fn, &threads[lcore_id], lcore_id); SPDK_ENV_FOREACH_CORE(i) {
if (i != current_core) {
threads[i].chan = get_next_chan();
rte_eal_remote_launch(work_fn, &threads[i], i);
}
} }
threads[rte_get_master_lcore()].chan = get_next_chan(); threads[current_core].chan = get_next_chan();
if (work_fn(&threads[rte_get_master_lcore()]) != 0) { if (work_fn(&threads[current_core]) != 0) {
rc = 1; rc = 1;
goto cleanup; goto cleanup;
} }
RTE_LCORE_FOREACH_SLAVE(lcore_id) { SPDK_ENV_FOREACH_CORE(i) {
if (rte_eal_wait_lcore(lcore_id) != 0) { if (i != current_core) {
rc = 1; if (rte_eal_wait_lcore(i) != 0) {
goto cleanup; rc = 1;
goto cleanup;
}
} }
} }

View File

@ -825,21 +825,21 @@ parse_args(int argc, char **argv)
static int static int
register_workers(void) register_workers(void)
{ {
unsigned lcore; uint32_t i;
struct worker_thread *worker; struct worker_thread *worker;
enum spdk_nvme_qprio qprio = SPDK_NVME_QPRIO_URGENT; enum spdk_nvme_qprio qprio = SPDK_NVME_QPRIO_URGENT;
g_workers = NULL; g_workers = NULL;
g_arbitration.num_workers = 0; g_arbitration.num_workers = 0;
RTE_LCORE_FOREACH(lcore) { SPDK_ENV_FOREACH_CORE(i) {
worker = calloc(1, sizeof(*worker)); worker = calloc(1, sizeof(*worker));
if (worker == NULL) { if (worker == NULL) {
fprintf(stderr, "Unable to allocate worker\n"); fprintf(stderr, "Unable to allocate worker\n");
return -1; return -1;
} }
worker->lcore = lcore; worker->lcore = i;
worker->next = g_workers; worker->next = g_workers;
g_workers = worker; g_workers = worker;
g_arbitration.num_workers++; g_arbitration.num_workers++;

View File

@ -987,20 +987,20 @@ parse_args(int argc, char **argv)
static int static int
register_workers(void) register_workers(void)
{ {
unsigned lcore; uint32_t i;
struct worker_thread *worker; struct worker_thread *worker;
g_workers = NULL; g_workers = NULL;
g_num_workers = 0; g_num_workers = 0;
RTE_LCORE_FOREACH(lcore) { SPDK_ENV_FOREACH_CORE(i) {
worker = calloc(1, sizeof(*worker)); worker = calloc(1, sizeof(*worker));
if (worker == NULL) { if (worker == NULL) {
fprintf(stderr, "Unable to allocate worker\n"); fprintf(stderr, "Unable to allocate worker\n");
return -1; return -1;
} }
worker->lcore = lcore; worker->lcore = i;
worker->next = g_workers; worker->next = g_workers;
g_workers = worker; g_workers = worker;
g_num_workers++; g_num_workers++;

View File

@ -182,6 +182,11 @@ uint32_t spdk_env_get_first_core(void);
*/ */
uint32_t spdk_env_get_next_core(uint32_t prev_core); uint32_t spdk_env_get_next_core(uint32_t prev_core);
#define SPDK_ENV_FOREACH_CORE(i) \
for (i = spdk_env_get_first_core(); \
i < UINT32_MAX; \
i = spdk_env_get_next_core(i))
/** /**
* \brief Return the socket ID for the given core. * \brief Return the socket ID for the given core.
*/ */

View File

@ -485,11 +485,11 @@ spdk_app_parse_core_mask(const char *mask, uint64_t *cpumask)
uint64_t uint64_t
spdk_app_get_core_mask(void) spdk_app_get_core_mask(void)
{ {
unsigned lcore; uint32_t i;
uint64_t mask = 0; uint64_t mask = 0;
RTE_LCORE_FOREACH(lcore) { SPDK_ENV_FOREACH_CORE(i) {
mask |= 1ULL << lcore; mask |= 1ULL << i;
} }
return mask; return mask;
@ -499,11 +499,11 @@ spdk_app_get_core_mask(void)
static uint64_t static uint64_t
spdk_reactor_get_socket_mask(void) spdk_reactor_get_socket_mask(void)
{ {
int i; uint32_t i;
uint32_t socket_id; uint32_t socket_id;
uint64_t socket_info = 0; uint64_t socket_info = 0;
RTE_LCORE_FOREACH(i) { SPDK_ENV_FOREACH_CORE(i) {
socket_id = spdk_env_get_socket_id(i); socket_id = spdk_env_get_socket_id(i);
socket_info |= (1ULL << socket_id); socket_info |= (1ULL << socket_id);
} }
@ -515,19 +515,22 @@ void
spdk_reactors_start(void) spdk_reactors_start(void)
{ {
struct spdk_reactor *reactor; struct spdk_reactor *reactor;
uint32_t i; uint32_t i, current_core;
assert(rte_get_master_lcore() == rte_lcore_id()); assert(rte_get_master_lcore() == rte_lcore_id());
g_reactor_state = SPDK_REACTOR_STATE_RUNNING; g_reactor_state = SPDK_REACTOR_STATE_RUNNING;
RTE_LCORE_FOREACH_SLAVE(i) { current_core = spdk_env_get_current_core();
reactor = spdk_reactor_get(i); SPDK_ENV_FOREACH_CORE(i) {
spdk_reactor_start(reactor); if (i != current_core) {
reactor = spdk_reactor_get(i);
spdk_reactor_start(reactor);
}
} }
/* Start the master reactor */ /* Start the master reactor */
reactor = spdk_reactor_get(rte_get_master_lcore()); reactor = spdk_reactor_get(current_core);
spdk_reactor_start(reactor); spdk_reactor_start(reactor);
rte_eal_mp_wait_lcore(); rte_eal_mp_wait_lcore();
@ -597,7 +600,7 @@ spdk_reactors_init(unsigned int max_delay_us)
} }
} }
RTE_LCORE_FOREACH(i) { SPDK_ENV_FOREACH_CORE(i) {
reactor = spdk_reactor_get(i); reactor = spdk_reactor_get(i);
spdk_reactor_construct(reactor, i, max_delay_us); spdk_reactor_construct(reactor, i, max_delay_us);
} }
@ -614,7 +617,7 @@ spdk_reactors_fini(void)
uint64_t socket_mask; uint64_t socket_mask;
struct spdk_reactor *reactor; struct spdk_reactor *reactor;
RTE_LCORE_FOREACH(i) { SPDK_ENV_FOREACH_CORE(i) {
reactor = spdk_reactor_get(i); reactor = spdk_reactor_get(i);
if (reactor->events != NULL) { if (reactor->events != NULL) {
rte_ring_free(reactor->events); rte_ring_free(reactor->events);

View File

@ -476,7 +476,7 @@ performance_statistics_thread(void *arg)
static void static void
bdevperf_run(void *arg1, void *arg2) bdevperf_run(void *arg1, void *arg2)
{ {
int i; uint32_t i;
struct io_target *target; struct io_target *target;
struct spdk_event *event; struct spdk_event *event;
@ -490,14 +490,12 @@ bdevperf_run(void *arg1, void *arg2)
} }
/* Send events to start all I/O */ /* Send events to start all I/O */
RTE_LCORE_FOREACH(i) { SPDK_ENV_FOREACH_CORE(i) {
if (spdk_app_get_core_mask() & (1ULL << i)) { target = head[i];
target = head[i]; if (target != NULL) {
if (target != NULL) { event = spdk_event_allocate(target->lcore, bdevperf_submit_on_core,
event = spdk_event_allocate(target->lcore, bdevperf_submit_on_core, target, NULL);
target, NULL); spdk_event_call(event);
spdk_event_call(event);
}
} }
} }
} }

View File

@ -110,7 +110,7 @@ performance_dump(int io_time)
uint32_t i; uint32_t i;
printf("\n"); printf("\n");
RTE_LCORE_FOREACH(i) { SPDK_ENV_FOREACH_CORE(i) {
printf("lcore %2d: %8ju\n", i, call_count[i] / g_time_in_sec); printf("lcore %2d: %8ju\n", i, call_count[i] / g_time_in_sec);
} }
@ -122,7 +122,7 @@ main(int argc, char **argv)
{ {
struct spdk_app_opts opts; struct spdk_app_opts opts;
int op; int op;
int i; uint32_t i, current_core;
spdk_app_opts_init(&opts); spdk_app_opts_init(&opts);
opts.name = "event_perf"; opts.name = "event_perf";
@ -159,8 +159,11 @@ main(int argc, char **argv)
fflush(stdout); fflush(stdout);
/* call event_work_fn on each slave lcore */ /* call event_work_fn on each slave lcore */
RTE_LCORE_FOREACH_SLAVE(i) { current_core = spdk_env_get_current_core();
rte_eal_remote_launch(event_work_fn, NULL, i); SPDK_ENV_FOREACH_CORE(i) {
if (i != current_core) {
rte_eal_remote_launch(event_work_fn, NULL, i);
}
} }
/* call event_work_fn on lcore0 */ /* call event_work_fn on lcore0 */