xref: /linux/arch/x86/entry/vdso/common/vclock_gettime.c (revision 6f7e6393d1ce636bb7ec77a7fe7b77458fddf701)
1693c819fSH. Peter Anvin // SPDX-License-Identifier: GPL-2.0-only
2693c819fSH. Peter Anvin /*
3693c819fSH. Peter Anvin  * Fast user context implementation of clock_gettime, gettimeofday, and time.
4693c819fSH. Peter Anvin  *
5693c819fSH. Peter Anvin  * Copyright 2006 Andi Kleen, SUSE Labs.
6693c819fSH. Peter Anvin  * Copyright 2019 ARM Limited
7693c819fSH. Peter Anvin  *
8693c819fSH. Peter Anvin  * 32 Bit compat layer by Stefani Seibold <stefani@seibold.net>
9693c819fSH. Peter Anvin  *  sponsored by Rohde & Schwarz GmbH & Co. KG Munich/Germany
10693c819fSH. Peter Anvin  */
11693c819fSH. Peter Anvin #include <linux/time.h>
12693c819fSH. Peter Anvin #include <linux/kernel.h>
13693c819fSH. Peter Anvin #include <linux/types.h>
14693c819fSH. Peter Anvin #include <vdso/gettime.h>
15693c819fSH. Peter Anvin 
16693c819fSH. Peter Anvin #include "../../../../lib/vdso/gettimeofday.c"
17693c819fSH. Peter Anvin 
18693c819fSH. Peter Anvin int __vdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz)
19693c819fSH. Peter Anvin {
20693c819fSH. Peter Anvin 	return __cvdso_gettimeofday(tv, tz);
21693c819fSH. Peter Anvin }
22693c819fSH. Peter Anvin 
23693c819fSH. Peter Anvin int gettimeofday(struct __kernel_old_timeval *, struct timezone *)
24693c819fSH. Peter Anvin 	__attribute__((weak, alias("__vdso_gettimeofday")));
25693c819fSH. Peter Anvin 
26693c819fSH. Peter Anvin __kernel_old_time_t __vdso_time(__kernel_old_time_t *t)
27693c819fSH. Peter Anvin {
28693c819fSH. Peter Anvin 	return __cvdso_time(t);
29693c819fSH. Peter Anvin }
30693c819fSH. Peter Anvin 
31693c819fSH. Peter Anvin __kernel_old_time_t time(__kernel_old_time_t *t)	__attribute__((weak, alias("__vdso_time")));
32693c819fSH. Peter Anvin 
33693c819fSH. Peter Anvin 
34693c819fSH. Peter Anvin #if defined(CONFIG_X86_64) && !defined(BUILD_VDSO32_64)
35693c819fSH. Peter Anvin /* both 64-bit and x32 use these */
36693c819fSH. Peter Anvin int __vdso_clock_gettime(clockid_t clock, struct __kernel_timespec *ts)
37693c819fSH. Peter Anvin {
38693c819fSH. Peter Anvin 	return __cvdso_clock_gettime(clock, ts);
39693c819fSH. Peter Anvin }
40693c819fSH. Peter Anvin 
41693c819fSH. Peter Anvin int clock_gettime(clockid_t, struct __kernel_timespec *)
42693c819fSH. Peter Anvin 	__attribute__((weak, alias("__vdso_clock_gettime")));
43693c819fSH. Peter Anvin 
44693c819fSH. Peter Anvin int __vdso_clock_getres(clockid_t clock,
45693c819fSH. Peter Anvin 			struct __kernel_timespec *res)
46693c819fSH. Peter Anvin {
47693c819fSH. Peter Anvin 	return __cvdso_clock_getres(clock, res);
48693c819fSH. Peter Anvin }
49693c819fSH. Peter Anvin int clock_getres(clockid_t, struct __kernel_timespec *)
50693c819fSH. Peter Anvin 	__attribute__((weak, alias("__vdso_clock_getres")));
51693c819fSH. Peter Anvin 
52693c819fSH. Peter Anvin #else
53693c819fSH. Peter Anvin /* i386 only */
54693c819fSH. Peter Anvin int __vdso_clock_gettime(clockid_t clock, struct old_timespec32 *ts)
55693c819fSH. Peter Anvin {
56693c819fSH. Peter Anvin 	return __cvdso_clock_gettime32(clock, ts);
57693c819fSH. Peter Anvin }
58693c819fSH. Peter Anvin 
59693c819fSH. Peter Anvin int clock_gettime(clockid_t, struct old_timespec32 *)
60693c819fSH. Peter Anvin 	__attribute__((weak, alias("__vdso_clock_gettime")));
61693c819fSH. Peter Anvin 
62693c819fSH. Peter Anvin int __vdso_clock_gettime64(clockid_t clock, struct __kernel_timespec *ts)
63693c819fSH. Peter Anvin {
64693c819fSH. Peter Anvin 	return __cvdso_clock_gettime(clock, ts);
65693c819fSH. Peter Anvin }
66693c819fSH. Peter Anvin 
67693c819fSH. Peter Anvin int clock_gettime64(clockid_t, struct __kernel_timespec *)
68693c819fSH. Peter Anvin 	__attribute__((weak, alias("__vdso_clock_gettime64")));
69693c819fSH. Peter Anvin 
70693c819fSH. Peter Anvin int __vdso_clock_getres(clockid_t clock, struct old_timespec32 *res)
71693c819fSH. Peter Anvin {
72693c819fSH. Peter Anvin 	return __cvdso_clock_getres_time32(clock, res);
73693c819fSH. Peter Anvin }
74693c819fSH. Peter Anvin 
75693c819fSH. Peter Anvin int clock_getres(clockid_t, struct old_timespec32 *)
76693c819fSH. Peter Anvin 	__attribute__((weak, alias("__vdso_clock_getres")));
77*6f7e6393SLinus Torvalds 
78*6f7e6393SLinus Torvalds int __vdso_clock_getres_time64(clockid_t clock, struct __kernel_timespec *ts)
79*6f7e6393SLinus Torvalds {
80*6f7e6393SLinus Torvalds 	return __cvdso_clock_getres(clock, ts);
81*6f7e6393SLinus Torvalds }
82*6f7e6393SLinus Torvalds 
83*6f7e6393SLinus Torvalds int clock_getres_time64(clockid_t, struct __kernel_timespec *)
84*6f7e6393SLinus Torvalds 	__attribute__((weak, alias("__vdso_clock_getres_time64")));
85693c819fSH. Peter Anvin #endif
86