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 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