Merge tags 'compiler-attributes-for-linus-v5.0-rc3' and 'clang-format-for-linus-v5...
[sfrench/cifs-2.6.git] / include / linux / restart_block.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Common syscall restarting data
4  */
5 #ifndef __LINUX_RESTART_BLOCK_H
6 #define __LINUX_RESTART_BLOCK_H
7
8 #include <linux/compiler.h>
9 #include <linux/types.h>
10 #include <linux/time64.h>
11
12 struct timespec;
13 struct old_timespec32;
14 struct pollfd;
15
16 enum timespec_type {
17         TT_NONE         = 0,
18         TT_NATIVE       = 1,
19         TT_COMPAT       = 2,
20 };
21
22 /*
23  * System call restart block.
24  */
25 struct restart_block {
26         long (*fn)(struct restart_block *);
27         union {
28                 /* For futex_wait and futex_wait_requeue_pi */
29                 struct {
30                         u32 __user *uaddr;
31                         u32 val;
32                         u32 flags;
33                         u32 bitset;
34                         u64 time;
35                         u32 __user *uaddr2;
36                 } futex;
37                 /* For nanosleep */
38                 struct {
39                         clockid_t clockid;
40                         enum timespec_type type;
41                         union {
42                                 struct __kernel_timespec __user *rmtp;
43                                 struct old_timespec32 __user *compat_rmtp;
44                         };
45                         u64 expires;
46                 } nanosleep;
47                 /* For poll */
48                 struct {
49                         struct pollfd __user *ufds;
50                         int nfds;
51                         int has_timeout;
52                         unsigned long tv_sec;
53                         unsigned long tv_nsec;
54                 } poll;
55         };
56 };
57
58 extern long do_no_restart_syscall(struct restart_block *parm);
59
60 #endif /* __LINUX_RESTART_BLOCK_H */