svn commit: r321985 - head/sys/ofed/drivers/infiniband/core

Hans Petter Selasky hps at selasky.org
Fri Aug 4 06:30:54 UTC 2017


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 at 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);
>>
> 
> 



More information about the svn-src-head mailing list