2 * This file and its contents are supplied under the terms of the
3 * Common Development and Distribution License ("CDDL"), version 1.0.
4 * You may only use this file in accordance with the terms of version
7 * A full copy of the text of the CDDL should have accompanied this
8 * source. A copy of the CDDL is also available via the Internet at
9 * http://www.illumos.org/license/CDDL.
13 * Copyright 2016 Joyent, Inc.
17 * Header file to support the signalfd facility. Note that this facility
18 * is designed to be binary compatible with the Linux signalfd facility, modulo
19 * the signals themselves; values for constants here should therefore exactly
20 * match those found in Linux, and this facility shouldn't be extended
21 * independently of Linux.
24 #ifndef _SYS_SIGNALFD_H
25 #define _SYS_SIGNALFD_H
27 #include <sys/types.h>
34 * To assure binary compatibility with Linux, these values are fixed at their
35 * Linux equivalents, not their native ones.
37 #define SFD_CLOEXEC 02000000 /* LX_O_CLOEXEC */
38 #define SFD_NONBLOCK 04000 /* LX_O_NONBLOCK */
41 * These ioctl values are specific to the native implementation; applications
42 * shouldn't be using them directly, and they should therefore be safe to
43 * change without breaking apps.
45 #define SIGNALFDIOC (('s' << 24) | ('f' << 16) | ('d' << 8))
46 #define SIGNALFDIOC_MASK (SIGNALFDIOC | 1) /* set mask */
48 typedef struct signalfd_siginfo
{
49 uint32_t ssi_signo
; /* signal from signal.h */
50 int32_t ssi_errno
; /* error from errno.h */
51 int32_t ssi_code
; /* signal code */
52 uint32_t ssi_pid
; /* PID of sender */
53 uint32_t ssi_uid
; /* real UID of sender */
54 int32_t ssi_fd
; /* File descriptor (SIGIO) */
55 uint32_t ssi_tid
; /* unused */
56 uint32_t ssi_band
; /* band event (SIGIO) */
57 uint32_t ssi_overrun
; /* unused */
58 uint32_t ssi_trapno
; /* trap number that caused signal */
59 int32_t ssi_status
; /* exit status or signal (SIGCHLD) */
60 int32_t ssi_int
; /* unused */
61 uint64_t ssi_ptr
; /* unused */
62 uint64_t ssi_utime
; /* user CPU time consumed (SIGCHLD) */
63 uint64_t ssi_stime
; /* system CPU time consumed (SIGCHLD) */
64 uint64_t ssi_addr
; /* address that generated signal */
65 uint8_t ssi_pad
[48]; /* Pad size to 128 bytes to allow for */
66 /* additional fields in the future. */
71 extern int signalfd(int, const sigset_t
*, int);
75 #define SIGNALFDMNRN_SIGNALFD 0
76 #define SIGNALFDMNRN_CLONE 1
79 * This holds the proc_t state for a process which is using signalfd.
80 * Its presence and contents are protected by p_lock.
82 typedef struct sigfd_proc_state
{
83 void (*sigfd_pollwake_cb
)(void *, int);
88 extern void (*sigfd_exit_helper
)();
96 #endif /* _SYS_SIGNALFD_H */