From patchwork Wed Sep 15 12:11:04 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Hunt, David" X-Patchwork-Id: 98912 X-Patchwork-Delegate: david.marchand@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A6C60A0C41; Wed, 15 Sep 2021 14:11:21 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 25AE24014F; Wed, 15 Sep 2021 14:11:21 +0200 (CEST) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by mails.dpdk.org (Postfix) with ESMTP id E71014003C for ; Wed, 15 Sep 2021 14:11:18 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10107"; a="307849500" X-IronPort-AV: E=Sophos;i="5.85,295,1624345200"; d="scan'208";a="307849500" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Sep 2021 05:11:17 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,295,1624345200"; d="scan'208";a="452505934" Received: from silpixa00399952.ir.intel.com ([10.55.129.13]) by orsmga002.jf.intel.com with ESMTP; 15 Sep 2021 05:11:15 -0700 From: David Hunt To: dev@dpdk.org Cc: bruce.richardson@intel.com, thomas@monjalon.net, david.marchand@redhat.com, David Hunt Date: Wed, 15 Sep 2021 13:11:04 +0100 Message-Id: <20210915121104.30581-1-david.hunt@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210909134511.18871-2-david.hunt@intel.com> References: <20210909134511.18871-2-david.hunt@intel.com> Subject: [dpdk-dev] [PATCH v2] eal: add additional info if lcore exceeds max cores X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" If the user requests to use an lcore above 128 using -l or -c, the eal will exit with "EAL: invalid core list syntax" and very little other useful information. This patch adds some extra information suggesting to use --lcores so that physical cores above RTE_MAX_LCORE (default 128) can be used. This is achieved by using the --lcores option by mapping the logical cores in the application onto to physical cores. There is no change in functionalty, just additional messages suggesting how the --lcores option might be used for the supplied list of lcores. For example, if "-l 12-14,130,132" is used, we see the following additional output on the command line: EAL: Error = One of the 5 cores provided exceeds RTE_MAX_LCORE (128) EAL: Please use --lcores instead, e.g. --lcores 0@12,1@13,2@14,3@130,4@132 Signed-off-by: David Hunt --- changes in v2 * Rather than increasing the default max lcores (as in v1), it was agreed to do this instead (switch to --lcores). * As the other patches in the v1 of the set are no longer related to this change, I'll submit as a separate patch set. --- lib/eal/common/eal_common_options.c | 31 +++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/lib/eal/common/eal_common_options.c b/lib/eal/common/eal_common_options.c index ff5861b5f3..5c7a5a45a5 100644 --- a/lib/eal/common/eal_common_options.c +++ b/lib/eal/common/eal_common_options.c @@ -836,6 +836,8 @@ eal_parse_service_corelist(const char *corelist) return 0; } +#define MAX_LCORES_STRING 512 + static int eal_parse_corelist(const char *corelist, int *cores) { @@ -843,6 +845,9 @@ eal_parse_corelist(const char *corelist, int *cores) char *end = NULL; int min, max; int idx; + bool overflow = false; + char lcores[MAX_LCORES_STRING] = ""; + int len = 0; for (idx = 0; idx < RTE_MAX_LCORE; idx++) cores[idx] = -1; @@ -862,8 +867,10 @@ eal_parse_corelist(const char *corelist, int *cores) idx = strtol(corelist, &end, 10); if (errno || end == NULL) return -1; - if (idx < 0 || idx >= RTE_MAX_LCORE) + if (idx < 0) return -1; + if (idx >= RTE_MAX_LCORE) + overflow = true; while (isblank(*end)) end++; if (*end == '-') { @@ -873,10 +880,19 @@ eal_parse_corelist(const char *corelist, int *cores) if (min == RTE_MAX_LCORE) min = idx; for (idx = min; idx <= max; idx++) { - if (cores[idx] == -1) { - cores[idx] = count; - count++; + if (idx < RTE_MAX_LCORE) { + if (cores[idx] == -1) + cores[idx] = count; } + count++; + if (count == 1) + len = len + snprintf(&lcores[len], + MAX_LCORES_STRING - len, + "%d@%d", count-1, idx); + else + len = len + snprintf(&lcores[len], + MAX_LCORES_STRING - len, + ",%d@%d", count-1, idx); } min = RTE_MAX_LCORE; } else @@ -886,6 +902,13 @@ eal_parse_corelist(const char *corelist, int *cores) if (count == 0) return -1; + if (overflow) { + RTE_LOG(ERR, EAL, "Error = One of the %d cores provided exceeds RTE_MAX_LCORE (%d)\n", + count, RTE_MAX_LCORE); + RTE_LOG(ERR, EAL, "Please use --lcores instead, e.g. --lcores %s\n", + lcores); + return -1; + } return 0; }