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        unsigned long arch_data;
  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 __kernel_timespec __user *rmtp;
  44                                struct old_timespec32 __user *compat_rmtp;
  45                        };
  46                        u64 expires;
  47                } nanosleep;
  48                /* For poll */
  49                struct {
  50                        struct pollfd __user *ufds;
  51                        int nfds;
  52                        int has_timeout;
  53                        unsigned long tv_sec;
  54                        unsigned long tv_nsec;
  55                } poll;
  56        };
  57};
  58
  59extern long do_no_restart_syscall(struct restart_block *parm);
  60
  61#endif /* __LINUX_RESTART_BLOCK_H */
  62