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