Extract a task_work_notify() helper from task_work_add(), so we can use it in the future. Signed-off-by: Pavel Begunkov <asml.silence@xxxxxxxxx> --- include/linux/task_work.h | 3 +++ kernel/task_work.c | 33 +++++++++++++++++++-------------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/include/linux/task_work.h b/include/linux/task_work.h index 897494b597ba..0c5fc557ecd9 100644 --- a/include/linux/task_work.h +++ b/include/linux/task_work.h @@ -27,6 +27,9 @@ static inline bool task_work_pending(struct task_struct *task) int task_work_add(struct task_struct *task, struct callback_head *twork, enum task_work_notify_mode mode); +void task_work_notify(struct task_struct *task, + enum task_work_notify_mode notify); + struct callback_head *task_work_cancel_match(struct task_struct *task, bool (*match)(struct callback_head *, void *data), void *data); struct callback_head *task_work_cancel(struct task_struct *, task_work_func_t); diff --git a/kernel/task_work.c b/kernel/task_work.c index c59e1a49bc40..cce8a7ca228f 100644 --- a/kernel/task_work.c +++ b/kernel/task_work.c @@ -5,6 +5,24 @@ static struct callback_head work_exited; /* all we need is ->next == NULL */ +void task_work_notify(struct task_struct *task, + enum task_work_notify_mode notify) +{ + switch (notify) { + case TWA_NONE: + break; + case TWA_RESUME: + set_notify_resume(task); + break; + case TWA_SIGNAL: + set_notify_signal(task); + break; + default: + WARN_ON_ONCE(1); + break; + } +} + /** * task_work_add - ask the @task to execute @work->func() * @task: the task which should run the callback @@ -44,20 +62,7 @@ int task_work_add(struct task_struct *task, struct callback_head *work, work->next = head; } while (cmpxchg(&task->task_works, head, work) != head); - switch (notify) { - case TWA_NONE: - break; - case TWA_RESUME: - set_notify_resume(task); - break; - case TWA_SIGNAL: - set_notify_signal(task); - break; - default: - WARN_ON_ONCE(1); - break; - } - + task_work_notify(task, notify); return 0; } -- 2.36.0