ha: Use the same init values for jhash() as Linux 4.1
This commit is contained in:
@@ -36,6 +36,8 @@ typedef enum {
|
|||||||
JHASH_LOOKUP2,
|
JHASH_LOOKUP2,
|
||||||
/* new variant, http://burtleburtle.net/bob/c/lookup3.c, since 2.6.37 */
|
/* new variant, http://burtleburtle.net/bob/c/lookup3.c, since 2.6.37 */
|
||||||
JHASH_LOOKUP3,
|
JHASH_LOOKUP3,
|
||||||
|
/* variant with different init values, since 4.1 */
|
||||||
|
JHASH_LOOKUP3_1,
|
||||||
} jhash_version_t;
|
} jhash_version_t;
|
||||||
|
|
||||||
typedef struct private_ha_kernel_t private_ha_kernel_t;
|
typedef struct private_ha_kernel_t private_ha_kernel_t;
|
||||||
@@ -88,8 +90,15 @@ static jhash_version_t get_jhash_version()
|
|||||||
}
|
}
|
||||||
/* FALL */
|
/* FALL */
|
||||||
case 2:
|
case 2:
|
||||||
DBG1(DBG_CFG, "detected Linux %d.%d, using new jhash", a, b);
|
if (a < 4 || (a == 4 && b == 0))
|
||||||
return JHASH_LOOKUP3;
|
{
|
||||||
|
DBG1(DBG_CFG, "detected Linux %d.%d, using new jhash",
|
||||||
|
a, b);
|
||||||
|
return JHASH_LOOKUP3;
|
||||||
|
}
|
||||||
|
DBG1(DBG_CFG, "detected Linux %d.%d, using new jhash with "
|
||||||
|
"updated init values", a, b);
|
||||||
|
return JHASH_LOOKUP3_1;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -126,6 +135,14 @@ static u_int32_t jhash(jhash_version_t version, u_int32_t a, u_int32_t b)
|
|||||||
b -= c; b -= a; b ^= (a << 10);
|
b -= c; b -= a; b ^= (a << 10);
|
||||||
c -= a; c -= b; c ^= (b >> 15);
|
c -= a; c -= b; c ^= (b >> 15);
|
||||||
break;
|
break;
|
||||||
|
case JHASH_LOOKUP3_1:
|
||||||
|
/* changed with 4.1: # of 32-bit words shifted by 2 and c is
|
||||||
|
* initialized. we only use the two word variant with SPIs, so it's
|
||||||
|
* unlikely that b is 0 in that case */
|
||||||
|
c += ((b ? 2 : 1) << 2) + 0xdeadbeef;
|
||||||
|
a += ((b ? 2 : 1) << 2);
|
||||||
|
b += ((b ? 2 : 1) << 2);
|
||||||
|
/* FALL */
|
||||||
case JHASH_LOOKUP3:
|
case JHASH_LOOKUP3:
|
||||||
a += 0xdeadbeef;
|
a += 0xdeadbeef;
|
||||||
b += 0xdeadbeef;
|
b += 0xdeadbeef;
|
||||||
|
|||||||
Reference in New Issue
Block a user