io_uring: add IORING_SETUP_SINGLE_ISSUER
[linux-2.6-microblaze.git] / io_uring / tctx.h
1 // SPDX-License-Identifier: GPL-2.0
2
3 /*
4  * Arbitrary limit, can be raised if need be
5  */
6 #define IO_RINGFD_REG_MAX 16
7
8 struct io_uring_task {
9         /* submission side */
10         int                     cached_refs;
11         struct xarray           xa;
12         struct wait_queue_head  wait;
13         const struct io_ring_ctx *last;
14         struct io_wq            *io_wq;
15         struct percpu_counter   inflight;
16         atomic_t                inflight_tracked;
17         atomic_t                in_idle;
18
19         spinlock_t              task_lock;
20         struct io_wq_work_list  task_list;
21         struct io_wq_work_list  prio_task_list;
22         struct callback_head    task_work;
23         bool                    task_running;
24
25         struct file             *registered_rings[IO_RINGFD_REG_MAX];
26 };
27
28 struct io_tctx_node {
29         struct list_head        ctx_node;
30         struct task_struct      *task;
31         struct io_ring_ctx      *ctx;
32 };
33
34 int io_uring_alloc_task_context(struct task_struct *task,
35                                 struct io_ring_ctx *ctx);
36 void io_uring_del_tctx_node(unsigned long index);
37 int __io_uring_add_tctx_node(struct io_ring_ctx *ctx, bool submitter);
38 void io_uring_clean_tctx(struct io_uring_task *tctx);
39
40 void io_uring_unreg_ringfd(void);
41 int io_ringfd_register(struct io_ring_ctx *ctx, void __user *__arg,
42                        unsigned nr_args);
43 int io_ringfd_unregister(struct io_ring_ctx *ctx, void __user *__arg,
44                          unsigned nr_args);
45
46 /*
47  * Note that this task has used io_uring. We use it for cancelation purposes.
48  */
49 static inline int io_uring_add_tctx_node(struct io_ring_ctx *ctx)
50 {
51         struct io_uring_task *tctx = current->io_uring;
52
53         if (likely(tctx && tctx->last == ctx))
54                 return 0;
55         return __io_uring_add_tctx_node(ctx, true);
56 }