Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  * Common syscall restarting data
0004  */
0005 #ifndef __LINUX_RESTART_BLOCK_H
0006 #define __LINUX_RESTART_BLOCK_H
0007 
0008 #include <linux/compiler.h>
0009 #include <linux/types.h>
0010 #include <linux/time64.h>
0011 
0012 struct timespec;
0013 struct old_timespec32;
0014 struct pollfd;
0015 
0016 enum timespec_type {
0017     TT_NONE     = 0,
0018     TT_NATIVE   = 1,
0019     TT_COMPAT   = 2,
0020 };
0021 
0022 /*
0023  * System call restart block.
0024  */
0025 struct restart_block {
0026     unsigned long arch_data;
0027     long (*fn)(struct restart_block *);
0028     union {
0029         /* For futex_wait and futex_wait_requeue_pi */
0030         struct {
0031             u32 __user *uaddr;
0032             u32 val;
0033             u32 flags;
0034             u32 bitset;
0035             u64 time;
0036             u32 __user *uaddr2;
0037         } futex;
0038         /* For nanosleep */
0039         struct {
0040             clockid_t clockid;
0041             enum timespec_type type;
0042             union {
0043                 struct __kernel_timespec __user *rmtp;
0044                 struct old_timespec32 __user *compat_rmtp;
0045             };
0046             u64 expires;
0047         } nanosleep;
0048         /* For poll */
0049         struct {
0050             struct pollfd __user *ufds;
0051             int nfds;
0052             int has_timeout;
0053             unsigned long tv_sec;
0054             unsigned long tv_nsec;
0055         } poll;
0056     };
0057 };
0058 
0059 extern long do_no_restart_syscall(struct restart_block *parm);
0060 
0061 #endif /* __LINUX_RESTART_BLOCK_H */