git.droids-corp.org
/
dpdk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
net/bnxt: consolidate template table processing
[dpdk.git]
/
lib
/
librte_hash
/
rte_cuckoo_hash.h
diff --git
a/lib/librte_hash/rte_cuckoo_hash.h
b/lib/librte_hash/rte_cuckoo_hash.h
index
5dfbbc4
..
345de6b
100644
(file)
--- a/
lib/librte_hash/rte_cuckoo_hash.h
+++ b/
lib/librte_hash/rte_cuckoo_hash.h
@@
-29,6
+29,17
@@
#define RETURN_IF_TRUE(cond, retval)
#endif
#define RETURN_IF_TRUE(cond, retval)
#endif
+#if defined(RTE_LIBRTE_HASH_DEBUG)
+#define ERR_IF_TRUE(cond, fmt, args...) do { \
+ if (cond) { \
+ RTE_LOG(ERR, HASH, fmt, ##args); \
+ return; \
+ } \
+} while (0)
+#else
+#define ERR_IF_TRUE(cond, fmt, args...)
+#endif
+
#include <rte_hash_crc.h>
#include <rte_jhash.h>
#include <rte_hash_crc.h>
#include <rte_jhash.h>
@@
-113,7
+124,7
@@
const rte_hash_cmp_eq_t cmp_jump_table[NUM_KEY_CMP_CASES] = {
struct lcore_cache {
unsigned len; /**< Cache len */
struct lcore_cache {
unsigned len; /**< Cache len */
-
void *
objs[LCORE_CACHE_SIZE]; /**< Cache objects */
+
uint32_t
objs[LCORE_CACHE_SIZE]; /**< Cache objects */
} __rte_cache_aligned;
/* Structure that stores key-value pair */
} __rte_cache_aligned;
/* Structure that stores key-value pair */
@@
-130,6
+141,7
@@
struct rte_hash_key {
enum rte_hash_sig_compare_function {
RTE_HASH_COMPARE_SCALAR = 0,
RTE_HASH_COMPARE_SSE,
enum rte_hash_sig_compare_function {
RTE_HASH_COMPARE_SCALAR = 0,
RTE_HASH_COMPARE_SSE,
+ RTE_HASH_COMPARE_NEON,
RTE_HASH_COMPARE_NUM
};
RTE_HASH_COMPARE_NUM
};
@@
-199,6
+211,13
@@
struct rte_hash {
rte_rwlock_t *readwrite_lock; /**< Read-write lock thread-safety. */
struct rte_hash_bucket *buckets_ext; /**< Extra buckets array */
struct rte_ring *free_ext_bkts; /**< Ring of indexes of free buckets */
rte_rwlock_t *readwrite_lock; /**< Read-write lock thread-safety. */
struct rte_hash_bucket *buckets_ext; /**< Extra buckets array */
struct rte_ring *free_ext_bkts; /**< Ring of indexes of free buckets */
+ /* Stores index of an empty ext bkt to be recycled on calling
+ * rte_hash_del_xxx APIs. When lock free read-write concurrency is
+ * enabled, an empty ext bkt cannot be put into free list immediately
+ * (as readers might be using it still). Hence freeing of the ext bkt
+ * is piggy-backed to freeing of the key index.
+ */
+ uint32_t *ext_bkt_to_free;
uint32_t *tbl_chng_cnt;
/**< Indicates if the hash table changed from last read. */
} __rte_cache_aligned;
uint32_t *tbl_chng_cnt;
/**< Indicates if the hash table changed from last read. */
} __rte_cache_aligned;