From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jerin Jacob Subject: Re: [PATCH 2/6] service cores: coremask parsing Date: Mon, 26 Jun 2017 18:19:51 +0530 Message-ID: <20170626124950.GB5612@jerin> References: <1498208779-166205-1-git-send-email-harry.van.haaren@intel.com> <1498208779-166205-2-git-send-email-harry.van.haaren@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: dev@dpdk.org, thomas@monjalon.net, keith.wiles@intel.com, bruce.richardson@intel.com To: Harry van Haaren Return-path: Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0072.outbound.protection.outlook.com [104.47.32.72]) by dpdk.org (Postfix) with ESMTP id D8832968 for ; Mon, 26 Jun 2017 14:50:10 +0200 (CEST) Content-Disposition: inline In-Reply-To: <1498208779-166205-2-git-send-email-harry.van.haaren@intel.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" -----Original Message----- > Date: Fri, 23 Jun 2017 10:06:15 +0100 > From: Harry van Haaren > To: dev@dpdk.org > CC: thomas@monjalon.net, jerin.jacob@caviumnetworks.com, > keith.wiles@intel.com, bruce.richardson@intel.com, Harry van Haaren > > Subject: [PATCH 2/6] service cores: coremask parsing > X-Mailer: git-send-email 2.7.4 > > Add logic for parsing a coremask from EAL, which allows > the application to be unaware of the cores being taken from > its coremask. > > Signed-off-by: Harry van Haaren > --- > lib/librte_eal/common/eal_common_options.c | 78 ++++++++++++++++++++++++++++++ > 1 file changed, 78 insertions(+) > > diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c > index f470195..3599784 100644 > --- a/lib/librte_eal/common/eal_common_options.c > +++ b/lib/librte_eal/common/eal_common_options.c > @@ -50,6 +50,7 @@ > #include > #include > #include > +#include > > #include "eal_internal_cfg.h" > #include "eal_options.h" > @@ -61,6 +62,7 @@ const char > eal_short_options[] = > "b:" /* pci-blacklist */ > "c:" /* coremask */ > + "s:" /* service coremask */ > "d:" /* driver */ > "h" /* help */ > "l:" /* corelist */ Good to have a corelist variant for service lcore list. May be for future. > @@ -267,6 +269,75 @@ static int xdigit2val(unsigned char c) > } > > static int > +eal_parse_service_coremask(const char *coremask) > +{ > + struct rte_config *cfg = rte_eal_get_configuration(); > + int i, j, idx = 0; > + unsigned count = 0; > + char c; > + int val; > + > + if (coremask == NULL) > + return -1; > + /* Remove all blank characters ahead and after . > + * Remove 0x/0X if exists. > + */ > + while (isblank(*coremask)) > + coremask++; > + if (coremask[0] == '0' && ((coremask[1] == 'x') > + || (coremask[1] == 'X'))) > + coremask += 2; > + i = strlen(coremask); > + while ((i > 0) && isblank(coremask[i - 1])) > + i--; > + > + if (i == 0) > + return -1; > + > + printf("\n\nRemoving Service Cores from lcore roles now\n\n"); s/printf/RTE_LOG > + > + /* TODO: only scan active cores in coremask */ > + for (i = i - 1; i >= 0 && idx < RTE_MAX_LCORE; i--) { > + c = coremask[i]; > + if (isxdigit(c) == 0) { > + /* invalid characters */ > + return -1; > + } > + val = xdigit2val(c); > + for (j = 0; j < BITS_PER_HEX && idx < RTE_MAX_LCORE; > + j++, idx++) { > + if ((1 << j) & val) { > + /* TODO: enable flexible master core */ > + if (idx == 0) > + continue; > + > + if (!lcore_config[idx].detected) { > + RTE_LOG(ERR, EAL, > + "lcore %u unavailable\n", idx); > + return -1; > + } > + //cfg->lcore_role[idx] = ROLE_SERVICE; remove commented code. > + rte_service_core_add(idx); > + count++; > + } > + } > + } > + > + for (; i >= 0; i--) > + if (coremask[i] != '0') > + return -1; > + > + for (; idx < RTE_MAX_LCORE; idx++) > + lcore_config[idx].core_index = -1; > + > + if (count == 0) > + return -1; > + > + cfg->score_count = count; > + return 0; > +} > + > +static int > eal_parse_coremask(const char *coremask) > { > struct rte_config *cfg = rte_eal_get_configuration(); > @@ -826,6 +897,13 @@ eal_parse_common_option(int opt, const char *optarg, > } > core_parsed = 1; > break; > + /* service coremask */ > + case 's': > + if (eal_parse_service_coremask(optarg) < 0) { > + RTE_LOG(ERR, EAL, "invalid service coremask\n"); > + return -1; > + } > + break; > /* size of memory */ > case 'm': > conf->memory = atoi(optarg); > -- With above change: Acked-by: Jerin Jacob