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

Reply via email to