xref: /openbmc/linux/io_uring/tctx.h (revision 97c96e9f)
1c9f06aa7SJens Axboe // SPDX-License-Identifier: GPL-2.0
2c9f06aa7SJens Axboe 
3c9f06aa7SJens Axboe struct io_tctx_node {
4c9f06aa7SJens Axboe 	struct list_head	ctx_node;
5c9f06aa7SJens Axboe 	struct task_struct	*task;
6c9f06aa7SJens Axboe 	struct io_ring_ctx	*ctx;
7c9f06aa7SJens Axboe };
8c9f06aa7SJens Axboe 
9c9f06aa7SJens Axboe int io_uring_alloc_task_context(struct task_struct *task,
10c9f06aa7SJens Axboe 				struct io_ring_ctx *ctx);
11c9f06aa7SJens Axboe void io_uring_del_tctx_node(unsigned long index);
12*97c96e9fSDylan Yudaken int __io_uring_add_tctx_node(struct io_ring_ctx *ctx);
13*97c96e9fSDylan Yudaken int __io_uring_add_tctx_node_from_submit(struct io_ring_ctx *ctx);
14c9f06aa7SJens Axboe void io_uring_clean_tctx(struct io_uring_task *tctx);
15c9f06aa7SJens Axboe 
16c9f06aa7SJens Axboe void io_uring_unreg_ringfd(void);
17c9f06aa7SJens Axboe int io_ringfd_register(struct io_ring_ctx *ctx, void __user *__arg,
18c9f06aa7SJens Axboe 		       unsigned nr_args);
19c9f06aa7SJens Axboe int io_ringfd_unregister(struct io_ring_ctx *ctx, void __user *__arg,
20c9f06aa7SJens Axboe 			 unsigned nr_args);
21c9f06aa7SJens Axboe 
22c9f06aa7SJens Axboe /*
23c9f06aa7SJens Axboe  * Note that this task has used io_uring. We use it for cancelation purposes.
24c9f06aa7SJens Axboe  */
io_uring_add_tctx_node(struct io_ring_ctx * ctx)25c9f06aa7SJens Axboe static inline int io_uring_add_tctx_node(struct io_ring_ctx *ctx)
26c9f06aa7SJens Axboe {
27c9f06aa7SJens Axboe 	struct io_uring_task *tctx = current->io_uring;
28c9f06aa7SJens Axboe 
29c9f06aa7SJens Axboe 	if (likely(tctx && tctx->last == ctx))
30c9f06aa7SJens Axboe 		return 0;
31*97c96e9fSDylan Yudaken 
32*97c96e9fSDylan Yudaken 	return __io_uring_add_tctx_node_from_submit(ctx);
33c9f06aa7SJens Axboe }
34