From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from g9t5009.houston.hpe.com (g9t5009.houston.hpe.com [15.241.48.73]) by dpdk.org (Postfix) with ESMTP id 556D729B6 for ; Wed, 12 Oct 2016 22:04:49 +0200 (CEST) Received: from g4t3433.houston.hpecorp.net (g4t3433.houston.hpecorp.net [16.208.49.245]) by g9t5009.houston.hpe.com (Postfix) with ESMTP id 91C4858; Wed, 12 Oct 2016 20:04:48 +0000 (UTC) Received: from postal.labs.hpecorp.net (mailhub-pa.labs.hpecorp.net [16.111.35.25]) by g4t3433.houston.hpecorp.net (Postfix) with ESMTP id 386D448; Wed, 12 Oct 2016 20:04:48 +0000 (UTC) Received: from bougret.labs.hpecorp.net (bougret.labs.hpecorp.net [16.111.8.16]) by postal.labs.hpecorp.net (8.14.4/8.14.4/HPL-PA Hub) with ESMTP id u9CK4jgW015077 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Wed, 12 Oct 2016 13:04:46 -0700 Received: from jt by bougret.labs.hpecorp.net with local (Exim 4.84_2) (envelope-from ) id 1buPld-0002cL-Lb; Wed, 12 Oct 2016 13:04:45 -0700 Date: Wed, 12 Oct 2016 13:04:45 -0700 From: Jean Tourrilhes To: dev@dpdk.org, Thomas Monjalon , David Marchand , Sergio Gonzalez Monroy Message-ID: <20161012200445.GA10029@labs.hpe.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Organisation: HP Labs Palo Alto Address: HP Labs, MS1184, 1501 Page Mill road, Palo Alto, CA 94304, USA. E-mail: jean.tourrilhes@hpe.com User-Agent: Mutt/1.5.23 (2014-03-12) Subject: [dpdk-dev] [PATCH] mempool: Add sanity check when secondary link in less mempools than primary X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: jean.tourrilhes@hpe.com List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Oct 2016 20:04:49 -0000 mempool: Add sanity check when secondary link in less mempools than primary If the primary and secondary process were build using different build systems, the list of constructors included by the linker in each binary might be different. Mempools are registered via constructors, so the linker magic will directly impact which tailqs are registered with the primary and the secondary. DPDK currently assumes that the secondary has a superset of the mempools registered at the primary, and they are in the same order (same index in primary and secondary). In some build scenario, the secondary might not initialise any mempools at all. This would result in an obscure segfault when trying to use the mempool. Instead, fail early with a more explicit error message. Signed-off-by: Jean Tourrilhes --- lib/librte_mempool/rte_mempool.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/librte_mempool/rte_mempool.c b/lib/librte_mempool/rte_mempool.c index 2e28e2e..4fe9158 100644 --- a/lib/librte_mempool/rte_mempool.c +++ b/lib/librte_mempool/rte_mempool.c @@ -1275,6 +1275,16 @@ rte_mempool_lookup(const char *name) return NULL; } + /* Sanity check : secondary may have initialised less mempools + * than primary due to linker and constructor magic. Note that + * this does not address the case where the constructor order + * is different between primary and secondary and where the index + * points to the wrong ops. Jean II */ + if(mp->ops_index >= (int32_t) rte_mempool_ops_table.num_ops) { + /* Do not dump mempool list, it will segfault. */ + rte_panic("Cannot find ops for mempool, ops_index %d, num_ops %d - maybe due to build process or linker configuration\n", mp->ops_index, rte_mempool_ops_table.num_ops); + } + return mp; }