xref: /linux-6.15/include/linux/task_work.h (revision 68cbd415)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2e73f8959SOleg Nesterov #ifndef _LINUX_TASK_WORK_H
3e73f8959SOleg Nesterov #define _LINUX_TASK_WORK_H
4e73f8959SOleg Nesterov 
5e73f8959SOleg Nesterov #include <linux/list.h>
6e73f8959SOleg Nesterov #include <linux/sched.h>
7e73f8959SOleg Nesterov 
867d12145SAl Viro typedef void (*task_work_func_t)(struct callback_head *);
9e73f8959SOleg Nesterov 
10e73f8959SOleg Nesterov static inline void
1167d12145SAl Viro init_task_work(struct callback_head *twork, task_work_func_t func)
12e73f8959SOleg Nesterov {
13e73f8959SOleg Nesterov 	twork->func = func;
14e73f8959SOleg Nesterov }
15e73f8959SOleg Nesterov 
1691989c70SJens Axboe enum task_work_notify_mode {
1791989c70SJens Axboe 	TWA_NONE,
1891989c70SJens Axboe 	TWA_RESUME,
1991989c70SJens Axboe 	TWA_SIGNAL,
20e788be95SJens Axboe 	TWA_SIGNAL_NO_IPI,
2191989c70SJens Axboe };
2291989c70SJens Axboe 
237f62d40dSEric W. Biederman static inline bool task_work_pending(struct task_struct *task)
247f62d40dSEric W. Biederman {
257f62d40dSEric W. Biederman 	return READ_ONCE(task->task_works);
267f62d40dSEric W. Biederman }
277f62d40dSEric W. Biederman 
2891989c70SJens Axboe int task_work_add(struct task_struct *task, struct callback_head *twork,
2991989c70SJens Axboe 			enum task_work_notify_mode mode);
30e91b4816SOleg Nesterov 
31c7aab1a7SJens Axboe struct callback_head *task_work_cancel_match(struct task_struct *task,
32c7aab1a7SJens Axboe 	bool (*match)(struct callback_head *, void *data), void *data);
33*68cbd415SFrederic Weisbecker struct callback_head *task_work_cancel_func(struct task_struct *, task_work_func_t);
34e73f8959SOleg Nesterov void task_work_run(void);
35e73f8959SOleg Nesterov 
36e73f8959SOleg Nesterov static inline void exit_task_work(struct task_struct *task)
37e73f8959SOleg Nesterov {
38e73f8959SOleg Nesterov 	task_work_run();
39e73f8959SOleg Nesterov }
40e73f8959SOleg Nesterov 
41e73f8959SOleg Nesterov #endif	/* _LINUX_TASK_WORK_H */
42