Skip to content

Commit

Permalink
ipv6: Prepare the tree for un-inlined jhash.
Browse files Browse the repository at this point in the history
jhash is widely used in the kernel and because the functions
are inlined, the cost in size is significant. Also, the new jhash
functions are slightly larger than the previous ones so better un-inline.
As a preparation step, the calls to the internal macros are replaced
with the plain jhash function calls.

Signed-off-by: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Jozsef Kadlecsik authored and David S. Miller committed Nov 28, 2010
1 parent aa285b1 commit 82a39eb
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 32 deletions.
22 changes: 10 additions & 12 deletions net/ipv6/inet6_connection_sock.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,18 +60,16 @@ EXPORT_SYMBOL_GPL(inet6_csk_bind_conflict);
static u32 inet6_synq_hash(const struct in6_addr *raddr, const __be16 rport,
const u32 rnd, const u16 synq_hsize)
{
u32 a = (__force u32)raddr->s6_addr32[0];
u32 b = (__force u32)raddr->s6_addr32[1];
u32 c = (__force u32)raddr->s6_addr32[2];

a += JHASH_GOLDEN_RATIO;
b += JHASH_GOLDEN_RATIO;
c += rnd;
__jhash_mix(a, b, c);

a += (__force u32)raddr->s6_addr32[3];
b += (__force u32)rport;
__jhash_mix(a, b, c);
u32 c;

c = jhash_3words((__force u32)raddr->s6_addr32[0],
(__force u32)raddr->s6_addr32[1],
(__force u32)raddr->s6_addr32[2],
rnd);

c = jhash_2words((__force u32)raddr->s6_addr32[3],
(__force u32)rport,
c);

return c & (synq_hsize - 1);
}
Expand Down
36 changes: 16 additions & 20 deletions net/ipv6/reassembly.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,26 +104,22 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff *prev,
unsigned int inet6_hash_frag(__be32 id, const struct in6_addr *saddr,
const struct in6_addr *daddr, u32 rnd)
{
u32 a, b, c;

a = (__force u32)saddr->s6_addr32[0];
b = (__force u32)saddr->s6_addr32[1];
c = (__force u32)saddr->s6_addr32[2];

a += JHASH_GOLDEN_RATIO;
b += JHASH_GOLDEN_RATIO;
c += rnd;
__jhash_mix(a, b, c);

a += (__force u32)saddr->s6_addr32[3];
b += (__force u32)daddr->s6_addr32[0];
c += (__force u32)daddr->s6_addr32[1];
__jhash_mix(a, b, c);

a += (__force u32)daddr->s6_addr32[2];
b += (__force u32)daddr->s6_addr32[3];
c += (__force u32)id;
__jhash_mix(a, b, c);
u32 c;

c = jhash_3words((__force u32)saddr->s6_addr32[0],
(__force u32)saddr->s6_addr32[1],
(__force u32)saddr->s6_addr32[2],
rnd);

c = jhash_3words((__force u32)saddr->s6_addr32[3],
(__force u32)daddr->s6_addr32[0],
(__force u32)daddr->s6_addr32[1],
c);

c = jhash_3words((__force u32)daddr->s6_addr32[2],
(__force u32)daddr->s6_addr32[3],
(__force u32)id,
c);

return c & (INETFRAGS_HASHSZ - 1);
}
Expand Down

0 comments on commit 82a39eb

Please sign in to comment.