event: Eliminate reactor mask

The DPDK mask and the reactor mask are always the same.

Change-Id: I83d3ab87cdfb405574f6472cfc222d3f311abdb1
Signed-off-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Ben Walker 2017-04-03 15:59:41 -07:00
parent 84230409fd
commit c80454a283
3 changed files with 21 additions and 66 deletions

View File

@ -45,7 +45,7 @@ struct spdk_event {
void *arg2; void *arg2;
}; };
int spdk_reactors_init(const char *mask, unsigned int max_delay_us); int spdk_reactors_init(unsigned int max_delay_us);
int spdk_reactors_fini(void); int spdk_reactors_fini(void);
void spdk_reactors_start(void); void spdk_reactors_start(void);

View File

@ -332,7 +332,7 @@ spdk_app_init(struct spdk_app_opts *opts)
* reactor_mask will be 0x1 which will enable core 0 to run one * reactor_mask will be 0x1 which will enable core 0 to run one
* reactor. * reactor.
*/ */
if (spdk_reactors_init(opts->reactor_mask, opts->max_delay_us)) { if (spdk_reactors_init(opts->max_delay_us)) {
fprintf(stderr, "Invalid reactor mask.\n"); fprintf(stderr, "Invalid reactor mask.\n");
spdk_conf_free(g_spdk_app.config); spdk_conf_free(g_spdk_app.config);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);

View File

@ -123,7 +123,6 @@ struct spdk_reactor {
} __attribute__((aligned(64))); } __attribute__((aligned(64)));
static struct spdk_reactor g_reactors[RTE_MAX_LCORE]; static struct spdk_reactor g_reactors[RTE_MAX_LCORE];
static uint64_t g_reactor_mask = 0;
static enum spdk_reactor_state g_reactor_state = SPDK_REACTOR_STATE_INVALID; static enum spdk_reactor_state g_reactor_state = SPDK_REACTOR_STATE_INVALID;
@ -483,45 +482,17 @@ spdk_app_parse_core_mask(const char *mask, uint64_t *cpumask)
return 0; return 0;
} }
static int
spdk_reactor_parse_mask(const char *mask)
{
int i;
int ret = 0;
uint32_t master_core = rte_get_master_lcore();
if (g_reactor_state >= SPDK_REACTOR_STATE_INITIALIZED) {
SPDK_ERRLOG("cannot set reactor mask after application has started\n");
return -1;
}
g_reactor_mask = 0;
if (mask == NULL) {
/* No mask specified so use the same mask as DPDK. */
RTE_LCORE_FOREACH(i) {
g_reactor_mask |= (1ULL << i);
}
} else {
ret = spdk_app_parse_core_mask(mask, &g_reactor_mask);
if (ret != 0) {
SPDK_ERRLOG("reactor mask %s specified on command line "
"is invalid\n", mask);
return ret;
}
if (!(g_reactor_mask & (1ULL << master_core))) {
SPDK_ERRLOG("master_core %d must be set in core mask\n", master_core);
return -1;
}
}
return 0;
}
uint64_t uint64_t
spdk_app_get_core_mask(void) spdk_app_get_core_mask(void)
{ {
return g_reactor_mask; unsigned lcore;
uint64_t mask = 0;
RTE_LCORE_FOREACH(lcore) {
mask |= 1ULL << lcore;
}
return mask;
} }
@ -533,11 +504,9 @@ spdk_reactor_get_socket_mask(void)
uint64_t socket_info = 0; uint64_t socket_info = 0;
RTE_LCORE_FOREACH(i) { RTE_LCORE_FOREACH(i) {
if (((1ULL << i) & g_reactor_mask)) {
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);
} }
}
return socket_info; return socket_info;
} }
@ -553,11 +522,9 @@ spdk_reactors_start(void)
g_reactor_state = SPDK_REACTOR_STATE_RUNNING; g_reactor_state = SPDK_REACTOR_STATE_RUNNING;
RTE_LCORE_FOREACH_SLAVE(i) { RTE_LCORE_FOREACH_SLAVE(i) {
if (((1ULL << i) & spdk_app_get_core_mask())) {
reactor = spdk_reactor_get(i); reactor = spdk_reactor_get(i);
spdk_reactor_start(reactor); spdk_reactor_start(reactor);
} }
}
/* Start the master reactor */ /* Start the master reactor */
reactor = spdk_reactor_get(rte_get_master_lcore()); reactor = spdk_reactor_get(rte_get_master_lcore());
@ -574,22 +541,14 @@ void spdk_reactors_stop(void)
} }
int int
spdk_reactors_init(const char *mask, unsigned int max_delay_us) spdk_reactors_init(unsigned int max_delay_us)
{ {
uint32_t i, j; uint32_t i, j;
int rc;
struct spdk_reactor *reactor; struct spdk_reactor *reactor;
uint64_t socket_mask = 0x0; uint64_t socket_mask = 0x0;
uint8_t socket_count = 0; uint8_t socket_count = 0;
char mempool_name[32]; char mempool_name[32];
rc = spdk_reactor_parse_mask(mask);
if (rc < 0) {
return rc;
}
printf("Occupied cpu core mask is 0x%lx\n", spdk_app_get_core_mask());
socket_mask = spdk_reactor_get_socket_mask(); socket_mask = spdk_reactor_get_socket_mask();
printf("Occupied cpu socket mask is 0x%lx\n", socket_mask); printf("Occupied cpu socket mask is 0x%lx\n", socket_mask);
@ -639,15 +598,13 @@ spdk_reactors_init(const char *mask, unsigned int max_delay_us)
} }
RTE_LCORE_FOREACH(i) { RTE_LCORE_FOREACH(i) {
if (((1ULL << i) & spdk_app_get_core_mask())) {
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);
} }
}
g_reactor_state = SPDK_REACTOR_STATE_INITIALIZED; g_reactor_state = SPDK_REACTOR_STATE_INITIALIZED;
return rc; return 0;
} }
int int
@ -658,13 +615,11 @@ spdk_reactors_fini(void)
struct spdk_reactor *reactor; struct spdk_reactor *reactor;
RTE_LCORE_FOREACH(i) { RTE_LCORE_FOREACH(i) {
if (((1ULL << i) & spdk_app_get_core_mask())) {
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);
} }
} }
}
socket_mask = spdk_reactor_get_socket_mask(); socket_mask = spdk_reactor_get_socket_mask();
for (i = 0; i < SPDK_MAX_SOCKET; i++) { for (i = 0; i < SPDK_MAX_SOCKET; i++) {