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 12struct timespec; 13struct old_timespec32; 14struct pollfd; 15 16enum timespec_type { 17 TT_NONE = 0, 18 TT_NATIVE = 1, 19 TT_COMPAT = 2, 20}; 21 22/* 23 * System call restart block. 24 */ 25struct restart_block { 26 long (*fn)(struct restart_block *); 27 union { 28 /* For futex_wait and futex_wait_requeue_pi */ 29 struct { 30 u32 __user *uaddr; 31 u32 val; 32 u32 flags; 33 u32 bitset; 34 u64 time; 35 u32 __user *uaddr2; 36 } futex; 37 /* For nanosleep */ 38 struct { 39 clockid_t clockid; 40 enum timespec_type type; 41 union { 42 struct __kernel_timespec __user *rmtp; 43 struct old_timespec32 __user *compat_rmtp; 44 }; 45 u64 expires; 46 } nanosleep; 47 /* For poll */ 48 struct { 49 struct pollfd __user *ufds; 50 int nfds; 51 int has_timeout; 52 unsigned long tv_sec; 53 unsigned long tv_nsec; 54 } poll; 55 }; 56}; 57 58extern long do_no_restart_syscall(struct restart_block *parm); 59 60#endif /* __LINUX_RESTART_BLOCK_H */ 61