1 // SPDX-License-Identifier: GPL-2.0
5 #define IO_NODE_ALLOC_CACHE_MAX 32
7 #define IO_RSRC_TAG_TABLE_SHIFT (PAGE_SHIFT - 3)
8 #define IO_RSRC_TAG_TABLE_MAX (1U << IO_RSRC_TAG_TABLE_SHIFT)
9 #define IO_RSRC_TAG_TABLE_MASK (IO_RSRC_TAG_TABLE_MAX - 1)
13 IORING_RSRC_BUFFER
= 1,
21 struct io_mapped_ubuf
*buf
;
26 struct io_ring_ctx
*ctx
;
35 struct io_ring_ctx
*ctx
;
39 struct list_head node
;
40 struct io_rsrc_put item
;
43 struct io_mapped_ubuf
{
46 unsigned int nr_bvecs
;
47 unsigned int folio_shift
;
49 unsigned long acct_pages
;
50 struct bio_vec bvec
[] __counted_by(nr_bvecs
);
53 struct io_imu_folio_data
{
54 /* Head folio can be partially included in the fixed buf */
55 unsigned int nr_pages_head
;
56 /* For non-head/tail folios, has to be fully included */
57 unsigned int nr_pages_mid
;
58 unsigned int folio_shift
;
61 void io_rsrc_node_ref_zero(struct io_rsrc_node
*node
);
62 void io_rsrc_node_destroy(struct io_ring_ctx
*ctx
, struct io_rsrc_node
*ref_node
);
63 struct io_rsrc_node
*io_rsrc_node_alloc(struct io_ring_ctx
*ctx
);
64 int io_queue_rsrc_removal(struct io_rsrc_data
*data
, unsigned idx
, void *rsrc
);
66 int io_import_fixed(int ddir
, struct iov_iter
*iter
,
67 struct io_mapped_ubuf
*imu
,
68 u64 buf_addr
, size_t len
);
70 int io_register_clone_buffers(struct io_ring_ctx
*ctx
, void __user
*arg
);
71 void __io_sqe_buffers_unregister(struct io_ring_ctx
*ctx
);
72 int io_sqe_buffers_unregister(struct io_ring_ctx
*ctx
);
73 int io_sqe_buffers_register(struct io_ring_ctx
*ctx
, void __user
*arg
,
74 unsigned int nr_args
, u64 __user
*tags
);
75 void __io_sqe_files_unregister(struct io_ring_ctx
*ctx
);
76 int io_sqe_files_unregister(struct io_ring_ctx
*ctx
);
77 int io_sqe_files_register(struct io_ring_ctx
*ctx
, void __user
*arg
,
78 unsigned nr_args
, u64 __user
*tags
);
80 int io_register_files_update(struct io_ring_ctx
*ctx
, void __user
*arg
,
82 int io_register_rsrc_update(struct io_ring_ctx
*ctx
, void __user
*arg
,
83 unsigned size
, unsigned type
);
84 int io_register_rsrc(struct io_ring_ctx
*ctx
, void __user
*arg
,
85 unsigned int size
, unsigned int type
);
87 static inline void io_put_rsrc_node(struct io_ring_ctx
*ctx
, struct io_rsrc_node
*node
)
89 lockdep_assert_held(&ctx
->uring_lock
);
91 if (node
&& !--node
->refs
)
92 io_rsrc_node_ref_zero(node
);
95 static inline void io_charge_rsrc_node(struct io_ring_ctx
*ctx
,
96 struct io_rsrc_node
*node
)
101 static inline void __io_req_set_rsrc_node(struct io_kiocb
*req
,
102 struct io_ring_ctx
*ctx
)
104 lockdep_assert_held(&ctx
->uring_lock
);
105 req
->rsrc_node
= ctx
->rsrc_node
;
106 io_charge_rsrc_node(ctx
, ctx
->rsrc_node
);
109 static inline void io_req_set_rsrc_node(struct io_kiocb
*req
,
110 struct io_ring_ctx
*ctx
,
111 unsigned int issue_flags
)
113 if (!req
->rsrc_node
) {
114 io_ring_submit_lock(ctx
, issue_flags
);
115 __io_req_set_rsrc_node(req
, ctx
);
116 io_ring_submit_unlock(ctx
, issue_flags
);
120 static inline u64
*io_get_tag_slot(struct io_rsrc_data
*data
, unsigned int idx
)
122 unsigned int off
= idx
& IO_RSRC_TAG_TABLE_MASK
;
123 unsigned int table_idx
= idx
>> IO_RSRC_TAG_TABLE_SHIFT
;
125 return &data
->tags
[table_idx
][off
];
128 static inline int io_rsrc_init(struct io_ring_ctx
*ctx
)
130 ctx
->rsrc_node
= io_rsrc_node_alloc(ctx
);
131 return ctx
->rsrc_node
? 0 : -ENOMEM
;
134 int io_files_update(struct io_kiocb
*req
, unsigned int issue_flags
);
135 int io_files_update_prep(struct io_kiocb
*req
, const struct io_uring_sqe
*sqe
);
137 int __io_account_mem(struct user_struct
*user
, unsigned long nr_pages
);
139 static inline void __io_unaccount_mem(struct user_struct
*user
,
140 unsigned long nr_pages
)
142 atomic_long_sub(nr_pages
, &user
->locked_vm
);