arm64: vdso: Fix clock_getres() for CLOCK_REALTIME
authorVincenzo Frascino <vincenzo.frascino@arm.com>
Tue, 16 Apr 2019 16:14:30 +0000 (17:14 +0100)
committerWill Deacon <will.deacon@arm.com>
Tue, 16 Apr 2019 17:15:56 +0000 (18:15 +0100)
commit81fb8736dd81da3fe94f28968dac60f392ec6746
tree10b8e1dc7cfa6a70d87a9dc72cf6bc724fe5c05e
parent22e6c8087e175bc5c507b4e45d1ca588b2bcc61c
arm64: vdso: Fix clock_getres() for CLOCK_REALTIME

clock_getres() in the vDSO library has to preserve the same behaviour
of posix_get_hrtimer_res().

In particular, posix_get_hrtimer_res() does:

    sec = 0;
    ns = hrtimer_resolution;

where 'hrtimer_resolution' depends on whether or not high resolution
timers are enabled, which is a runtime decision.

The vDSO incorrectly returns the constant CLOCK_REALTIME_RES. Fix this
by exposing 'hrtimer_resolution' in the vDSO datapage and returning that
instead.

Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
[will: Use WRITE_ONCE(), move adr off COARSE path, renumber labels, use 'w' reg]
Signed-off-by: Will Deacon <will.deacon@arm.com>
arch/arm64/include/asm/vdso_datapage.h
arch/arm64/kernel/asm-offsets.c
arch/arm64/kernel/vdso.c
arch/arm64/kernel/vdso/gettimeofday.S