linux/include/linux/restart_block.h
<<
>>
Prefs
   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