service: add -S corelist option
This commit allows the -S (captial 's') to be used to indicate a corelist for Services. This is a "nice to have" patch, and does not modify any of the service core functionality. Suggested-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> Suggested-by: Thomas Monjalon <thomas@monjalon.net> Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
This commit is contained in:
parent
b4d75d98f5
commit
7dbd7a6413
@ -65,6 +65,7 @@ eal_short_options[] =
|
||||
"d:" /* driver */
|
||||
"h" /* help */
|
||||
"l:" /* corelist */
|
||||
"S:" /* service corelist */
|
||||
"m:" /* memory size */
|
||||
"n:" /* memory channels */
|
||||
"r:" /* memory ranks */
|
||||
@ -401,6 +402,72 @@ eal_parse_coremask(const char *coremask)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
eal_parse_service_corelist(const char *corelist)
|
||||
{
|
||||
struct rte_config *cfg = rte_eal_get_configuration();
|
||||
int i, idx = 0;
|
||||
unsigned count = 0;
|
||||
char *end = NULL;
|
||||
int min, max;
|
||||
|
||||
if (corelist == NULL)
|
||||
return -1;
|
||||
|
||||
/* Remove all blank characters ahead and after */
|
||||
while (isblank(*corelist))
|
||||
corelist++;
|
||||
i = strlen(corelist);
|
||||
while ((i > 0) && isblank(corelist[i - 1]))
|
||||
i--;
|
||||
|
||||
/* Get list of cores */
|
||||
min = RTE_MAX_LCORE;
|
||||
do {
|
||||
while (isblank(*corelist))
|
||||
corelist++;
|
||||
if (*corelist == '\0')
|
||||
return -1;
|
||||
errno = 0;
|
||||
idx = strtoul(corelist, &end, 10);
|
||||
if (errno || end == NULL)
|
||||
return -1;
|
||||
while (isblank(*end))
|
||||
end++;
|
||||
if (*end == '-') {
|
||||
min = idx;
|
||||
} else if ((*end == ',') || (*end == '\0')) {
|
||||
max = idx;
|
||||
if (min == RTE_MAX_LCORE)
|
||||
min = idx;
|
||||
for (idx = min; idx <= max; idx++) {
|
||||
if (cfg->lcore_role[idx] != ROLE_SERVICE) {
|
||||
/* handle master lcore already parsed */
|
||||
uint32_t lcore = idx;
|
||||
if (cfg->master_lcore == lcore &&
|
||||
master_lcore_parsed) {
|
||||
RTE_LOG(ERR, EAL,
|
||||
"Error: lcore %u is master lcore, cannot use as service core\n",
|
||||
idx);
|
||||
return -1;
|
||||
}
|
||||
lcore_config[idx].core_role =
|
||||
ROLE_SERVICE;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
min = RTE_MAX_LCORE;
|
||||
} else
|
||||
return -1;
|
||||
corelist = end + 1;
|
||||
} while (*end != '\0');
|
||||
|
||||
if (count == 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
eal_parse_corelist(const char *corelist)
|
||||
{
|
||||
@ -912,6 +979,13 @@ eal_parse_common_option(int opt, const char *optarg,
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
/* service corelist */
|
||||
case 'S':
|
||||
if (eal_parse_service_corelist(optarg) < 0) {
|
||||
RTE_LOG(ERR, EAL, "invalid service core list\n");
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
/* size of memory */
|
||||
case 'm':
|
||||
conf->memory = atoi(optarg);
|
||||
|
Loading…
Reference in New Issue
Block a user