blob: 0d905d8ec553fae64d5dd16f8669b46795c7b2be [file] [log] [blame]
Mark Rutland2ecc53d2016-10-19 19:28:12 +01001/*
2 * Common syscall restarting data
3 */
4#ifndef __LINUX_RESTART_BLOCK_H
5#define __LINUX_RESTART_BLOCK_H
6
7#include <linux/compiler.h>
8#include <linux/types.h>
9
10struct timespec;
11struct compat_timespec;
12struct pollfd;
13
14/*
15 * System call restart block.
16 */
17struct restart_block {
18 long (*fn)(struct restart_block *);
19 union {
20 /* For futex_wait and futex_wait_requeue_pi */
21 struct {
22 u32 __user *uaddr;
23 u32 val;
24 u32 flags;
25 u32 bitset;
26 u64 time;
27 u32 __user *uaddr2;
28 } futex;
29 /* For nanosleep */
30 struct {
31 clockid_t clockid;
32 struct timespec __user *rmtp;
33#ifdef CONFIG_COMPAT
34 struct compat_timespec __user *compat_rmtp;
35#endif
36 u64 expires;
37 } nanosleep;
38 /* For poll */
39 struct {
40 struct pollfd __user *ufds;
41 int nfds;
42 int has_timeout;
43 unsigned long tv_sec;
44 unsigned long tv_nsec;
45 } poll;
46 };
47};
48
49extern long do_no_restart_syscall(struct restart_block *parm);
50
51#endif /* __LINUX_RESTART_BLOCK_H */