Commit c80454a2 authored by Ben Walker's avatar Ben Walker
Browse files

event: Eliminate reactor mask



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

Change-Id: I83d3ab87cdfb405574f6472cfc222d3f311abdb1
Signed-off-by: default avatarBen Walker <benjamin.walker@intel.com>
parent 84230409
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -45,7 +45,7 @@ struct spdk_event {
	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);

void spdk_reactors_start(void);
+1 −1
Original line number Diff line number Diff line
@@ -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.
	 */
	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");
		spdk_conf_free(g_spdk_app.config);
		exit(EXIT_FAILURE);
+18 −63
Original line number Diff line number Diff line
@@ -123,7 +123,6 @@ struct spdk_reactor {
} __attribute__((aligned(64)));

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;

@@ -483,45 +482,17 @@ spdk_app_parse_core_mask(const char *mask, uint64_t *cpumask)
	return 0;
}

static int
spdk_reactor_parse_mask(const char *mask)
uint64_t
spdk_app_get_core_mask(void)
{
	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;
		}
	}
	unsigned lcore;
	uint64_t mask = 0;

	return 0;
	RTE_LCORE_FOREACH(lcore) {
		mask |= 1ULL << lcore;
	}

uint64_t
spdk_app_get_core_mask(void)
{
	return g_reactor_mask;
	return mask;
}


@@ -533,11 +504,9 @@ spdk_reactor_get_socket_mask(void)
	uint64_t socket_info = 0;

	RTE_LCORE_FOREACH(i) {
		if (((1ULL << i) & g_reactor_mask)) {
		socket_id = spdk_env_get_socket_id(i);
		socket_info |= (1ULL << socket_id);
	}
	}

	return socket_info;
}
@@ -553,11 +522,9 @@ spdk_reactors_start(void)
	g_reactor_state = SPDK_REACTOR_STATE_RUNNING;

	RTE_LCORE_FOREACH_SLAVE(i) {
		if (((1ULL << i) & spdk_app_get_core_mask())) {
		reactor = spdk_reactor_get(i);
		spdk_reactor_start(reactor);
	}
	}

	/* Start the master reactor */
	reactor = spdk_reactor_get(rte_get_master_lcore());
@@ -574,22 +541,14 @@ void spdk_reactors_stop(void)
}

int
spdk_reactors_init(const char *mask, unsigned int max_delay_us)
spdk_reactors_init(unsigned int max_delay_us)
{
	uint32_t i, j;
	int rc;
	struct spdk_reactor *reactor;
	uint64_t socket_mask = 0x0;
	uint8_t socket_count = 0;
	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();
	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) {
		if (((1ULL << i) & spdk_app_get_core_mask())) {
		reactor = spdk_reactor_get(i);
		spdk_reactor_construct(reactor, i, max_delay_us);
	}
	}

	g_reactor_state = SPDK_REACTOR_STATE_INITIALIZED;

	return rc;
	return 0;
}

int
@@ -658,13 +615,11 @@ spdk_reactors_fini(void)
	struct spdk_reactor *reactor;

	RTE_LCORE_FOREACH(i) {
		if (((1ULL << i) & spdk_app_get_core_mask())) {
		reactor = spdk_reactor_get(i);
		if (reactor->events != NULL) {
			rte_ring_free(reactor->events);
		}
	}
	}

	socket_mask = spdk_reactor_get_socket_mask();
	for (i = 0; i < SPDK_MAX_SOCKET; i++) {