Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 4 Aug 2017 08:28:41 +0200
From:      Hans Petter Selasky <hps@selasky.org>
To:        cem@freebsd.org
Cc:        src-committers <src-committers@freebsd.org>, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r321985 - head/sys/ofed/drivers/infiniband/core
Message-ID:  <bd19c6f8-fa97-c9c5-6318-1778e38dd0a9@selasky.org>
In-Reply-To: <CAG6CVpVL49nVqRs5atub=d2P39EGOqcNtx_Raa8fWtV=BFZXbw@mail.gmail.com>
References:  <201708030918.v739IPVY034866@repo.freebsd.org> <CAG6CVpVL49nVqRs5atub=d2P39EGOqcNtx_Raa8fWtV=BFZXbw@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
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
> <hselasky@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);
>>
> 
> 




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bd19c6f8-fa97-c9c5-6318-1778e38dd0a9>