powerpc/vdso32: implement clock_getres entirely

clock_getres returns hrtimer_res for all clocks but coarse ones
for which it returns KTIME_LOW_RES.

return EINVAL for unknown clocks.

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/37f94e47c91070b7606fb3ec3fe6fd2302a475a0.1575273217.git.christophe.leroy@c-s.fr
This commit is contained in:
Christophe Leroy 2019-12-02 07:57:33 +00:00 committed by Michael Ellerman
parent 6e2f9e9cfd
commit e33ffc956b
2 changed files with 14 additions and 8 deletions

View File

@ -413,7 +413,10 @@ int main(void)
DEFINE(CLOCK_MONOTONIC, CLOCK_MONOTONIC);
DEFINE(CLOCK_REALTIME_COARSE, CLOCK_REALTIME_COARSE);
DEFINE(CLOCK_MONOTONIC_COARSE, CLOCK_MONOTONIC_COARSE);
DEFINE(CLOCK_MAX, CLOCK_TAI);
DEFINE(NSEC_PER_SEC, NSEC_PER_SEC);
DEFINE(EINVAL, EINVAL);
DEFINE(KTIME_LOW_RES, KTIME_LOW_RES);
#ifdef CONFIG_BUG
DEFINE(BUG_ENTRY_SIZE, sizeof(struct bug_entry));

View File

@ -196,17 +196,20 @@ V_FUNCTION_END(__kernel_clock_gettime)
V_FUNCTION_BEGIN(__kernel_clock_getres)
.cfi_startproc
/* Check for supported clock IDs */
cmpwi cr0,r3,CLOCK_REALTIME
cmpwi cr1,r3,CLOCK_MONOTONIC
cror cr0*4+eq,cr0*4+eq,cr1*4+eq
bne cr0,99f
cmplwi cr0, r3, CLOCK_MAX
cmpwi cr1, r3, CLOCK_REALTIME_COARSE
cmpwi cr7, r3, CLOCK_MONOTONIC_COARSE
bgt cr0, 99f
LOAD_REG_IMMEDIATE(r5, KTIME_LOW_RES)
beq cr1, 1f
beq cr7, 1f
mflr r12
.cfi_register lr,r12
get_datapage r3, r0
lwz r5, CLOCK_HRTIMER_RES(r3)
mtlr r12
li r3,0
1: li r3,0
cmpli cr0,r4,0
crclr cr0*4+so
beqlr
@ -215,11 +218,11 @@ V_FUNCTION_BEGIN(__kernel_clock_getres)
blr
/*
* syscall fallback
* invalid clock
*/
99:
li r0,__NR_clock_getres
sc
li r3, EINVAL
crset so
blr
.cfi_endproc
V_FUNCTION_END(__kernel_clock_getres)