1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #ifndef _LINUX_SCHED_JOBCTL_H |
3 | #define _LINUX_SCHED_JOBCTL_H |
4 | |
5 | #include <linux/types.h> |
6 | |
7 | struct task_struct; |
8 | |
9 | /* |
10 | * task->jobctl flags |
11 | */ |
12 | #define JOBCTL_STOP_SIGMASK 0xffff /* signr of the last group stop */ |
13 | |
14 | #define JOBCTL_STOP_DEQUEUED_BIT 16 /* stop signal dequeued */ |
15 | #define JOBCTL_STOP_PENDING_BIT 17 /* task should stop for group stop */ |
16 | #define JOBCTL_STOP_CONSUME_BIT 18 /* consume group stop count */ |
17 | #define JOBCTL_TRAP_STOP_BIT 19 /* trap for STOP */ |
18 | #define JOBCTL_TRAP_NOTIFY_BIT 20 /* trap for NOTIFY */ |
19 | #define JOBCTL_TRAPPING_BIT 21 /* switching to TRACED */ |
20 | #define JOBCTL_LISTENING_BIT 22 /* ptracer is listening for events */ |
21 | #define JOBCTL_TRAP_FREEZE_BIT 23 /* trap for cgroup freezer */ |
22 | #define JOBCTL_PTRACE_FROZEN_BIT 24 /* frozen for ptrace */ |
23 | |
24 | #define JOBCTL_STOPPED_BIT 26 /* do_signal_stop() */ |
25 | #define JOBCTL_TRACED_BIT 27 /* ptrace_stop() */ |
26 | |
27 | #define JOBCTL_STOP_DEQUEUED (1UL << JOBCTL_STOP_DEQUEUED_BIT) |
28 | #define JOBCTL_STOP_PENDING (1UL << JOBCTL_STOP_PENDING_BIT) |
29 | #define JOBCTL_STOP_CONSUME (1UL << JOBCTL_STOP_CONSUME_BIT) |
30 | #define JOBCTL_TRAP_STOP (1UL << JOBCTL_TRAP_STOP_BIT) |
31 | #define JOBCTL_TRAP_NOTIFY (1UL << JOBCTL_TRAP_NOTIFY_BIT) |
32 | #define JOBCTL_TRAPPING (1UL << JOBCTL_TRAPPING_BIT) |
33 | #define JOBCTL_LISTENING (1UL << JOBCTL_LISTENING_BIT) |
34 | #define JOBCTL_TRAP_FREEZE (1UL << JOBCTL_TRAP_FREEZE_BIT) |
35 | #define JOBCTL_PTRACE_FROZEN (1UL << JOBCTL_PTRACE_FROZEN_BIT) |
36 | |
37 | #define JOBCTL_STOPPED (1UL << JOBCTL_STOPPED_BIT) |
38 | #define JOBCTL_TRACED (1UL << JOBCTL_TRACED_BIT) |
39 | |
40 | #define JOBCTL_TRAP_MASK (JOBCTL_TRAP_STOP | JOBCTL_TRAP_NOTIFY) |
41 | #define JOBCTL_PENDING_MASK (JOBCTL_STOP_PENDING | JOBCTL_TRAP_MASK) |
42 | |
43 | extern bool task_set_jobctl_pending(struct task_struct *task, unsigned long mask); |
44 | extern void task_clear_jobctl_trapping(struct task_struct *task); |
45 | extern void task_clear_jobctl_pending(struct task_struct *task, unsigned long mask); |
46 | |
47 | #endif /* _LINUX_SCHED_JOBCTL_H */ |
48 | |