Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v6.2-rc7 83 lines 2.1 kB view raw
1#ifndef INTERNAL_IO_WQ_H 2#define INTERNAL_IO_WQ_H 3 4#include <linux/refcount.h> 5#include <linux/io_uring_types.h> 6 7struct io_wq; 8 9enum { 10 IO_WQ_WORK_CANCEL = 1, 11 IO_WQ_WORK_HASHED = 2, 12 IO_WQ_WORK_UNBOUND = 4, 13 IO_WQ_WORK_CONCURRENT = 16, 14 15 IO_WQ_HASH_SHIFT = 24, /* upper 8 bits are used for hash key */ 16}; 17 18enum io_wq_cancel { 19 IO_WQ_CANCEL_OK, /* cancelled before started */ 20 IO_WQ_CANCEL_RUNNING, /* found, running, and attempted cancelled */ 21 IO_WQ_CANCEL_NOTFOUND, /* work not found */ 22}; 23 24typedef struct io_wq_work *(free_work_fn)(struct io_wq_work *); 25typedef void (io_wq_work_fn)(struct io_wq_work *); 26 27struct io_wq_hash { 28 refcount_t refs; 29 unsigned long map; 30 struct wait_queue_head wait; 31}; 32 33static inline void io_wq_put_hash(struct io_wq_hash *hash) 34{ 35 if (refcount_dec_and_test(&hash->refs)) 36 kfree(hash); 37} 38 39struct io_wq_data { 40 struct io_wq_hash *hash; 41 struct task_struct *task; 42 io_wq_work_fn *do_work; 43 free_work_fn *free_work; 44}; 45 46struct io_wq *io_wq_create(unsigned bounded, struct io_wq_data *data); 47void io_wq_exit_start(struct io_wq *wq); 48void io_wq_put_and_exit(struct io_wq *wq); 49 50void io_wq_enqueue(struct io_wq *wq, struct io_wq_work *work); 51void io_wq_hash_work(struct io_wq_work *work, void *val); 52 53int io_wq_cpu_affinity(struct io_wq *wq, cpumask_var_t mask); 54int io_wq_max_workers(struct io_wq *wq, int *new_count); 55 56static inline bool io_wq_is_hashed(struct io_wq_work *work) 57{ 58 return work->flags & IO_WQ_WORK_HASHED; 59} 60 61typedef bool (work_cancel_fn)(struct io_wq_work *, void *); 62 63enum io_wq_cancel io_wq_cancel_cb(struct io_wq *wq, work_cancel_fn *cancel, 64 void *data, bool cancel_all); 65 66#if defined(CONFIG_IO_WQ) 67extern void io_wq_worker_sleeping(struct task_struct *); 68extern void io_wq_worker_running(struct task_struct *); 69#else 70static inline void io_wq_worker_sleeping(struct task_struct *tsk) 71{ 72} 73static inline void io_wq_worker_running(struct task_struct *tsk) 74{ 75} 76#endif 77 78static inline bool io_wq_current_is_worker(void) 79{ 80 return in_task() && (current->flags & PF_IO_WORKER) && 81 current->worker_private; 82} 83#endif