diff options
Diffstat (limited to 'arch/s390/kernel/vdso32/clock_getres.S')
-rw-r--r-- | arch/s390/kernel/vdso32/clock_getres.S | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/arch/s390/kernel/vdso32/clock_getres.S b/arch/s390/kernel/vdso32/clock_getres.S new file mode 100644 index 000000000..eaf9cf141 --- /dev/null +++ b/arch/s390/kernel/vdso32/clock_getres.S @@ -0,0 +1,44 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Userland implementation of clock_getres() for 32 bits processes in a + * s390 kernel for use in the vDSO + * + * Copyright IBM Corp. 2008 + * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) + */ +#include <asm/vdso.h> +#include <asm/asm-offsets.h> +#include <asm/unistd.h> +#include <asm/dwarf.h> + + .text + .align 4 + .globl __kernel_clock_getres + .type __kernel_clock_getres,@function +__kernel_clock_getres: + CFI_STARTPROC + basr %r1,0 + la %r1,4f-.(%r1) + chi %r2,__CLOCK_REALTIME + je 0f + chi %r2,__CLOCK_MONOTONIC + je 0f + la %r1,5f-4f(%r1) + chi %r2,__CLOCK_REALTIME_COARSE + je 0f + chi %r2,__CLOCK_MONOTONIC_COARSE + jne 3f +0: ltr %r3,%r3 + jz 2f /* res == NULL */ +1: l %r0,0(%r1) + xc 0(4,%r3),0(%r3) /* set tp->tv_sec to zero */ + st %r0,4(%r3) /* store tp->tv_usec */ +2: lhi %r2,0 + br %r14 +3: lhi %r1,__NR_clock_getres /* fallback to svc */ + svc 0 + br %r14 + CFI_ENDPROC +4: .long __CLOCK_REALTIME_RES +5: .long __CLOCK_COARSE_RES + .size __kernel_clock_getres,.-__kernel_clock_getres |