On Thu, Jul 9, 2020 at 3:20 PM Ondrej Mosnacek <omosnace@xxxxxxxxxx> wrote: > > Refactor searching and inserting into hashtabs to pave the way for > converting hashtab_search() and hashtab_insert() to inline functions in > the next patch. This will avoid indirect calls and allow the compiler to > better optimize individual callers, leading to a significant performance > improvement. > > In order to avoid the indirect calls, the key hashing and comparison > callbacks need to be extracted from the hashtab struct and passed > directly to hashtab_search()/_insert() by the callers so that the > callback address is always known at compile time. The kernel's > rhashtable library (<linux/rhashtable*.h>) does the same thing. > > This of course makes the hashtab functions slightly easier to misuse by > passing a wrong callback set, but unfortunately there is no better way > to implement a hash table that is both generic and efficient in C. This > patch tries to somewhat mitigate this by only calling the hashtab > functions in the same file where the corresponding callbacks are > defined (wrapping them into more specialized functions as needed). > > Note that this patch doesn't bring any benefit without also moving the > definitions of hashtab_search() and -_insert() to the header file, which > is done in a follow-up patch for easier review of the hashtab.c changes > in this patch. > > Signed-off-by: Ondrej Mosnacek <omosnace@xxxxxxxxxx> Acked-by: Stephen Smalley <stephen.smalley.work@xxxxxxxxx>