hash: fix gcc 10 maybe-uninitialized warning

gcc 10.1.1 reports a warning for the ext_bkt_id variable:

../lib/librte_hash/rte_cuckoo_hash.c:
In function ‘__rte_hash_add_key_with_hash’:
../lib/librte_hash/rte_cuckoo_hash.c:1104:29:
warning: ‘ext_bkt_id’ may be used uninitialized in this function
[-Wmaybe-uninitialized]
 1104 |  (h->buckets_ext[ext_bkt_id - 1]).sig_current[0] = short_sig;
      |                  ~~~~~~~~~~~^~~

The return value of rte_ring_sc_dequeue_elem() is already checked,
but also initialize ext_bkt_id to zero (invalid value) and check
that it also overwritten.

Fixes: fbfe568103b0 ("hash: use 32-bit elements rings to save memory")
Cc: stable@dpdk.org

Signed-off-by: Kevin Traynor <ktraynor@redhat.com>
Acked-by: Yipeng Wang <yipeng1.wang@intel.com>
This commit is contained in:
Kevin Traynor 2020-05-15 15:28:08 +01:00 committed by David Marchand
parent b7aa3b5b88
commit 572f2a9089

View File

@ -939,8 +939,8 @@ __rte_hash_add_key_with_hash(const struct rte_hash *h, const void *key,
uint32_t prim_bucket_idx, sec_bucket_idx;
struct rte_hash_bucket *prim_bkt, *sec_bkt, *cur_bkt;
struct rte_hash_key *new_k, *keys = h->key_store;
uint32_t ext_bkt_id = 0;
uint32_t slot_id;
uint32_t ext_bkt_id;
int ret;
unsigned n_slots;
unsigned lcore_id;
@ -1095,7 +1095,8 @@ __rte_hash_add_key_with_hash(const struct rte_hash *h, const void *key,
* extendable bucket. We first get a free bucket from ring.
*/
if (rte_ring_sc_dequeue_elem(h->free_ext_bkts, &ext_bkt_id,
sizeof(uint32_t)) != 0) {
sizeof(uint32_t)) != 0 ||
ext_bkt_id == 0) {
ret = -ENOSPC;
goto failure;
}