mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-14 16:23:51 +08:00
c7aab1a7c5
The only exported helper we have right now is task_work_cancel(), which cancels any task_work from a given task where func matches the queued work item. This is a bit too coarse for some use cases. Add a task_work_cancel_match() that allows to more specifically target individual work items outside of purely the callback function used. task_work_cancel() can be trivially implemented on top of that, hence do so. Reviewed-by: Oleg Nesterov <oleg@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
36 lines
854 B
C
36 lines
854 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _LINUX_TASK_WORK_H
|
|
#define _LINUX_TASK_WORK_H
|
|
|
|
#include <linux/list.h>
|
|
#include <linux/sched.h>
|
|
|
|
typedef void (*task_work_func_t)(struct callback_head *);
|
|
|
|
static inline void
|
|
init_task_work(struct callback_head *twork, task_work_func_t func)
|
|
{
|
|
twork->func = func;
|
|
}
|
|
|
|
enum task_work_notify_mode {
|
|
TWA_NONE,
|
|
TWA_RESUME,
|
|
TWA_SIGNAL,
|
|
};
|
|
|
|
int task_work_add(struct task_struct *task, struct callback_head *twork,
|
|
enum task_work_notify_mode mode);
|
|
|
|
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);
|
|
void task_work_run(void);
|
|
|
|
static inline void exit_task_work(struct task_struct *task)
|
|
{
|
|
task_work_run();
|
|
}
|
|
|
|
#endif /* _LINUX_TASK_WORK_H */
|