diff options
author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2014-10-11 11:41:19 -0700 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2014-10-11 11:41:19 -0700 |
commit | 4af6600fd793023c01634cca5abfe4a2b707788f (patch) | |
tree | 9e3a830d7782512b492011932ddd789d13a900c4 /include/linux/hash.h | |
parent | 447a8b858e4bda41c394b1bc7fdbc9dc0bdf44f6 (diff) | |
parent | 68da166491655bc54051bf04c78ce648e2e33508 (diff) | |
download | op-kernel-dev-4af6600fd793023c01634cca5abfe4a2b707788f.zip op-kernel-dev-4af6600fd793023c01634cca5abfe4a2b707788f.tar.gz |
Merge branch 'next' into for-linus
Prepare second round of input updates for 3.18.
Diffstat (limited to 'include/linux/hash.h')
-rw-r--r-- | include/linux/hash.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/include/linux/hash.h b/include/linux/hash.h index bd1754c..d0494c3 100644 --- a/include/linux/hash.h +++ b/include/linux/hash.h @@ -37,6 +37,9 @@ static __always_inline u64 hash_64(u64 val, unsigned int bits) { u64 hash = val; +#if defined(CONFIG_ARCH_HAS_FAST_MULTIPLIER) && BITS_PER_LONG == 64 + hash = hash * GOLDEN_RATIO_PRIME_64; +#else /* Sigh, gcc can't optimise this alone like it does for 32 bits. */ u64 n = hash; n <<= 18; @@ -51,6 +54,7 @@ static __always_inline u64 hash_64(u64 val, unsigned int bits) hash += n; n <<= 2; hash += n; +#endif /* High bits are more random, so use them. */ return hash >> (64 - bits); |