|  | // SPDX-License-Identifier: GPL-2.0 | 
|  |  | 
|  | struct io_sq_data { | 
|  | refcount_t		refs; | 
|  | atomic_t		park_pending; | 
|  | struct mutex		lock; | 
|  |  | 
|  | /* ctx's that are using this sqd */ | 
|  | struct list_head	ctx_list; | 
|  |  | 
|  | struct task_struct	*thread; | 
|  | struct wait_queue_head	wait; | 
|  |  | 
|  | unsigned		sq_thread_idle; | 
|  | int			sq_cpu; | 
|  | pid_t			task_pid; | 
|  | pid_t			task_tgid; | 
|  |  | 
|  | unsigned long		state; | 
|  | struct completion	exited; | 
|  | }; | 
|  |  | 
|  | int io_sq_offload_create(struct io_ring_ctx *ctx, struct io_uring_params *p); | 
|  | void io_sq_thread_finish(struct io_ring_ctx *ctx); | 
|  | void io_sq_thread_stop(struct io_sq_data *sqd); | 
|  | void io_sq_thread_park(struct io_sq_data *sqd); | 
|  | void io_sq_thread_unpark(struct io_sq_data *sqd); | 
|  | void io_put_sq_data(struct io_sq_data *sqd); | 
|  | int io_sqpoll_wait_sq(struct io_ring_ctx *ctx); |