1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 253d74d05SMark Rutland /* 353d74d05SMark Rutland * Common syscall restarting data 453d74d05SMark Rutland */ 553d74d05SMark Rutland #ifndef __LINUX_RESTART_BLOCK_H 653d74d05SMark Rutland #define __LINUX_RESTART_BLOCK_H 753d74d05SMark Rutland 853d74d05SMark Rutland #include <linux/compiler.h> 953d74d05SMark Rutland #include <linux/types.h> 1053d74d05SMark Rutland 11*cba6167fSKent Overstreet struct __kernel_timespec; 1253d74d05SMark Rutland struct timespec; 139afc5eeeSArnd Bergmann struct old_timespec32; 1453d74d05SMark Rutland struct pollfd; 1553d74d05SMark Rutland 16edbeda46SAl Viro enum timespec_type { 17edbeda46SAl Viro TT_NONE = 0, 18edbeda46SAl Viro TT_NATIVE = 1, 19edbeda46SAl Viro TT_COMPAT = 2, 20edbeda46SAl Viro }; 21edbeda46SAl Viro 2253d74d05SMark Rutland /* 2353d74d05SMark Rutland * System call restart block. 2453d74d05SMark Rutland */ 2553d74d05SMark Rutland struct restart_block { 26b2e9df85SOleg Nesterov unsigned long arch_data; 2753d74d05SMark Rutland long (*fn)(struct restart_block *); 2853d74d05SMark Rutland union { 2953d74d05SMark Rutland /* For futex_wait and futex_wait_requeue_pi */ 3053d74d05SMark Rutland struct { 3153d74d05SMark Rutland u32 __user *uaddr; 3253d74d05SMark Rutland u32 val; 3353d74d05SMark Rutland u32 flags; 3453d74d05SMark Rutland u32 bitset; 3553d74d05SMark Rutland u64 time; 3653d74d05SMark Rutland u32 __user *uaddr2; 3753d74d05SMark Rutland } futex; 3853d74d05SMark Rutland /* For nanosleep */ 3953d74d05SMark Rutland struct { 4053d74d05SMark Rutland clockid_t clockid; 41edbeda46SAl Viro enum timespec_type type; 42edbeda46SAl Viro union { 4301909974SDeepa Dinamani struct __kernel_timespec __user *rmtp; 449afc5eeeSArnd Bergmann struct old_timespec32 __user *compat_rmtp; 45edbeda46SAl Viro }; 4653d74d05SMark Rutland u64 expires; 4753d74d05SMark Rutland } nanosleep; 4853d74d05SMark Rutland /* For poll */ 4953d74d05SMark Rutland struct { 5053d74d05SMark Rutland struct pollfd __user *ufds; 5153d74d05SMark Rutland int nfds; 5253d74d05SMark Rutland int has_timeout; 5353d74d05SMark Rutland unsigned long tv_sec; 5453d74d05SMark Rutland unsigned long tv_nsec; 5553d74d05SMark Rutland } poll; 5653d74d05SMark Rutland }; 5753d74d05SMark Rutland }; 5853d74d05SMark Rutland 5953d74d05SMark Rutland extern long do_no_restart_syscall(struct restart_block *parm); 6053d74d05SMark Rutland 6153d74d05SMark Rutland #endif /* __LINUX_RESTART_BLOCK_H */ 62