MCPcopy Create free account
hub / github.com/F-Stack/f-stack / rte_member_add_ht

Function rte_member_add_ht

dpdk/lib/member/rte_member_ht.c:458–512  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

456}
457
458int
459rte_member_add_ht(const struct rte_member_setsum *ss,
460 const void *key, member_set_t set_id)
461{
462 int ret;
463 unsigned int nr_pushes = 0;
464 uint32_t prim_bucket, sec_bucket;
465 member_sig_t tmp_sig;
466 struct member_ht_bucket *buckets = ss->table;
467 member_set_t flag_mask = 1U << (sizeof(member_set_t) * 8 - 1);
468
469 if (set_id == RTE_MEMBER_NO_MATCH || (set_id & flag_mask) != 0)
470 return -EINVAL;
471
472 get_buckets_index(ss, key, &prim_bucket, &sec_bucket, &tmp_sig);
473
474 /*
475 * If it is cache based setsummary, we try overwriting (updating)
476 * existing entry with the same signature first. In cache mode, we allow
477 * false negatives and only cache the most recent keys.
478 *
479 * For non-cache mode, we do not update existing entry with the same
480 * signature. This is because if two keys with same signature update
481 * each other, false negative may happen, which is not the expected
482 * behavior for non-cache setsummary.
483 */
484 if (ss->cache) {
485 ret = try_update(buckets, prim_bucket, sec_bucket, tmp_sig,
486 set_id, ss->sig_cmp_fn);
487 if (ret != -1)
488 return ret;
489 }
490 /* If not full then insert into one slot */
491 ret = try_insert(buckets, prim_bucket, sec_bucket, tmp_sig, set_id);
492 if (ret != -1)
493 return ret;
494
495 /* Random pick prim or sec for recursive displacement */
496 uint32_t select_bucket = (tmp_sig & 1U) ? prim_bucket : sec_bucket;
497 if (ss->cache) {
498 ret = evict_from_bucket();
499 buckets[select_bucket].sigs[ret] = tmp_sig;
500 buckets[select_bucket].sets[ret] = set_id;
501 return 1;
502 }
503
504 ret = make_space_bucket(ss, select_bucket, &nr_pushes);
505 if (ret >= 0) {
506 buckets[select_bucket].sigs[ret] = tmp_sig;
507 buckets[select_bucket].sets[ret] = set_id;
508 ret = 1;
509 }
510
511 return ret;
512}
513
514void
515rte_member_free_ht(struct rte_member_setsum *ss)

Callers 1

rte_member_addFunction · 0.85

Calls 5

get_buckets_indexFunction · 0.85
try_updateFunction · 0.85
try_insertFunction · 0.85
evict_from_bucketFunction · 0.85
make_space_bucketFunction · 0.85

Tested by

no test coverage detected