]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - include/linux/time.h
[PATCH] hrtimer: validate timespec of do_sys_settimeofday
[mirror_ubuntu-bionic-kernel.git] / include / linux / time.h
CommitLineData
1da177e4
LT
1#ifndef _LINUX_TIME_H
2#define _LINUX_TIME_H
3
4#include <linux/types.h>
5
6#ifdef __KERNEL__
57a55875 7# include <linux/seqlock.h>
1da177e4
LT
8#endif
9
10#ifndef _STRUCT_TIMESPEC
11#define _STRUCT_TIMESPEC
12struct timespec {
13 time_t tv_sec; /* seconds */
14 long tv_nsec; /* nanoseconds */
15};
57a55875 16#endif
1da177e4
LT
17
18struct timeval {
19 time_t tv_sec; /* seconds */
20 suseconds_t tv_usec; /* microseconds */
21};
22
23struct timezone {
24 int tz_minuteswest; /* minutes west of Greenwich */
25 int tz_dsttime; /* type of dst correction */
26};
27
28#ifdef __KERNEL__
29
57a55875
IM
30/* Parameters used to convert the timespec values: */
31#define MSEC_PER_SEC 1000L
32#define USEC_PER_SEC 1000000L
33#define NSEC_PER_SEC 1000000000L
34#define NSEC_PER_USEC 1000L
1da177e4 35
57a55875
IM
36static __inline__ int timespec_equal(struct timespec *a, struct timespec *b)
37{
1da177e4 38 return (a->tv_sec == b->tv_sec) && (a->tv_nsec == b->tv_nsec);
57a55875 39}
1da177e4 40
f4818900
IM
41extern unsigned long mktime(const unsigned int year, const unsigned int mon,
42 const unsigned int day, const unsigned int hour,
43 const unsigned int min, const unsigned int sec);
44
45extern void set_normalized_timespec(struct timespec *ts, time_t sec, long nsec);
1da177e4 46
5f82b2b7
TG
47/*
48 * Returns true if the timespec is norm, false if denorm:
49 */
50#define timespec_valid(ts) \
51 (((ts)->tv_sec >= 0) && (((unsigned) (ts)->tv_nsec) < NSEC_PER_SEC))
52
1da177e4
LT
53extern struct timespec xtime;
54extern struct timespec wall_to_monotonic;
55extern seqlock_t xtime_lock;
56
57static inline unsigned long get_seconds(void)
57a55875 58{
1da177e4
LT
59 return xtime.tv_sec;
60}
61
62struct timespec current_kernel_time(void);
63
57a55875
IM
64#define CURRENT_TIME (current_kernel_time())
65#define CURRENT_TIME_SEC ((struct timespec) { xtime.tv_sec, 0 })
1da177e4
LT
66
67extern void do_gettimeofday(struct timeval *tv);
68extern int do_settimeofday(struct timespec *tv);
69extern int do_sys_settimeofday(struct timespec *tv, struct timezone *tz);
57a55875 70extern void clock_was_set(void); // call whenever the clock is set
1da177e4 71extern int do_posix_clock_monotonic_gettime(struct timespec *tp);
57a55875 72extern long do_utimes(char __user *filename, struct timeval *times);
1da177e4 73struct itimerval;
57a55875
IM
74extern int do_setitimer(int which, struct itimerval *value,
75 struct itimerval *ovalue);
1da177e4 76extern int do_getitimer(int which, struct itimerval *value);
57a55875 77extern void getnstimeofday(struct timespec *tv);
64123fd4 78extern void getnstimestamp(struct timespec *ts);
1da177e4
LT
79
80extern struct timespec timespec_trunc(struct timespec t, unsigned gran);
81
1da177e4
LT
82#endif /* __KERNEL__ */
83
84#define NFDBITS __NFDBITS
85
86#define FD_SETSIZE __FD_SETSIZE
87#define FD_SET(fd,fdsetp) __FD_SET(fd,fdsetp)
88#define FD_CLR(fd,fdsetp) __FD_CLR(fd,fdsetp)
89#define FD_ISSET(fd,fdsetp) __FD_ISSET(fd,fdsetp)
90#define FD_ZERO(fdsetp) __FD_ZERO(fdsetp)
91
92/*
93 * Names of the interval timers, and structure
57a55875 94 * defining a timer setting:
1da177e4 95 */
57a55875
IM
96#define ITIMER_REAL 0
97#define ITIMER_VIRTUAL 1
98#define ITIMER_PROF 2
1da177e4 99
57a55875
IM
100struct itimerspec {
101 struct timespec it_interval; /* timer period */
102 struct timespec it_value; /* timer expiration */
1da177e4
LT
103};
104
57a55875
IM
105struct itimerval {
106 struct timeval it_interval; /* timer interval */
107 struct timeval it_value; /* current value */
1da177e4
LT
108};
109
1da177e4 110/*
57a55875 111 * The IDs of the various system clocks (for POSIX.1b interval timers):
1da177e4 112 */
1ad106ca
IM
113#define CLOCK_REALTIME 0
114#define CLOCK_MONOTONIC 1
115#define CLOCK_PROCESS_CPUTIME_ID 2
116#define CLOCK_THREAD_CPUTIME_ID 3
1da177e4
LT
117
118/*
57a55875 119 * The IDs of various hardware clocks:
1da177e4 120 */
1ad106ca
IM
121#define CLOCK_SGI_CYCLE 10
122#define MAX_CLOCKS 16
123#define CLOCKS_MASK (CLOCK_REALTIME | CLOCK_MONOTONIC)
124#define CLOCKS_MONO CLOCK_MONOTONIC
1da177e4
LT
125
126/*
57a55875 127 * The various flags for setting POSIX.1b interval timers:
1da177e4 128 */
1ad106ca 129#define TIMER_ABSTIME 0x01
1da177e4
LT
130
131#endif