summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorge Spelvin <linux@sciencehorizons.net>2016-05-27 04:22:01 +0200
committerGeorge Spelvin <linux@sciencehorizons.net>2016-05-28 21:42:51 +0200
commit92d567740f2ab5937b2c23bee94ea4b284bb1f98 (patch)
treecac25a2b98245c5e95cc94f8e0671b400fd9a0da
parent<linux/sunrpc/svcauth.h>: Define hash_str() in terms of hashlen_string() (diff)
downloadlinux-92d567740f2ab5937b2c23bee94ea4b284bb1f98.tar.xz
linux-92d567740f2ab5937b2c23bee94ea4b284bb1f98.zip
Change hash_64() return value to 32 bits
That's all that's ever asked for, and it makes the return type of hash_long() consistent. It also allows (upcoming patch) an optimized implementation of hash_64 on 32-bit machines. I tried adding a BUILD_BUG_ON to ensure the number of bits requested was never more than 32 (most callers use a compile-time constant), but adding <linux/bug.h> to <linux/hash.h> breaks the tools/perf compiler unless tools/perf/MANIFEST is updated, and understanding that code base well enough to update it is too much trouble. I did the rest of an allyesconfig build with such a check, and nothing tripped. Signed-off-by: George Spelvin <linux@sciencehorizons.net>
-rw-r--r--include/linux/hash.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/include/linux/hash.h b/include/linux/hash.h
index 79c52fa81cac..f967dedb10e2 100644
--- a/include/linux/hash.h
+++ b/include/linux/hash.h
@@ -48,7 +48,7 @@
#define GOLDEN_RATIO_32 0x61C88647
#define GOLDEN_RATIO_64 0x61C8864680B583EBull
-static __always_inline u64 hash_64(u64 val, unsigned int bits)
+static __always_inline u32 hash_64(u64 val, unsigned int bits)
{
u64 hash = val;
@@ -72,7 +72,7 @@ static __always_inline u64 hash_64(u64 val, unsigned int bits)
#endif
/* High bits are more random, so use them. */
- return hash >> (64 - bits);
+ return (u32)(hash >> (64 - bits));
}
static inline u32 hash_32(u32 val, unsigned int bits)
@@ -84,7 +84,7 @@ static inline u32 hash_32(u32 val, unsigned int bits)
return hash >> (32 - bits);
}
-static inline unsigned long hash_ptr(const void *ptr, unsigned int bits)
+static inline u32 hash_ptr(const void *ptr, unsigned int bits)
{
return hash_long((unsigned long)ptr, bits);
}