[RFC 1/3] hash: move table of hash compare functions out of header
Morten Brørup
mb at smartsharesystems.com
Fri Aug 22 11:05:06 CEST 2025
> From: Stephen Hemminger [mailto:stephen at networkplumber.org]
> Sent: Thursday, 21 August 2025 22.35
>
> Remove the definition of the compare jump table from the
> header file so the internal details are not exposed.
> Prevents future ABI breakage if new sizes are added.
>
> Make other macros local if possible, header should
> only contain exposed API.
>
> Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
> ---
[...]
> +/*
> + * All different options to select a key compare function,
> + * based on the key size and custom function.
> + * Not in rte_cuckoo_hash.h to avoid ABI issues.
> + */
> +enum cmp_jump_table_case {
> + KEY_CUSTOM = 0,
> +#if defined(RTE_ARCH_X86) || defined(RTE_ARCH_ARM64)
> + KEY_16_BYTES,
> + KEY_32_BYTES,
> + KEY_48_BYTES,
> + KEY_64_BYTES,
> + KEY_80_BYTES,
> + KEY_96_BYTES,
> + KEY_112_BYTES,
> + KEY_128_BYTES,
> +#endif
> + KEY_OTHER_BYTES,
> + NUM_KEY_CMP_CASES,
> +};
>
> /* Enum used to select the implementation of the signature comparison
> function to use
> * eg: a system supporting SVE might want to use a NEON or scalar
> implementation.
> @@ -117,6 +154,25 @@ void rte_hash_set_cmp_func(struct rte_hash *h,
> rte_hash_cmp_eq_t func)
> h->rte_hash_custom_cmp_eq = func;
> }
>
> +/*
> + * Table storing all different key compare functions
> + * (multi-process supported)
> + */
> +static const rte_hash_cmp_eq_t cmp_jump_table[NUM_KEY_CMP_CASES] = {
> + [KEY_CUSTOM] = NULL,
> +#if defined(RTE_ARCH_X86) || defined(RTE_ARCH_ARM64)
> + [KEY_16_BYTES] = rte_hash_k16_cmp_eq,
> + [KEY_32_BYTES] = rte_hash_k32_cmp_eq,
> + [KEY_48_BYTES] = rte_hash_k48_cmp_eq,
> + [KEY_64_BYTES] = rte_hash_k64_cmp_eq,
> + [KEY_80_BYTES] = rte_hash_k80_cmp_eq,
> + [KEY_96_BYTES] = rte_hash_k96_cmp_eq,
> + [KEY_112_BYTES] = rte_hash_k112_cmp_eq,
> + [KEY_128_BYTES] = rte_hash_k128_cmp_eq,
> +#endif
> + [KEY_OTHER_BYTES] = memcmp,
> +};
Nice trick explicitly indexing these here; it reduces the risk of not matching the cmp_jump_table_case.
Consider adding static_assert() that RTE_DIM(cmp_jump_table) == NUM_KEY_CMP_CASES.
With or without suggested static_assert()...
Acked-by: Morten Brørup <mb at smartsharesystems.com>
Good cleanup!
More information about the dev
mailing list