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  
11  struct __kernel_timespec;
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  	unsigned long arch_data;
27  	long (*fn)(struct restart_block *);
28  	union {
29  		/* For futex_wait and futex_wait_requeue_pi */
30  		struct {
31  			u32 __user *uaddr;
32  			u32 val;
33  			u32 flags;
34  			u32 bitset;
35  			u64 time;
36  			u32 __user *uaddr2;
37  		} futex;
38  		/* For nanosleep */
39  		struct {
40  			clockid_t clockid;
41  			enum timespec_type type;
42  			union {
43  				struct __kernel_timespec __user *rmtp;
44  				struct old_timespec32 __user *compat_rmtp;
45  			};
46  			u64 expires;
47  		} nanosleep;
48  		/* For poll */
49  		struct {
50  			struct pollfd __user *ufds;
51  			int nfds;
52  			int has_timeout;
53  			unsigned long tv_sec;
54  			unsigned long tv_nsec;
55  		} poll;
56  	};
57  };
58  
59  extern long do_no_restart_syscall(struct restart_block *parm);
60  
61  #endif /* __LINUX_RESTART_BLOCK_H */
62