[ovs-dev] [PATCH 18/20] datapath: use ktime_get_ts64() instead of ktime_get_ts()

Gregory Rose gvrose8192 at gmail.com
Fri Feb 2 18:31:05 UTC 2018


On 2/2/2018 10:18 AM, Pravin Shelar wrote:
> On Tue, Jan 30, 2018 at 4:40 PM, Gregory Rose <gvrose8192 at gmail.com> wrote:
>> On 1/30/2018 3:40 PM, Greg Rose wrote:
>>> From: Arnd Bergmann <arnd at arndb.de>
>>>
>>> Upstream commit:
>>>       commit 311af51dcb5629f04976a8e451673f77e3301041
>>>       Author: Arnd Bergmann <arnd at arndb.de>
>>>       Date:   Mon Nov 27 12:41:38 2017 +0100
>>>
>>>       openvswitch: use ktime_get_ts64() instead of ktime_get_ts()
>>>
>>>       timespec is deprecated because of the y2038 overflow, so let's
>>> convert
>>>       this one to ktime_get_ts64(). The code is already safe even on 32-bit
>>>       architectures, since it uses monotonic times. On 64-bit
>>> architectures,
>>>       nothing changes, while on 32-bit architectures this avoids one
>>>       type conversion.
>>>
>>>       Signed-off-by: Arnd Bergmann <arnd at arndb.de>
>>>       Signed-off-by: David S. Miller <davem at davemloft.net>
>>>
>>> Additional compatability check for ktime_get_ts64() exists or not.
>>> If not, then just continue using ktime_get_ts().
>>>
>>> Cc: Arnd Bergmann <arnd at arndb.de>
>>> Signed-off-by: Greg Rose <gvrose8192 at gmail.com>
>>
>> Oops, I screwed this up.  ktime_get_ts64 isn't a macro.  We'll need this
>> incremental...
>>
>> diff --git a/acinclude.m4 b/acinclude.m4
>> index bc1ec72..5c63222 100644
>> --- a/acinclude.m4
>> +++ b/acinclude.m4
>> @@ -807,6 +807,9 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
>>     OVS_GREP_IFELSE([$KSRC/include/linux/timekeeping.h],
>>                     [ktime_get_ns],
>>                     [OVS_DEFINE([HAVE_KTIME_GET_NS])])
>> +  OVS_GREP_IFELSE([$KSRC/include/linux/timekeeping.h],
>> +                  [ktime_get_ts64],
>> +                  [OVS_DEFINE([HAVE_KTIME_GET_TS64])])
>>
>>     if cmp -s datapath/linux/kcompat.h.new \
>>               datapath/linux/kcompat.h >/dev/null 2>&1; then
>> diff --git a/datapath/flow.c b/datapath/flow.c
>> index 385e481..cd8d422 100644
>> --- a/datapath/flow.c
>> +++ b/datapath/flow.c
>> @@ -52,7 +52,7 @@
>>   #include "flow_netlink.h"
>>   #include "vport.h"
>>
>> -#ifndef ktime_get_ts64
>> +#ifndef HAVE_KTIME_GET_TS64
>>   #define ktime_get_ts64 ktime_get_ts
>>   #define timespec64 timespec
>>   #endif
>>
>>
>>
>>> ---
>>>    datapath/flow.c | 11 ++++++++---
>>>    1 file changed, 8 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/datapath/flow.c b/datapath/flow.c
>>> index 5da7e3e..385e481 100644
>>> --- a/datapath/flow.c
>>> +++ b/datapath/flow.c
>>> @@ -52,14 +52,19 @@
>>>    #include "flow_netlink.h"
>>>    #include "vport.h"
>>>    +#ifndef ktime_get_ts64
>>> +#define ktime_get_ts64 ktime_get_ts
>>> +#define timespec64 timespec
>>> +#endif
>>> +
> This is done in compat code, can you move it to respective header file?

Yes - my own preference is to keep these sorts of things close to where 
they're used but
I suppose there is a good chance we'll use ktime_get_ts64 elsewhere in 
the future.  So
that's fine by me.

Thanks,

- Greg

>>>    u64 ovs_flow_used_time(unsigned long flow_jiffies)
>>>    {
>>> -       struct timespec cur_ts;
>>> +       struct timespec64 cur_ts;
>>>          u64 cur_ms, idle_ms;
>>>    -     ktime_get_ts(&cur_ts);
>>> +       ktime_get_ts64(&cur_ts);
>>>          idle_ms = jiffies_to_msecs(jiffies - flow_jiffies);
>>> -       cur_ms = (u64)cur_ts.tv_sec * MSEC_PER_SEC +
>>> +       cur_ms = (u64)(u32)cur_ts.tv_sec * MSEC_PER_SEC +
>>>                   cur_ts.tv_nsec / NSEC_PER_MSEC;
>>>          return cur_ms - idle_ms;
>>
>> _______________________________________________
>> dev mailing list
>> dev at openvswitch.org
>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev



More information about the dev mailing list