Commit e33ffc95 authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman
Browse files

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: default avatarChristophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/37f94e47c91070b7606fb3ec3fe6fd2302a475a0.1575273217.git.christophe.leroy@c-s.fr
parent 6e2f9e9c
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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));
+11 −8
Original line number Diff line number Diff line
@@ -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)