This commit enables users to specify the lcore id that is used as master lcore.
Signed-off-by: Simon Kuenzer <simon.kuenzer at neclab.eu> --- lib/librte_eal/linuxapp/eal/eal.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c index 573fd06..4ad5b9b 100644 --- a/lib/librte_eal/linuxapp/eal/eal.c +++ b/lib/librte_eal/linuxapp/eal/eal.c @@ -101,6 +101,7 @@ #define OPT_XEN_DOM0 "xen-dom0" #define OPT_CREATE_UIO_DEV "create-uio-dev" #define OPT_VFIO_INTR "vfio-intr" +#define OPT_MASTER_LCORE "master-lcore" #define RTE_EAL_BLACKLIST_SIZE 0x100 @@ -336,6 +337,7 @@ eal_usage(const char *prgname) "[--proc-type primary|secondary|auto] \n\n" "EAL options:\n" " -c COREMASK : A hexadecimal bitmask of cores to run on\n" + " --"OPT_MASTER_LCORE" ID: Core ID that is used as master\n" " -n NUM : Number of memory channels\n" " -v : Display version information on startup\n" " -d LIB.so : add driver (can be used multiple times)\n" @@ -468,6 +470,21 @@ eal_parse_coremask(const char *coremask) return 0; } +/* Changes the lcore id of the master thread */ +static int +eal_parse_master_lcore(const char *arg) +{ + struct rte_config *cfg = rte_eal_get_configuration(); + int master_lcore = atoi(arg); + + if (!(master_lcore >= 0 && master_lcore < RTE_MAX_LCORE)) + return -1; + if (cfg->lcore_role[master_lcore] != ROLE_RTE) + return -1; + cfg->master_lcore = master_lcore; + return 0; +} + static int eal_parse_syslog(const char *facility) { @@ -653,6 +670,7 @@ eal_parse_args(int argc, char **argv) {OPT_HUGE_DIR, 1, 0, 0}, {OPT_NO_SHCONF, 0, 0, 0}, {OPT_PROC_TYPE, 1, 0, 0}, + {OPT_MASTER_LCORE, 1, 0, 0}, {OPT_FILE_PREFIX, 1, 0, 0}, {OPT_SOCKET_MEM, 1, 0, 0}, {OPT_PCI_WHITELIST, 1, 0, 0}, @@ -802,6 +820,21 @@ eal_parse_args(int argc, char **argv) else if (!strcmp(lgopts[option_index].name, OPT_PROC_TYPE)) { internal_config.process_type = eal_parse_proc_type(optarg); } + else if (!strcmp(lgopts[option_index].name, OPT_MASTER_LCORE)) { + if (!coremask_ok) { + RTE_LOG(ERR, EAL, "please specify the master " + "lcore id after specifying " + "the coremask\n"); + eal_usage(prgname); + return -1; + } + if (eal_parse_master_lcore(optarg) < 0) { + RTE_LOG(ERR, EAL, "invalid parameter for --" + OPT_MASTER_LCORE "\n"); + eal_usage(prgname); + return -1; + } + } else if (!strcmp(lgopts[option_index].name, OPT_FILE_PREFIX)) { internal_config.hugefile_prefix = optarg; } -- 1.7.10.4