xref: /linux-6.15/include/linux/signalfd.h (revision 1795cf48)
1 /*
2  *  include/linux/signalfd.h
3  *
4  *  Copyright (C) 2007  Davide Libenzi <[email protected]>
5  *
6  */
7 
8 #ifndef _LINUX_SIGNALFD_H
9 #define _LINUX_SIGNALFD_H
10 
11 /* For O_CLOEXEC and O_NONBLOCK */
12 #include <linux/fcntl.h>
13 
14 /* Flags for signalfd4.  */
15 #define SFD_CLOEXEC O_CLOEXEC
16 #define SFD_NONBLOCK O_NONBLOCK
17 
18 struct signalfd_siginfo {
19 	__u32 ssi_signo;
20 	__s32 ssi_errno;
21 	__s32 ssi_code;
22 	__u32 ssi_pid;
23 	__u32 ssi_uid;
24 	__s32 ssi_fd;
25 	__u32 ssi_tid;
26 	__u32 ssi_band;
27 	__u32 ssi_overrun;
28 	__u32 ssi_trapno;
29 	__s32 ssi_status;
30 	__s32 ssi_int;
31 	__u64 ssi_ptr;
32 	__u64 ssi_utime;
33 	__u64 ssi_stime;
34 	__u64 ssi_addr;
35 
36 	/*
37 	 * Pad strcture to 128 bytes. Remember to update the
38 	 * pad size when you add new members. We use a fixed
39 	 * size structure to avoid compatibility problems with
40 	 * future versions, and we leave extra space for additional
41 	 * members. We use fixed size members because this strcture
42 	 * comes out of a read(2) and we really don't want to have
43 	 * a compat on read(2).
44 	 */
45 	__u8 __pad[48];
46 };
47 
48 
49 #ifdef __KERNEL__
50 
51 #ifdef CONFIG_SIGNALFD
52 
53 /*
54  * Deliver the signal to listening signalfd.
55  */
56 static inline void signalfd_notify(struct task_struct *tsk, int sig)
57 {
58 	if (unlikely(waitqueue_active(&tsk->sighand->signalfd_wqh)))
59 		wake_up(&tsk->sighand->signalfd_wqh);
60 }
61 
62 #else /* CONFIG_SIGNALFD */
63 
64 static inline void signalfd_notify(struct task_struct *tsk, int sig) { }
65 
66 #endif /* CONFIG_SIGNALFD */
67 
68 #endif /* __KERNEL__ */
69 
70 #endif /* _LINUX_SIGNALFD_H */
71 
72