On 08/03/17 16:37, Conrad Meyer wrote:
Hey Hans,

Is it not important that the subtraction and result are evaluated
without truncation?

Hi,

ticks is a circular counter. Assuming time = 0 and jiffies = -1U, then "delay" becomes a very large negative value, because long is used, and the delay <= 0 check, is no longer working like expected.

Casting to "int" or truncating is the right thing to do in this case.

--HPS


Thanks,
Conrad

On Thu, Aug 3, 2017 at 2:18 AM, Hans Petter Selasky
<hsela...@freebsd.org> wrote:
Author: hselasky
Date: Thu Aug  3 09:18:25 2017
New Revision: 321985
URL: https://svnweb.freebsd.org/changeset/base/321985

Log:
   Ticks are 32-bit in FreeBSD.

   MFC after:    3 days
   Sponsored by: Mellanox Technologies

Modified:
   head/sys/ofed/drivers/infiniband/core/addr.c

Modified: head/sys/ofed/drivers/infiniband/core/addr.c
==============================================================================
--- head/sys/ofed/drivers/infiniband/core/addr.c        Thu Aug  3 09:14:43 
2017        (r321984)
+++ head/sys/ofed/drivers/infiniband/core/addr.c        Thu Aug  3 09:18:25 
2017        (r321985)
@@ -187,10 +187,10 @@ EXPORT_SYMBOL(rdma_translate_ip);

  static void set_timeout(unsigned long time)
  {
-       unsigned long delay;
+       int delay;      /* under FreeBSD ticks are 32-bit */

         delay = time - jiffies;
-       if ((long)delay <= 0)
+       if (delay <= 0)
                 delay = 1;

         mod_delayed_work(addr_wq, &work, delay);




_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to