kernel: revert the change from JHASH_GOLDEN_RATIO to JHASH_INIT_PARAM (ipv6 still relies on it)

SVN-Revision: 15155
This commit is contained in:
Felix Fietkau 2009-04-08 15:06:38 +00:00
parent ac26fab9ce
commit 8b30a1806c

View file

@ -70,7 +70,7 @@
-/* The golden ration: an arbitrary value */ -/* The golden ration: an arbitrary value */
-#define JHASH_GOLDEN_RATIO 0x9e3779b9 -#define JHASH_GOLDEN_RATIO 0x9e3779b9
+/* An arbitrary initial parameter */ +/* An arbitrary initial parameter */
+#define JHASH_INIT_PARAM 0xdeadbeef +#define JHASH_GOLDEN_RATIO 0xdeadbeef
/* The most generic version, hashes an arbitrary sequence /* The most generic version, hashes an arbitrary sequence
* of bytes. No alignment or length assumptions are made about * of bytes. No alignment or length assumptions are made about
@ -94,7 +94,7 @@
- -
- __jhash_mix(a,b,c); - __jhash_mix(a,b,c);
+ /* Set up the internal state */ + /* Set up the internal state */
+ a = b = c = JHASH_INIT_PARAM + length + initval; + a = b = c = JHASH_GOLDEN_RATIO + length + initval;
+ /* all but the last block: affect some 32 bits of (a,b,c) */ + /* all but the last block: affect some 32 bits of (a,b,c) */
+ while (length > 12) { + while (length > 12) {
@ -154,7 +154,7 @@
- c = initval; - c = initval;
- len = length; - len = length;
+ /* Set up the internal state */ + /* Set up the internal state */
+ a = b = c = JHASH_INIT_PARAM + (length<<2) + initval; + a = b = c = JHASH_GOLDEN_RATIO + (length<<2) + initval;
- while (len >= 3) { - while (len >= 3) {
+ /* handle most of the key */ + /* handle most of the key */
@ -202,9 +202,9 @@
- a += JHASH_GOLDEN_RATIO; - a += JHASH_GOLDEN_RATIO;
- b += JHASH_GOLDEN_RATIO; - b += JHASH_GOLDEN_RATIO;
- c += initval; - c += initval;
+ a += JHASH_INIT_PARAM + initval; + a += JHASH_GOLDEN_RATIO + initval;
+ b += JHASH_INIT_PARAM + initval; + b += JHASH_GOLDEN_RATIO + initval;
+ c += JHASH_INIT_PARAM + initval; + c += JHASH_GOLDEN_RATIO + initval;
- __jhash_mix(a, b, c); - __jhash_mix(a, b, c);
+ __jhash_final(a, b, c); + __jhash_final(a, b, c);