hash: fix eviction counter
[dpdk.git] / lib / librte_hash / rte_cuckoo_hash.c
index 5b2b8dd..e69b911 100644 (file)
@@ -52,7 +52,6 @@
 #include <rte_errno.h>
 #include <rte_string_fns.h>
 #include <rte_cpuflags.h>
-#include <rte_log.h>
 #include <rte_rwlock.h>
 #include <rte_spinlock.h>
 #include <rte_ring.h>
@@ -418,9 +417,9 @@ rte_hash_reset(struct rte_hash *h)
 
 /* Search for an entry that can be pushed to its alternative location */
 static inline int
-make_space_bucket(const struct rte_hash *h, struct rte_hash_bucket *bkt)
+make_space_bucket(const struct rte_hash *h, struct rte_hash_bucket *bkt,
+               unsigned int *nr_pushes)
 {
-       static unsigned int nr_pushes;
        unsigned i, j;
        int ret;
        uint32_t next_bucket_idx;
@@ -457,15 +456,14 @@ make_space_bucket(const struct rte_hash *h, struct rte_hash_bucket *bkt)
                        break;
 
        /* All entries have been pushed, so entry cannot be added */
-       if (i == RTE_HASH_BUCKET_ENTRIES || nr_pushes > RTE_HASH_MAX_PUSHES)
+       if (i == RTE_HASH_BUCKET_ENTRIES || ++(*nr_pushes) > RTE_HASH_MAX_PUSHES)
                return -ENOSPC;
 
        /* Set flag to indicate that this entry is going to be pushed */
        bkt->flag[i] = 1;
 
-       nr_pushes++;
        /* Need room in alternative bucket to insert the pushed entry */
-       ret = make_space_bucket(h, next_bkt[i]);
+       ret = make_space_bucket(h, next_bkt[i], nr_pushes);
        /*
         * After recursive function.
         * Clear flags and insert the pushed entry
@@ -473,7 +471,6 @@ make_space_bucket(const struct rte_hash *h, struct rte_hash_bucket *bkt)
         * or return error
         */
        bkt->flag[i] = 0;
-       nr_pushes = 0;
        if (ret >= 0) {
                next_bkt[i]->sig_alt[ret] = bkt->sig_current[i];
                next_bkt[i]->sig_current[ret] = bkt->sig_alt[i];
@@ -516,6 +513,7 @@ __rte_hash_add_key_with_hash(const struct rte_hash *h, const void *key,
        unsigned n_slots;
        unsigned lcore_id;
        struct lcore_cache *cached_free_slots = NULL;
+       unsigned int nr_pushes = 0;
 
        if (h->add_key == ADD_KEY_MULTIWRITER)
                rte_spinlock_lock(h->multiwriter_lock);
@@ -649,7 +647,7 @@ __rte_hash_add_key_with_hash(const struct rte_hash *h, const void *key,
                 * if successful or return error and
                 * store the new slot back in the ring
                 */
-               ret = make_space_bucket(h, prim_bkt);
+               ret = make_space_bucket(h, prim_bkt, &nr_pushes);
                if (ret >= 0) {
                        prim_bkt->sig_current[ret] = sig;
                        prim_bkt->sig_alt[ret] = alt_hash;