tree d7c57be003aff2de6068acbe751182264acf3d25
parent 9d810fd2d28a9d672eca3136476af1a54a380bb2
author Patrick McHardy <[EMAIL PROTECTED]> Sun, 14 Aug 2005 03:57:58 -0700
committer David S. Miller <[EMAIL PROTECTED]> Tue, 30 Aug 2005 05:58:11 -0700

[NETFILTER]: Fix div64_64 in ipt_connbytes

Signed-off-by: Patrick McHardy <[EMAIL PROTECTED]>
Signed-off-by: David S. Miller <[EMAIL PROTECTED]>

 net/ipv4/netfilter/ipt_connbytes.c |   22 +++++++++-------------
 1 files changed, 9 insertions(+), 13 deletions(-)

diff --git a/net/ipv4/netfilter/ipt_connbytes.c 
b/net/ipv4/netfilter/ipt_connbytes.c
--- a/net/ipv4/netfilter/ipt_connbytes.c
+++ b/net/ipv4/netfilter/ipt_connbytes.c
@@ -22,23 +22,19 @@ MODULE_AUTHOR("Harald Welte <[EMAIL PROTECTED]
 MODULE_DESCRIPTION("iptables match for matching number of pkts/bytes per 
connection");
 
 /* 64bit divisor, dividend and result. dynamic precision */
-static u_int64_t div64_64(u_int64_t divisor, u_int64_t dividend)
+static u_int64_t div64_64(u_int64_t dividend, u_int64_t divisor)
 {
-       u_int64_t result = divisor;
+       u_int32_t d = divisor;
 
-       if (dividend > 0xffffffff) {
-               int first_bit = find_first_bit((unsigned long *) &dividend, 
sizeof(dividend));
-               /* calculate number of bits to shift. shift exactly enough
-                * bits to make dividend fit in 32bits. */
-               int num_shift = (64 - 32 - first_bit);
-               /* first bit has to be < 32, since dividend was > 0xffffffff */
-               result = result >> num_shift;
-               dividend = dividend >> num_shift;
-       }
+       if (divisor > 0xffffffffULL) {
+               unsigned int shift = fls(divisor >> 32);
 
-       do_div(divisor, dividend);
+               d = divisor >> shift;
+               dividend >>= shift;
+       }
 
-       return divisor;
+       do_div(dividend, d);
+       return dividend;
 }
 
 static int
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to