LCOV - code coverage report
Current view: top level - io_uring - io-wq.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 8 0.0 %
Date: 2023-03-27 20:00:47 Functions: 0 2 0.0 %

          Line data    Source code
       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             : 
       7             : struct io_wq;
       8             : 
       9             : enum {
      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             : 
      18             : enum 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             : 
      24             : typedef struct io_wq_work *(free_work_fn)(struct io_wq_work *);
      25             : typedef void (io_wq_work_fn)(struct io_wq_work *);
      26             : 
      27             : struct io_wq_hash {
      28             :         refcount_t refs;
      29             :         unsigned long map;
      30             :         struct wait_queue_head wait;
      31             : };
      32             : 
      33           0 : static inline void io_wq_put_hash(struct io_wq_hash *hash)
      34             : {
      35           0 :         if (refcount_dec_and_test(&hash->refs))
      36           0 :                 kfree(hash);
      37           0 : }
      38             : 
      39             : struct 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             : 
      46             : struct io_wq *io_wq_create(unsigned bounded, struct io_wq_data *data);
      47             : void io_wq_exit_start(struct io_wq *wq);
      48             : void io_wq_put_and_exit(struct io_wq *wq);
      49             : 
      50             : void io_wq_enqueue(struct io_wq *wq, struct io_wq_work *work);
      51             : void io_wq_hash_work(struct io_wq_work *work, void *val);
      52             : 
      53             : int io_wq_cpu_affinity(struct io_wq *wq, cpumask_var_t mask);
      54             : int io_wq_max_workers(struct io_wq *wq, int *new_count);
      55             : 
      56             : static inline bool io_wq_is_hashed(struct io_wq_work *work)
      57             : {
      58           0 :         return work->flags & IO_WQ_WORK_HASHED;
      59             : }
      60             : 
      61             : typedef bool (work_cancel_fn)(struct io_wq_work *, void *);
      62             : 
      63             : enum 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)
      67             : extern void io_wq_worker_sleeping(struct task_struct *);
      68             : extern void io_wq_worker_running(struct task_struct *);
      69             : #else
      70             : static inline void io_wq_worker_sleeping(struct task_struct *tsk)
      71             : {
      72             : }
      73             : static inline void io_wq_worker_running(struct task_struct *tsk)
      74             : {
      75             : }
      76             : #endif
      77             : 
      78           0 : static inline bool io_wq_current_is_worker(void)
      79             : {
      80           0 :         return in_task() && (current->flags & PF_IO_WORKER) &&
      81           0 :                 current->worker_private;
      82             : }
      83             : #endif

Generated by: LCOV version 1.14