aboutsummaryrefslogtreecommitdiffstats
path: root/mm/failslab.c
diff options
context:
space:
mode:
authorNathan Lynch <nathan_lynch@mentor.com>2014-02-05 00:53:04 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-02-20 14:06:11 -0500
commitfb569d15d867a06e89b1be8278404b6fbf6b5bde (patch)
treed33c3160fb70043c0e660a0c3a3df3a3ab67e006 /mm/failslab.c
parentf35f27e775d6f8aa265fb698975c9c95f2757ef4 (diff)
arm64: vdso: fix coarse clock handling
commit 069b918623e1510e58dacf178905a72c3baa3ae4 upstream. 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> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'mm/failslab.c')
0 files changed, 0 insertions, 0 deletions