Re: [PATCH v3 2/8] powerpc/vdso32: Add support for CLOCK_{REALTIME/MONOTONIC}_COARSE

From: Michael Ellerman
Date: Wed Nov 20 2019 - 18:54:11 EST


Christophe Leroy <christophe.leroy@xxxxxx> writes:
> Michael Ellerman <mpe@xxxxxxxxxxxxxx> a ÃcritÂ:
>> Christophe Leroy <christophe.leroy@xxxxxx> writes:
>>> This is copied and adapted from commit 5c929885f1bb ("powerpc/vdso64:
>>> Add support for CLOCK_{REALTIME/MONOTONIC}_COARSE")
>>> from Santosh Sivaraj <santosh@xxxxxxxxxx>
>>>
>>> Benchmark from vdsotest-all:
>>> clock-gettime-realtime: syscall: 3601 nsec/call
>>> clock-gettime-realtime: libc: 1072 nsec/call
>>> clock-gettime-realtime: vdso: 931 nsec/call
>>> clock-gettime-monotonic: syscall: 4034 nsec/call
>>> clock-gettime-monotonic: libc: 1213 nsec/call
>>> clock-gettime-monotonic: vdso: 1076 nsec/call
>>> clock-gettime-realtime-coarse: syscall: 2722 nsec/call
>>> clock-gettime-realtime-coarse: libc: 805 nsec/call
>>> clock-gettime-realtime-coarse: vdso: 668 nsec/call
>>> clock-gettime-monotonic-coarse: syscall: 2949 nsec/call
>>> clock-gettime-monotonic-coarse: libc: 882 nsec/call
>>> clock-gettime-monotonic-coarse: vdso: 745 nsec/call
>>>
>>> Additional test passed with:
>>> vdsotest -d 30 clock-gettime-monotonic-coarse verify
>>
>> This broke on 64-bit big endian, which uses the 32-bit VDSO, with errors
>> like:
>>
>> clock-gettime-monotonic-coarse/verify: 10 failures/inconsistencies
>> encountered
>> timestamp obtained from libc/vDSO not normalized:
>> [-1574202155, 1061008673]
>> timestamp obtained from libc/vDSO predates timestamp
>> previously obtained from kernel:
>> [74, 261310747] (kernel)
>> [-1574202155, 1061008673] (vDSO)
>> timestamp obtained from libc/vDSO not normalized:
>> [-1574202155, 1061008673]
>> timestamp obtained from libc/vDSO predates timestamp
>> previously obtained from kernel:
>> [74, 261310747] (kernel)
>> [-1574202155, 1061008673] (vDSO)
>> timestamp obtained from libc/vDSO not normalized:
>> [-1574202155, 1061008673]
>> timestamp obtained from libc/vDSO predates timestamp
>> previously obtained from kernel:
>> [74, 261310747] (kernel)
>> [-1574202155, 1061008673] (vDSO)
>> timestamp obtained from libc/vDSO not normalized:
>> [-1574202155, 1061008673]
>> timestamp obtained from libc/vDSO predates timestamp
>> previously obtained from kernel:
>> [74, 261310747] (kernel)
>> [-1574202155, 1061008673] (vDSO)
>> timestamp obtained from libc/vDSO not normalized:
>> [-1574202155, 1061008673]
>> timestamp obtained from libc/vDSO predates timestamp
>> previously obtained from kernel:
>> [74, 261310747] (kernel)
>> [-1574202155, 1061008673] (vDSO)
>> Failure threshold (10) reached; stopping test.
>>
>>
>> The diff below seems to fix it, but I'm not sure it's correct. ie. we
>> just ignore the top part of the values, how does that work?
>
> Your change makes sense, it is consistent with other functions using
> STAMP_XTIME.
>
> It works because nanoseconds are max 999999999, it fits 32 bits regs.

Yeah, but for seconds? I guess this is the whole Y2038 problem, though
I'm not clear how it's going to work for compat.

Anyway I'll squash that in and get this merged.

cheers