From patchwork Wed Oct 18 15:03:24 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cristian Dumitrescu X-Patchwork-Id: 30534 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 67B9D1B1C7; Wed, 18 Oct 2017 17:04:27 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 9E8781AEEE for ; Wed, 18 Oct 2017 17:04:04 +0200 (CEST) Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 18 Oct 2017 08:04:04 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.43,397,1503385200"; d="scan'208";a="139673027" Received: from silpixa00382658.ir.intel.com ([10.237.223.29]) by orsmga004.jf.intel.com with ESMTP; 18 Oct 2017 08:04:03 -0700 From: Cristian Dumitrescu To: dev@dpdk.org Cc: thomas@monjalon.net Date: Wed, 18 Oct 2017 16:03:24 +0100 Message-Id: <1508339034-171115-8-git-send-email-cristian.dumitrescu@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1508339034-171115-1-git-send-email-cristian.dumitrescu@intel.com> References: <1507634341-72277-2-git-send-email-cristian.dumitrescu@intel.com> <1508339034-171115-1-git-send-email-cristian.dumitrescu@intel.com> Subject: [dpdk-dev] [PATCH v3 07/18] librte_table: add unified params structure and mask-based hash func X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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" Add unified parameter structure for all hash tables in librte_table. Add mask-based hash function prototype, which is input parameter for all hash tables. Renamed the non-mask-based hash function prototype and all the calls to it (to be removed later). Signed-off-by: Cristian Dumitrescu --- .../pipeline/pipeline_flow_classification_be.c | 2 +- .../ip_pipeline/pipeline/pipeline_passthrough_be.c | 4 +- lib/librte_table/rte_table_hash.h | 52 ++++++++++++++++++---- lib/librte_table/rte_table_hash_cuckoo.c | 2 +- lib/librte_table/rte_table_hash_ext.c | 4 +- lib/librte_table/rte_table_hash_key16.c | 2 +- lib/librte_table/rte_table_hash_key32.c | 2 +- lib/librte_table/rte_table_hash_key8.c | 4 +- lib/librte_table/rte_table_hash_lru.c | 4 +- 9 files changed, 55 insertions(+), 21 deletions(-) mode change 100644 => 100755 examples/ip_pipeline/pipeline/pipeline_passthrough_be.c diff --git a/examples/ip_pipeline/pipeline/pipeline_flow_classification_be.c b/examples/ip_pipeline/pipeline/pipeline_flow_classification_be.c index 191cb15..e131a5b 100755 --- a/examples/ip_pipeline/pipeline/pipeline_flow_classification_be.c +++ b/examples/ip_pipeline/pipeline/pipeline_flow_classification_be.c @@ -118,7 +118,7 @@ struct flow_table_entry { uint32_t pad; }; -rte_table_hash_op_hash hash_func[] = { +rte_table_hash_op_hash_nomask hash_func[] = { hash_default_key8, hash_default_key16, hash_default_key24, diff --git a/examples/ip_pipeline/pipeline/pipeline_passthrough_be.c b/examples/ip_pipeline/pipeline/pipeline_passthrough_be.c old mode 100644 new mode 100755 index 8cb2f0c..6b57f83 --- a/examples/ip_pipeline/pipeline/pipeline_passthrough_be.c +++ b/examples/ip_pipeline/pipeline/pipeline_passthrough_be.c @@ -52,7 +52,7 @@ struct pipeline_passthrough { struct pipeline p; struct pipeline_passthrough_params params; - rte_table_hash_op_hash f_hash; + rte_table_hash_op_hash_nomask f_hash; uint32_t swap_field0_offset[SWAP_DIM]; uint32_t swap_field1_offset[SWAP_DIM]; uint64_t swap_field_mask[SWAP_DIM]; @@ -677,7 +677,7 @@ pipeline_passthrough_parse_args(struct pipeline_passthrough_params *p, return 0; } -static rte_table_hash_op_hash +static rte_table_hash_op_hash_nomask get_hash_function(struct pipeline_passthrough *p) { switch (p->params.dma_size) { diff --git a/lib/librte_table/rte_table_hash.h b/lib/librte_table/rte_table_hash.h index 5f655ee..bb5b83d 100755 --- a/lib/librte_table/rte_table_hash.h +++ b/lib/librte_table/rte_table_hash.h @@ -98,6 +98,40 @@ extern "C" { /** Hash function */ typedef uint64_t (*rte_table_hash_op_hash)( void *key, + void *key_mask, + uint32_t key_size, + uint64_t seed); + +/** Hash table parameters */ +struct rte_table_hash_params { + /** Name */ + const char *name; + + /** Key size (number of bytes) */ + uint32_t key_size; + + /** Byte offset within packet meta-data where the key is located */ + uint32_t key_offset; + + /** Key mask */ + uint8_t *key_mask; + + /** Number of keys */ + uint32_t n_keys; + + /** Number of buckets */ + uint32_t n_buckets; + + /** Hash function */ + rte_table_hash_op_hash f_hash; + + /** Seed value for the hash function */ + uint64_t seed; +}; + +/** Hash function */ +typedef uint64_t (*rte_table_hash_op_hash_nomask)( + void *key, uint32_t key_size, uint64_t seed); @@ -121,7 +155,7 @@ struct rte_table_hash_ext_params { uint32_t n_buckets_ext; /** Hash function */ - rte_table_hash_op_hash f_hash; + rte_table_hash_op_hash_nomask f_hash; /** Seed value for the hash function */ uint64_t seed; @@ -149,7 +183,7 @@ struct rte_table_hash_lru_params { uint32_t n_buckets; /** Hash function */ - rte_table_hash_op_hash f_hash; + rte_table_hash_op_hash_nomask f_hash; /** Seed value for the hash function */ uint64_t seed; @@ -175,7 +209,7 @@ struct rte_table_hash_key8_lru_params { uint32_t n_entries; /** Hash function */ - rte_table_hash_op_hash f_hash; + rte_table_hash_op_hash_nomask f_hash; /** Seed for the hash function */ uint64_t seed; @@ -204,7 +238,7 @@ struct rte_table_hash_key8_ext_params { uint32_t n_entries_ext; /** Hash function */ - rte_table_hash_op_hash f_hash; + rte_table_hash_op_hash_nomask f_hash; /** Seed for the hash function */ uint64_t seed; @@ -233,7 +267,7 @@ struct rte_table_hash_key16_lru_params { uint32_t n_entries; /** Hash function */ - rte_table_hash_op_hash f_hash; + rte_table_hash_op_hash_nomask f_hash; /** Seed for the hash function */ uint64_t seed; @@ -262,7 +296,7 @@ struct rte_table_hash_key16_ext_params { uint32_t n_entries_ext; /** Hash function */ - rte_table_hash_op_hash f_hash; + rte_table_hash_op_hash_nomask f_hash; /** Seed for the hash function */ uint64_t seed; @@ -291,7 +325,7 @@ struct rte_table_hash_key32_lru_params { uint32_t n_entries; /** Hash function */ - rte_table_hash_op_hash f_hash; + rte_table_hash_op_hash_nomask f_hash; /** Seed for the hash function */ uint64_t seed; @@ -318,7 +352,7 @@ struct rte_table_hash_key32_ext_params { uint32_t n_entries_ext; /** Hash function */ - rte_table_hash_op_hash f_hash; + rte_table_hash_op_hash_nomask f_hash; /** Seed for the hash function */ uint64_t seed; @@ -344,7 +378,7 @@ struct rte_table_hash_cuckoo_params { uint32_t n_keys; /** Hash function used to calculate hash */ - rte_table_hash_op_hash f_hash; + rte_table_hash_op_hash_nomask f_hash; /** Seed value or Init value used by f_hash */ uint32_t seed; diff --git a/lib/librte_table/rte_table_hash_cuckoo.c b/lib/librte_table/rte_table_hash_cuckoo.c index beb45c5..9b42423 100644 --- a/lib/librte_table/rte_table_hash_cuckoo.c +++ b/lib/librte_table/rte_table_hash_cuckoo.c @@ -64,7 +64,7 @@ struct rte_table_hash { uint32_t key_size; uint32_t entry_size; uint32_t n_keys; - rte_table_hash_op_hash f_hash; + rte_table_hash_op_hash_nomask f_hash; uint32_t seed; uint32_t signature_offset; uint32_t key_offset; diff --git a/lib/librte_table/rte_table_hash_ext.c b/lib/librte_table/rte_table_hash_ext.c index c4824c3..72802b8 100755 --- a/lib/librte_table/rte_table_hash_ext.c +++ b/lib/librte_table/rte_table_hash_ext.c @@ -104,7 +104,7 @@ struct rte_table_hash { uint32_t n_keys; uint32_t n_buckets; uint32_t n_buckets_ext; - rte_table_hash_op_hash f_hash; + rte_table_hash_op_hash_nomask f_hash; uint64_t seed; uint32_t signature_offset; uint32_t key_offset; @@ -688,7 +688,7 @@ static int rte_table_hash_ext_lookup_unoptimized( struct bucket *bkt10, *bkt11, *buckets = t->buckets; \ uint8_t *key10, *key11; \ uint64_t bucket_mask = t->bucket_mask; \ - rte_table_hash_op_hash f_hash = t->f_hash; \ + rte_table_hash_op_hash_nomask f_hash = t->f_hash; \ uint64_t seed = t->seed; \ uint32_t key_size = t->key_size; \ uint32_t key_offset = t->key_offset; \ diff --git a/lib/librte_table/rte_table_hash_key16.c b/lib/librte_table/rte_table_hash_key16.c index 4ed5c78..7f6651c 100644 --- a/lib/librte_table/rte_table_hash_key16.c +++ b/lib/librte_table/rte_table_hash_key16.c @@ -86,7 +86,7 @@ struct rte_table_hash { uint32_t signature_offset; uint32_t key_offset; uint64_t key_mask[2]; - rte_table_hash_op_hash f_hash; + rte_table_hash_op_hash_nomask f_hash; uint64_t seed; /* Extendible buckets */ diff --git a/lib/librte_table/rte_table_hash_key32.c b/lib/librte_table/rte_table_hash_key32.c index 31fe6fd..f8f6662 100644 --- a/lib/librte_table/rte_table_hash_key32.c +++ b/lib/librte_table/rte_table_hash_key32.c @@ -85,7 +85,7 @@ struct rte_table_hash { uint32_t bucket_size; uint32_t signature_offset; uint32_t key_offset; - rte_table_hash_op_hash f_hash; + rte_table_hash_op_hash_nomask f_hash; uint64_t seed; /* Extendible buckets */ diff --git a/lib/librte_table/rte_table_hash_key8.c b/lib/librte_table/rte_table_hash_key8.c index f2b285d..4fbb02e 100644 --- a/lib/librte_table/rte_table_hash_key8.c +++ b/lib/librte_table/rte_table_hash_key8.c @@ -83,7 +83,7 @@ struct rte_table_hash { uint32_t signature_offset; uint32_t key_offset; uint64_t key_mask; - rte_table_hash_op_hash f_hash; + rte_table_hash_op_hash_nomask f_hash; uint64_t seed; /* Extendible buckets */ @@ -733,7 +733,7 @@ rte_table_hash_entry_delete_key8_ext( uint64_t hash_offset_buffer11; \ uint64_t signature10, signature11; \ uint32_t bucket10_index, bucket11_index; \ - rte_table_hash_op_hash f_hash = f->f_hash; \ + rte_table_hash_op_hash_nomask f_hash = f->f_hash; \ uint64_t seed = f->seed; \ uint32_t key_offset = f->key_offset; \ \ diff --git a/lib/librte_table/rte_table_hash_lru.c b/lib/librte_table/rte_table_hash_lru.c index 0a85123..61050f3 100755 --- a/lib/librte_table/rte_table_hash_lru.c +++ b/lib/librte_table/rte_table_hash_lru.c @@ -84,7 +84,7 @@ struct rte_table_hash { uint32_t entry_size; uint32_t n_keys; uint32_t n_buckets; - rte_table_hash_op_hash f_hash; + rte_table_hash_op_hash_nomask f_hash; uint64_t seed; uint32_t signature_offset; uint32_t key_offset; @@ -619,7 +619,7 @@ static int rte_table_hash_lru_lookup_unoptimized( struct bucket *bkt10, *bkt11, *buckets = t->buckets; \ uint8_t *key10, *key11; \ uint64_t bucket_mask = t->bucket_mask; \ - rte_table_hash_op_hash f_hash = t->f_hash; \ + rte_table_hash_op_hash_nomask f_hash = t->f_hash; \ uint64_t seed = t->seed; \ uint32_t key_size = t->key_size; \ uint32_t key_offset = t->key_offset; \