netdev
[Top] [All Lists]

Re: [PATCH] net/ipv4/*, net/core/neighbour.c jiffies cleanup

To: "David S. Miller" <davem@xxxxxxxxxx>
Subject: Re: [PATCH] net/ipv4/*, net/core/neighbour.c jiffies cleanup
From: Tim Schmielau <tim@xxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 8 Nov 2001 01:58:45 +0100 (CET)
Cc: <adilger@xxxxxxxxxxxxx>, <jgarzik@xxxxxxxxxxxxxxxx>, <andrewm@xxxxxxxxxx>, <linux-kernel@xxxxxxxxxxxxxxx>, <torvalds@xxxxxxxxxxxxx>, <netdev@xxxxxxxxxxx>, <ak@xxxxxx>, <kuznet@xxxxxxxxxxxxx>
In-reply-to: <20011107.164426.35502643.davem@xxxxxxxxxx>
Sender: owner-netdev@xxxxxxxxxxx
> Why do they these cases that are actually in the code need to cast to
> a signed value to get a correct answer?  They are not like your
> example.
>
> Almost all of these cases are:
>
>       (jiffies - SOME_VALUE_KNOWN_TO_BE_IN_THE_PAST) > 5 * HZ
>
> So you say if we don't cast to signed, this won't get it right on
> wrap-around?  I disagree, let's say "long" is 32-bits and jiffies
> wrapped around to "0x2" and SOME_VALUE... is 0xfffffff8.  The
> subtraction above yields 10, and that is what we want.
>
> Please show me a bad case where casting to signed is necessary.
>
> I actually ran through the tree the other night myself starting to
> convert these things, then I noticed that I couldn't even convince
> myself that the code was incorrect.
>


Please consider to change the appended ones.

Tim


--- linux-2.4.14/net/ipv4/route.c       Wed Oct 31 00:08:12 2001
+++ linux-2.4.14-jiffies64/net/ipv4/route.c     Wed Nov  7 22:51:23 2001
@@ -395,7 +395,7 @@
                write_unlock(&rt_hash_table[i].lock);

                /* Fallback loop breaker. */
-               if ((jiffies - now) > 0)
+               if ((long)(jiffies - now) > 0)
                        break;
        }
        rover = i;
--- linux-2.4.14/net/ipv4/ipconfig.c    Wed Oct 31 00:08:12 2001
+++ linux-2.4.14-jiffies64/net/ipv4/ipconfig.c  Wed Nov  7 23:28:47 2001
@@ -1000,7 +1000,7 @@
 #endif

                jiff = jiffies + (d->next ? CONF_INTER_TIMEOUT : timeout);
-               while (jiffies < jiff && !ic_got_reply)
+               while ((long)(jiffies - jiff) < 0 && !ic_got_reply)
                        barrier();
 #ifdef IPCONFIG_DHCP
                /* DHCP isn't done until we get a DHCPACK. */
@@ -1113,7 +1113,7 @@
  try_try_again:
        /* Give hardware a chance to settle */
        jiff = jiffies + CONF_PRE_OPEN;
-       while (jiffies < jiff)
+       while ((long)(jiffies - jiff) < 0)
                ;

        /* Setup all network devices */
@@ -1122,7 +1122,7 @@

        /* Give drivers a chance to settle */
        jiff = jiffies + CONF_POST_OPEN;
-       while (jiffies < jiff)
+       while ((long)(jiffies - jiff) < 0)
                        ;

        /*


<Prev in Thread] Current Thread [Next in Thread>