summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2012-05-14 02:01:46 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2012-05-17 00:56:35 +0200
commitc44f5faa8e8c2036da2ba656f79b57a737543aff (patch)
tree01077e73629b4adeff0f7b05d5cca2cdde4cca59 /net
parent58618115492711d99fbccb79c5317299e32231fe (diff)
downloadlinux-3.10-c44f5faa8e8c2036da2ba656f79b57a737543aff.tar.gz
linux-3.10-c44f5faa8e8c2036da2ba656f79b57a737543aff.tar.bz2
linux-3.10-c44f5faa8e8c2036da2ba656f79b57a737543aff.zip
netfilter: xt_HMARK: modulus is expensive for hash calculation
Use: ((u64)(HASH_VAL * HASH_SIZE)) >> 32 as suggested by David S. Miller. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'net')
-rw-r--r--net/netfilter/xt_HMARK.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/net/netfilter/xt_HMARK.c b/net/netfilter/xt_HMARK.c
index 5817d03105b..0a96a43108e 100644
--- a/net/netfilter/xt_HMARK.c
+++ b/net/netfilter/xt_HMARK.c
@@ -109,7 +109,7 @@ hmark_hash(struct hmark_tuple *t, const struct xt_hmark_info *info)
hash = jhash_3words(t->src, t->dst, t->uports.v32, info->hashrnd);
hash = hash ^ (t->proto & info->proto_mask);
- return (hash % info->hmodulus) + info->hoffset;
+ return (((u64)hash * info->hmodulus) >> 32) + info->hoffset;
}
static void