From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Monjalon Subject: Re: [PATCH] hash: validate hash bucket entries while compiling Date: Thu, 12 Jul 2018 09:42:20 +0200 Message-ID: <3132435.sNHpliEu6c@xps> References: <20180531153049.41306-1-honnappa.nagarahalli@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7Bit Cc: dev@dpdk.org, Honnappa Nagarahalli To: bruce.richardson@intel.com, pablo.de.lara.guarch@intel.com Return-path: Received: from out4-smtp.messagingengine.com (out4-smtp.messagingengine.com [66.111.4.28]) by dpdk.org (Postfix) with ESMTP id AB6681B560 for ; Thu, 12 Jul 2018 09:42:23 +0200 (CEST) In-Reply-To: <20180531153049.41306-1-honnappa.nagarahalli@arm.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" Review please? 31/05/2018 17:30, Honnappa Nagarahalli: > Validate RTE_HASH_BUCKET_ENTRIES during compilation instead of > run time. > > Signed-off-by: Honnappa Nagarahalli > Reviewed-by: Gavin Hu > --- > lib/librte_eal/common/include/rte_common.h | 5 +++++ > lib/librte_hash/rte_cuckoo_hash.c | 1 - > lib/librte_hash/rte_cuckoo_hash.h | 4 ++++ > 3 files changed, 9 insertions(+), 1 deletion(-) > > diff --git a/lib/librte_eal/common/include/rte_common.h b/lib/librte_eal/common/include/rte_common.h > index 434adfd45..a9df7c161 100644 > --- a/lib/librte_eal/common/include/rte_common.h > +++ b/lib/librte_eal/common/include/rte_common.h > @@ -293,6 +293,11 @@ rte_combine64ms1b(register uint64_t v) > > /*********** Macros to work with powers of 2 ********/ > > +/** > + * Macro to return 1 if n is a power of 2, 0 otherwise > + */ > +#define RTE_IS_POWER_OF_2(n) ((n) && !(((n) - 1) & (n))) > + > /** > * Returns true if n is a power of 2 > * @param n > diff --git a/lib/librte_hash/rte_cuckoo_hash.c b/lib/librte_hash/rte_cuckoo_hash.c > index a07543a29..375e7d208 100644 > --- a/lib/librte_hash/rte_cuckoo_hash.c > +++ b/lib/librte_hash/rte_cuckoo_hash.c > @@ -107,7 +107,6 @@ rte_hash_create(const struct rte_hash_parameters *params) > /* Check for valid parameters */ > if ((params->entries > RTE_HASH_ENTRIES_MAX) || > (params->entries < RTE_HASH_BUCKET_ENTRIES) || > - !rte_is_power_of_2(RTE_HASH_BUCKET_ENTRIES) || > (params->key_len == 0)) { > rte_errno = EINVAL; > RTE_LOG(ERR, HASH, "rte_hash_create has invalid parameters\n"); > diff --git a/lib/librte_hash/rte_cuckoo_hash.h b/lib/librte_hash/rte_cuckoo_hash.h > index 7a54e5557..bd6ad1bd6 100644 > --- a/lib/librte_hash/rte_cuckoo_hash.h > +++ b/lib/librte_hash/rte_cuckoo_hash.h > @@ -97,6 +97,10 @@ enum add_key_case { > /** Number of items per bucket. */ > #define RTE_HASH_BUCKET_ENTRIES 8 > > +#if !RTE_IS_POWER_OF_2(RTE_HASH_BUCKET_ENTRIES) > +#error RTE_HASH_BUCKET_ENTRIES must be a power of 2 > +#endif > + > #define NULL_SIGNATURE 0 > > #define EMPTY_SLOT 0 >