linux/arch/arm64/kernel/vdso
Nathan Lynch 069b918623 arm64: vdso: fix coarse clock handling
When __kernel_clock_gettime is called with a CLOCK_MONOTONIC_COARSE or
CLOCK_REALTIME_COARSE clock id, it returns incorrectly to whatever the
caller has placed in x2 ("ret x2" to return from the fast path).  Fix
this by saving x30/LR to x2 only in code that will call
__do_get_tspec, restoring x30 afterward, and using a plain "ret" to
return from the routine.

Also: while the resulting tv_nsec value for CLOCK_REALTIME and
CLOCK_MONOTONIC must be computed using intermediate values that are
left-shifted by cs_shift (x12, set by __do_get_tspec), the results for
coarse clocks should be calculated using unshifted values
(xtime_coarse_nsec is in units of actual nanoseconds).  The current
code shifts intermediate values by x12 unconditionally, but x12 is
uninitialized when servicing a coarse clock.  Fix this by setting x12
to 0 once we know we are dealing with a coarse clock id.

Signed-off-by: Nathan Lynch <nathan_lynch@mentor.com>
Acked-by: Will Deacon <will.deacon@arm.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2014-02-05 11:55:30 +00:00
..
.gitignore arm64: VDSO support 2012-09-17 13:42:09 +01:00
Makefile arm64: vdso: prevent ld from aligning PT_LOAD segments to 64k 2014-02-04 17:52:47 +00:00
gen_vdso_offsets.sh arm64: VDSO support 2012-09-17 13:42:09 +01:00
gettimeofday.S arm64: vdso: fix coarse clock handling 2014-02-05 11:55:30 +00:00
note.S arm64: VDSO support 2012-09-17 13:42:09 +01:00
sigreturn.S arm64: VDSO support 2012-09-17 13:42:09 +01:00
vdso.S arm64: VDSO support 2012-09-17 13:42:09 +01:00
vdso.lds.S arm64: VDSO support 2012-09-17 13:42:09 +01:00