at v4.16 63 lines 1.1 kB view raw
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 11struct timespec; 12struct compat_timespec; 13struct pollfd; 14 15enum timespec_type { 16 TT_NONE = 0, 17 TT_NATIVE = 1, 18#ifdef CONFIG_COMPAT 19 TT_COMPAT = 2, 20#endif 21}; 22 23/* 24 * System call restart block. 25 */ 26struct restart_block { 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 timespec __user *rmtp; 44#ifdef CONFIG_COMPAT 45 struct compat_timespec __user *compat_rmtp; 46#endif 47 }; 48 u64 expires; 49 } nanosleep; 50 /* For poll */ 51 struct { 52 struct pollfd __user *ufds; 53 int nfds; 54 int has_timeout; 55 unsigned long tv_sec; 56 unsigned long tv_nsec; 57 } poll; 58 }; 59}; 60 61extern long do_no_restart_syscall(struct restart_block *parm); 62 63#endif /* __LINUX_RESTART_BLOCK_H */