fast_hash: avoid indirect function calls
authorHannes Frederic Sowa <hannes@stressinduktion.org>
Tue, 4 Nov 2014 23:23:04 +0000 (00:23 +0100)
committerDavid S. Miller <davem@davemloft.net>
Thu, 6 Nov 2014 03:01:21 +0000 (22:01 -0500)
commite5a2c899957659cd1a9f789bc462f9c0b35f5150
tree4c9b8a6f89d961daf9ada9f5ee95f8b371ce3a04
parent2c99cd914d4fed9160d98849c9dd38034616768e
fast_hash: avoid indirect function calls

By default the arch_fast_hash hashing function pointers are initialized
to jhash(2). If during boot-up a CPU with SSE4.2 is detected they get
updated to the CRC32 ones. This dispatching scheme incurs a function
pointer lookup and indirect call for every hashing operation.

rhashtable as a user of arch_fast_hash e.g. stores pointers to hashing
functions in its structure, too, causing two indirect branches per
hashing operation.

Using alternative_call we can get away with one of those indirect branches.

Acked-by: Daniel Borkmann <dborkman@redhat.com>
Cc: Thomas Graf <tgraf@suug.ch>
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
arch/x86/include/asm/hash.h
arch/x86/lib/hash.c
include/asm-generic/hash.h
include/linux/hash.h
lib/Makefile
lib/hash.c [deleted file]