From patchwork Tue Jul 8 08:28:30 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Kuenzer X-Patchwork-Id: 36 Return-Path: Received: from mailer1.neclab.eu (mailer1.neclab.eu [195.37.70.40]) by dpdk.org (Postfix) with ESMTP id 0D34B5960 for ; Tue, 8 Jul 2014 11:14:00 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by mailer1.neclab.eu (Postfix) with ESMTP id F1E86FFFCF for ; Tue, 8 Jul 2014 11:14:21 +0200 (CEST) X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de) Received: from mailer1.neclab.eu ([127.0.0.1]) by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 0wrYpNUAYorH for ; Tue, 8 Jul 2014 11:14:21 +0200 (CEST) X-ENC: Last-Hop-TLS-encrypted X-ENC: Last-Hop-TLS-encrypted Received: from METHONE.office.hd (methone.office.hd [192.168.24.54]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by mailer1.neclab.eu (Postfix) with ESMTPS id D968BFFC42 for ; Tue, 8 Jul 2014 11:14:16 +0200 (CEST) Received: from localhost.localdomain (10.1.2.203) by skoll.office.hd (192.168.125.11) with Microsoft SMTP Server (TLS) id 14.1.323.3; Tue, 8 Jul 2014 11:14:16 +0200 From: Simon Kuenzer To: Date: Tue, 8 Jul 2014 10:28:30 +0200 Message-ID: <1404808110-16314-1-git-send-email-simon.kuenzer@neclab.eu> X-Mailer: git-send-email 1.7.10.4 MIME-Version: 1.0 X-Originating-IP: [10.1.2.203] Subject: [dpdk-dev] [PATCH] eal/linuxapp: Add parameter to specify master lcore id X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 08 Jul 2014 09:14:00 -0000 This commit enables users to specify the lcore id that is used as master lcore. Signed-off-by: Simon Kuenzer Reviewed-by: Hiroshi Shimamoto --- 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; }