diff options
Diffstat (limited to 'include/linux/task_work.h')
-rw-r--r-- | include/linux/task_work.h | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/include/linux/task_work.h b/include/linux/task_work.h index 294d5d5e90b1..fb46b03b1852 100644 --- a/include/linux/task_work.h +++ b/include/linux/task_work.h | |||
@@ -4,29 +4,21 @@ | |||
4 | #include <linux/list.h> | 4 | #include <linux/list.h> |
5 | #include <linux/sched.h> | 5 | #include <linux/sched.h> |
6 | 6 | ||
7 | struct task_work; | 7 | typedef void (*task_work_func_t)(struct callback_head *); |
8 | typedef void (*task_work_func_t)(struct task_work *); | ||
9 | |||
10 | struct task_work { | ||
11 | struct hlist_node hlist; | ||
12 | task_work_func_t func; | ||
13 | void *data; | ||
14 | }; | ||
15 | 8 | ||
16 | static inline void | 9 | static inline void |
17 | init_task_work(struct task_work *twork, task_work_func_t func, void *data) | 10 | init_task_work(struct callback_head *twork, task_work_func_t func) |
18 | { | 11 | { |
19 | twork->func = func; | 12 | twork->func = func; |
20 | twork->data = data; | ||
21 | } | 13 | } |
22 | 14 | ||
23 | int task_work_add(struct task_struct *task, struct task_work *twork, bool); | 15 | int task_work_add(struct task_struct *task, struct callback_head *twork, bool); |
24 | struct task_work *task_work_cancel(struct task_struct *, task_work_func_t); | 16 | struct callback_head *task_work_cancel(struct task_struct *, task_work_func_t); |
25 | void task_work_run(void); | 17 | void task_work_run(void); |
26 | 18 | ||
27 | static inline void exit_task_work(struct task_struct *task) | 19 | static inline void exit_task_work(struct task_struct *task) |
28 | { | 20 | { |
29 | if (unlikely(!hlist_empty(&task->task_works))) | 21 | if (unlikely(task->task_works)) |
30 | task_work_run(); | 22 | task_work_run(); |
31 | } | 23 | } |
32 | 24 | ||