CC: [email protected] TO: Jens Axboe <[email protected]> tree: https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git poll-multiple head: 8e66ada09e9d0a91b360738c193bee581c1aa5ee commit: 8e66ada09e9d0a91b360738c193bee581c1aa5ee [25/25] io_uring: add multishot mode for IORING_OP_POLL_ADD :::::: branch date: 7 hours ago :::::: commit date: 7 hours ago config: riscv-randconfig-s032-20210223 (attached as .config) compiler: riscv64-linux-gcc (GCC) 9.3.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # apt-get install sparse # sparse version: v0.6.3-229-g60c1f270-dirty # https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git/commit/?id=8e66ada09e9d0a91b360738c193bee581c1aa5ee git remote add block https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git git fetch --no-tags block poll-multiple git checkout 8e66ada09e9d0a91b360738c193bee581c1aa5ee # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=riscv
If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> "sparse warnings: (new ones prefixed by >>)" fs/io_uring.c:2901:24: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void [noderef] __user * @@ got struct io_buffer *[assigned] kbuf @@ fs/io_uring.c:2901:24: sparse: expected void [noderef] __user * fs/io_uring.c:2901:24: sparse: got struct io_buffer *[assigned] kbuf fs/io_uring.c:4233:14: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct file *[assigned] file @@ got struct file [noderef] __rcu * @@ fs/io_uring.c:4233:14: sparse: expected struct file *[assigned] file fs/io_uring.c:4233:14: sparse: got struct file [noderef] __rcu * fs/io_uring.c:4842:72: sparse: sparse: incorrect type in argument 4 (different base types) @@ expected int mask @@ got restricted __poll_t [usertype] mask @@ fs/io_uring.c:4842:72: sparse: expected int mask fs/io_uring.c:4842:72: sparse: got restricted __poll_t [usertype] mask fs/io_uring.c:4847:21: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] result @@ got restricted __poll_t [usertype] mask @@ fs/io_uring.c:4847:21: sparse: expected unsigned int [usertype] result fs/io_uring.c:4847:21: sparse: got restricted __poll_t [usertype] mask fs/io_uring.c:4873:29: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] result @@ got restricted __poll_t @@ fs/io_uring.c:4873:29: sparse: expected unsigned int [usertype] result fs/io_uring.c:4873:29: sparse: got restricted __poll_t fs/io_uring.c:4953:49: sparse: sparse: incorrect type in argument 2 (different base types) @@ expected restricted __poll_t [usertype] mask @@ got unsigned int [usertype] result @@ fs/io_uring.c:4953:49: sparse: expected restricted __poll_t [usertype] mask fs/io_uring.c:4953:49: sparse: got unsigned int [usertype] result fs/io_uring.c:5096:41: sparse: sparse: incorrect type in argument 4 (different base types) @@ expected int mask @@ got restricted __poll_t [usertype] @@ fs/io_uring.c:5096:41: sparse: expected int mask fs/io_uring.c:5096:41: sparse: got restricted __poll_t [usertype] fs/io_uring.c:5184:22: sparse: sparse: invalid assignment: |= fs/io_uring.c:5184:22: sparse: left side has type restricted __poll_t fs/io_uring.c:5184:22: sparse: right side has type int fs/io_uring.c:5186:22: sparse: sparse: invalid assignment: |= fs/io_uring.c:5186:22: sparse: left side has type restricted __poll_t fs/io_uring.c:5186:22: sparse: right side has type int fs/io_uring.c:5191:22: sparse: sparse: invalid assignment: &= fs/io_uring.c:5191:22: sparse: left side has type restricted __poll_t fs/io_uring.c:5191:22: sparse: right side has type int fs/io_uring.c:5193:14: sparse: sparse: invalid assignment: |= fs/io_uring.c:5193:14: sparse: left side has type restricted __poll_t fs/io_uring.c:5193:14: sparse: right side has type int fs/io_uring.c:5207:67: sparse: sparse: incorrect type in argument 4 (different base types) @@ expected int mask @@ got restricted __poll_t [assigned] [usertype] mask @@ fs/io_uring.c:5207:67: sparse: expected int mask fs/io_uring.c:5207:67: sparse: got restricted __poll_t [assigned] [usertype] mask fs/io_uring.c:5208:52: sparse: sparse: incorrect type in argument 5 (different base types) @@ expected int events @@ got restricted __poll_t [usertype] events @@ fs/io_uring.c:5208:52: sparse: expected int events fs/io_uring.c:5208:52: sparse: got restricted __poll_t [usertype] events fs/io_uring.c:5369:24: sparse: sparse: invalid assignment: |= >> fs/io_uring.c:5369:24: sparse: left side has type unsigned int >> fs/io_uring.c:5369:24: sparse: right side has type restricted __poll_t fs/io_uring.c:5371:49: sparse: sparse: restricted __poll_t degrades to integer fs/io_uring.c:5370:57: sparse: sparse: restricted __poll_t degrades to integer fs/io_uring.c:5370:22: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __poll_t [usertype] events @@ got unsigned int @@ fs/io_uring.c:5370:22: sparse: expected restricted __poll_t [usertype] events fs/io_uring.c:5370:22: sparse: got unsigned int fs/io_uring.c:7112:13: sparse: sparse: context imbalance in 'io_sq_thread_unpark' - wrong count at exit fs/io_uring.c:7124:13: sparse: sparse: context imbalance in 'io_sq_thread_park' - wrong count at exit fs/io_uring.c:7177:17: sparse: sparse: context imbalance in 'io_sq_thread_finish' - different lock contexts for basic block fs/io_uring.c:8694:25: sparse: sparse: context imbalance in 'io_uring_cancel_files' - unexpected unlock fs/io_uring.c:8742:9: sparse: sparse: context imbalance in 'io_uring_cancel_task_requests' - different lock contexts for basic block fs/io_uring.c:8840:13: sparse: sparse: context imbalance in 'io_uring_cancel_sqpoll' - different lock contexts for basic block vim +5369 fs/io_uring.c d7718a9d25a614 Jens Axboe 2020-02-14 5150 d7718a9d25a614 Jens Axboe 2020-02-14 5151 static bool io_arm_poll_handler(struct io_kiocb *req) d7718a9d25a614 Jens Axboe 2020-02-14 5152 { d7718a9d25a614 Jens Axboe 2020-02-14 5153 const struct io_op_def *def = &io_op_defs[req->opcode]; d7718a9d25a614 Jens Axboe 2020-02-14 5154 struct io_ring_ctx *ctx = req->ctx; d7718a9d25a614 Jens Axboe 2020-02-14 5155 struct async_poll *apoll; d7718a9d25a614 Jens Axboe 2020-02-14 5156 struct io_poll_table ipt; d7718a9d25a614 Jens Axboe 2020-02-14 5157 __poll_t mask, ret; 9dab14b81807a4 Jens Axboe 2020-08-25 5158 int rw; d7718a9d25a614 Jens Axboe 2020-02-14 5159 d7718a9d25a614 Jens Axboe 2020-02-14 5160 if (!req->file || !file_can_poll(req->file)) d7718a9d25a614 Jens Axboe 2020-02-14 5161 return false; 24c74678634b3c Pavel Begunkov 2020-06-21 5162 if (req->flags & REQ_F_POLLED) d7718a9d25a614 Jens Axboe 2020-02-14 5163 return false; 9dab14b81807a4 Jens Axboe 2020-08-25 5164 if (def->pollin) 9dab14b81807a4 Jens Axboe 2020-08-25 5165 rw = READ; 9dab14b81807a4 Jens Axboe 2020-08-25 5166 else if (def->pollout) 9dab14b81807a4 Jens Axboe 2020-08-25 5167 rw = WRITE; 9dab14b81807a4 Jens Axboe 2020-08-25 5168 else 9dab14b81807a4 Jens Axboe 2020-08-25 5169 return false; 9dab14b81807a4 Jens Axboe 2020-08-25 5170 /* if we can't nonblock try, then no point in arming a poll handler */ 9dab14b81807a4 Jens Axboe 2020-08-25 5171 if (!io_file_supports_async(req->file, rw)) d7718a9d25a614 Jens Axboe 2020-02-14 5172 return false; d7718a9d25a614 Jens Axboe 2020-02-14 5173 d7718a9d25a614 Jens Axboe 2020-02-14 5174 apoll = kmalloc(sizeof(*apoll), GFP_ATOMIC); d7718a9d25a614 Jens Axboe 2020-02-14 5175 if (unlikely(!apoll)) d7718a9d25a614 Jens Axboe 2020-02-14 5176 return false; 807abcb0883439 Jens Axboe 2020-07-17 5177 apoll->double_poll = NULL; d7718a9d25a614 Jens Axboe 2020-02-14 5178 d7718a9d25a614 Jens Axboe 2020-02-14 5179 req->flags |= REQ_F_POLLED; d7718a9d25a614 Jens Axboe 2020-02-14 5180 req->apoll = apoll; d7718a9d25a614 Jens Axboe 2020-02-14 5181 8755d97a09fed0 Nathan Chancellor 2020-03-02 5182 mask = 0; d7718a9d25a614 Jens Axboe 2020-02-14 5183 if (def->pollin) 8755d97a09fed0 Nathan Chancellor 2020-03-02 5184 mask |= POLLIN | POLLRDNORM; d7718a9d25a614 Jens Axboe 2020-02-14 5185 if (def->pollout) d7718a9d25a614 Jens Axboe 2020-02-14 5186 mask |= POLLOUT | POLLWRNORM; 901341bb971888 Luke Hsiao 2020-08-21 5187 901341bb971888 Luke Hsiao 2020-08-21 5188 /* If reading from MSG_ERRQUEUE using recvmsg, ignore POLLIN */ 901341bb971888 Luke Hsiao 2020-08-21 5189 if ((req->opcode == IORING_OP_RECVMSG) && 901341bb971888 Luke Hsiao 2020-08-21 5190 (req->sr_msg.msg_flags & MSG_ERRQUEUE)) 901341bb971888 Luke Hsiao 2020-08-21 5191 mask &= ~POLLIN; 901341bb971888 Luke Hsiao 2020-08-21 5192 d7718a9d25a614 Jens Axboe 2020-02-14 @5193 mask |= POLLERR | POLLPRI; d7718a9d25a614 Jens Axboe 2020-02-14 5194 d7718a9d25a614 Jens Axboe 2020-02-14 5195 ipt.pt._qproc = io_async_queue_proc; d7718a9d25a614 Jens Axboe 2020-02-14 5196 d7718a9d25a614 Jens Axboe 2020-02-14 5197 ret = __io_arm_poll_handler(req, &apoll->poll, &ipt, mask, d7718a9d25a614 Jens Axboe 2020-02-14 5198 io_async_wake); a36da65c46565d Jens Axboe 2020-08-11 5199 if (ret || ipt.error) { d4e7cd36a90e38 Jens Axboe 2020-08-15 5200 io_poll_remove_double(req); d7718a9d25a614 Jens Axboe 2020-02-14 5201 spin_unlock_irq(&ctx->completion_lock); 807abcb0883439 Jens Axboe 2020-07-17 5202 kfree(apoll->double_poll); d7718a9d25a614 Jens Axboe 2020-02-14 5203 kfree(apoll); d7718a9d25a614 Jens Axboe 2020-02-14 5204 return false; d7718a9d25a614 Jens Axboe 2020-02-14 5205 } d7718a9d25a614 Jens Axboe 2020-02-14 5206 spin_unlock_irq(&ctx->completion_lock); d7718a9d25a614 Jens Axboe 2020-02-14 5207 trace_io_uring_poll_arm(ctx, req->opcode, req->user_data, mask, d7718a9d25a614 Jens Axboe 2020-02-14 5208 apoll->poll.events); d7718a9d25a614 Jens Axboe 2020-02-14 5209 return true; d7718a9d25a614 Jens Axboe 2020-02-14 5210 } d7718a9d25a614 Jens Axboe 2020-02-14 5211 d7718a9d25a614 Jens Axboe 2020-02-14 5212 static bool __io_poll_remove_one(struct io_kiocb *req, d7718a9d25a614 Jens Axboe 2020-02-14 5213 struct io_poll_iocb *poll) 221c5eb2338232 Jens Axboe 2019-01-17 5214 { b41e98524e424d Jens Axboe 2020-02-17 5215 bool do_complete = false; 221c5eb2338232 Jens Axboe 2019-01-17 5216 221c5eb2338232 Jens Axboe 2019-01-17 5217 spin_lock(&poll->head->lock); 221c5eb2338232 Jens Axboe 2019-01-17 5218 WRITE_ONCE(poll->canceled, true); 392edb45b24337 Jens Axboe 2019-12-09 5219 if (!list_empty(&poll->wait.entry)) { 392edb45b24337 Jens Axboe 2019-12-09 5220 list_del_init(&poll->wait.entry); b41e98524e424d Jens Axboe 2020-02-17 5221 do_complete = true; 221c5eb2338232 Jens Axboe 2019-01-17 5222 } 221c5eb2338232 Jens Axboe 2019-01-17 5223 spin_unlock(&poll->head->lock); 3bfa5bcb26f0b5 Jens Axboe 2020-05-17 5224 hash_del(&req->hash_node); d7718a9d25a614 Jens Axboe 2020-02-14 5225 return do_complete; d7718a9d25a614 Jens Axboe 2020-02-14 5226 } d7718a9d25a614 Jens Axboe 2020-02-14 5227 d7718a9d25a614 Jens Axboe 2020-02-14 5228 static bool io_poll_remove_one(struct io_kiocb *req) d7718a9d25a614 Jens Axboe 2020-02-14 5229 { d7718a9d25a614 Jens Axboe 2020-02-14 5230 bool do_complete; d7718a9d25a614 Jens Axboe 2020-02-14 5231 d4e7cd36a90e38 Jens Axboe 2020-08-15 5232 io_poll_remove_double(req); d4e7cd36a90e38 Jens Axboe 2020-08-15 5233 d7718a9d25a614 Jens Axboe 2020-02-14 5234 if (req->opcode == IORING_OP_POLL_ADD) { d7718a9d25a614 Jens Axboe 2020-02-14 5235 do_complete = __io_poll_remove_one(req, &req->poll); d7718a9d25a614 Jens Axboe 2020-02-14 5236 } else { 3bfa5bcb26f0b5 Jens Axboe 2020-05-17 5237 struct async_poll *apoll = req->apoll; 3bfa5bcb26f0b5 Jens Axboe 2020-05-17 5238 d7718a9d25a614 Jens Axboe 2020-02-14 5239 /* non-poll requests have submit ref still */ 3bfa5bcb26f0b5 Jens Axboe 2020-05-17 5240 do_complete = __io_poll_remove_one(req, &apoll->poll); 3bfa5bcb26f0b5 Jens Axboe 2020-05-17 5241 if (do_complete) { d7718a9d25a614 Jens Axboe 2020-02-14 5242 io_put_req(req); 807abcb0883439 Jens Axboe 2020-07-17 5243 kfree(apoll->double_poll); b1f573bd15fda2 Xiaoguang Wang 2020-04-12 5244 kfree(apoll); b1f573bd15fda2 Xiaoguang Wang 2020-04-12 5245 } 3bfa5bcb26f0b5 Jens Axboe 2020-05-17 5246 } b1f573bd15fda2 Xiaoguang Wang 2020-04-12 5247 b41e98524e424d Jens Axboe 2020-02-17 5248 if (do_complete) { b41e98524e424d Jens Axboe 2020-02-17 5249 io_cqring_fill_event(req, -ECANCELED); b41e98524e424d Jens Axboe 2020-02-17 5250 io_commit_cqring(req->ctx); f254ac04c8744c Jens Axboe 2020-08-12 5251 req_set_fail_links(req); 216578e55ac932 Pavel Begunkov 2020-10-13 5252 io_put_req_deferred(req, 1); b41e98524e424d Jens Axboe 2020-02-17 5253 } b41e98524e424d Jens Axboe 2020-02-17 5254 b41e98524e424d Jens Axboe 2020-02-17 5255 return do_complete; 221c5eb2338232 Jens Axboe 2019-01-17 5256 } 221c5eb2338232 Jens Axboe 2019-01-17 5257 76e1b6427fd824 Jens Axboe 2020-09-26 5258 /* 76e1b6427fd824 Jens Axboe 2020-09-26 5259 * Returns true if we found and killed one or more poll requests 76e1b6427fd824 Jens Axboe 2020-09-26 5260 */ 6b81928d4ca866 Pavel Begunkov 2020-11-06 5261 static bool io_poll_remove_all(struct io_ring_ctx *ctx, struct task_struct *tsk, 6b81928d4ca866 Pavel Begunkov 2020-11-06 5262 struct files_struct *files) 221c5eb2338232 Jens Axboe 2019-01-17 5263 { 78076bb64aa8ba Jens Axboe 2019-12-04 5264 struct hlist_node *tmp; 221c5eb2338232 Jens Axboe 2019-01-17 5265 struct io_kiocb *req; 8e2e1faf28b3e6 Jens Axboe 2020-04-13 5266 int posted = 0, i; 221c5eb2338232 Jens Axboe 2019-01-17 5267 221c5eb2338232 Jens Axboe 2019-01-17 5268 spin_lock_irq(&ctx->completion_lock); 78076bb64aa8ba Jens Axboe 2019-12-04 5269 for (i = 0; i < (1U << ctx->cancel_hash_bits); i++) { 78076bb64aa8ba Jens Axboe 2019-12-04 5270 struct hlist_head *list; 78076bb64aa8ba Jens Axboe 2019-12-04 5271 78076bb64aa8ba Jens Axboe 2019-12-04 5272 list = &ctx->cancel_hash[i]; f3606e3a92ddd3 Jens Axboe 2020-09-22 5273 hlist_for_each_entry_safe(req, tmp, list, hash_node) { 6b81928d4ca866 Pavel Begunkov 2020-11-06 5274 if (io_match_task(req, tsk, files)) 8e2e1faf28b3e6 Jens Axboe 2020-04-13 5275 posted += io_poll_remove_one(req); 221c5eb2338232 Jens Axboe 2019-01-17 5276 } f3606e3a92ddd3 Jens Axboe 2020-09-22 5277 } 221c5eb2338232 Jens Axboe 2019-01-17 5278 spin_unlock_irq(&ctx->completion_lock); b41e98524e424d Jens Axboe 2020-02-17 5279 8e2e1faf28b3e6 Jens Axboe 2020-04-13 5280 if (posted) b41e98524e424d Jens Axboe 2020-02-17 5281 io_cqring_ev_posted(ctx); 76e1b6427fd824 Jens Axboe 2020-09-26 5282 76e1b6427fd824 Jens Axboe 2020-09-26 5283 return posted != 0; 221c5eb2338232 Jens Axboe 2019-01-17 5284 } 221c5eb2338232 Jens Axboe 2019-01-17 5285 47f467686ec02f Jens Axboe 2019-11-09 5286 static int io_poll_cancel(struct io_ring_ctx *ctx, __u64 sqe_addr) 47f467686ec02f Jens Axboe 2019-11-09 5287 { 78076bb64aa8ba Jens Axboe 2019-12-04 5288 struct hlist_head *list; 47f467686ec02f Jens Axboe 2019-11-09 5289 struct io_kiocb *req; 47f467686ec02f Jens Axboe 2019-11-09 5290 78076bb64aa8ba Jens Axboe 2019-12-04 5291 list = &ctx->cancel_hash[hash_long(sqe_addr, ctx->cancel_hash_bits)]; 78076bb64aa8ba Jens Axboe 2019-12-04 5292 hlist_for_each_entry(req, list, hash_node) { b41e98524e424d Jens Axboe 2020-02-17 5293 if (sqe_addr != req->user_data) b41e98524e424d Jens Axboe 2020-02-17 5294 continue; b41e98524e424d Jens Axboe 2020-02-17 5295 if (io_poll_remove_one(req)) 47f467686ec02f Jens Axboe 2019-11-09 5296 return 0; b41e98524e424d Jens Axboe 2020-02-17 5297 return -EALREADY; eac406c61cd0ec Jens Axboe 2019-11-14 5298 } 47f467686ec02f Jens Axboe 2019-11-09 5299 47f467686ec02f Jens Axboe 2019-11-09 5300 return -ENOENT; 47f467686ec02f Jens Axboe 2019-11-09 5301 } 47f467686ec02f Jens Axboe 2019-11-09 5302 3529d8c2b353e6 Jens Axboe 2019-12-19 5303 static int io_poll_remove_prep(struct io_kiocb *req, 3529d8c2b353e6 Jens Axboe 2019-12-19 5304 const struct io_uring_sqe *sqe) 0969e783e3a891 Jens Axboe 2019-12-17 5305 { 0969e783e3a891 Jens Axboe 2019-12-17 5306 if (unlikely(req->ctx->flags & IORING_SETUP_IOPOLL)) 0969e783e3a891 Jens Axboe 2019-12-17 5307 return -EINVAL; 0969e783e3a891 Jens Axboe 2019-12-17 5308 if (sqe->ioprio || sqe->off || sqe->len || sqe->buf_index || 0969e783e3a891 Jens Axboe 2019-12-17 5309 sqe->poll_events) 0969e783e3a891 Jens Axboe 2019-12-17 5310 return -EINVAL; 0969e783e3a891 Jens Axboe 2019-12-17 5311 018043be1f1bc4 Pavel Begunkov 2020-10-27 5312 req->poll_remove.addr = READ_ONCE(sqe->addr); 0969e783e3a891 Jens Axboe 2019-12-17 5313 return 0; 0969e783e3a891 Jens Axboe 2019-12-17 5314 } 0969e783e3a891 Jens Axboe 2019-12-17 5315 221c5eb2338232 Jens Axboe 2019-01-17 5316 /* 221c5eb2338232 Jens Axboe 2019-01-17 5317 * Find a running poll command that matches one specified in sqe->addr, 221c5eb2338232 Jens Axboe 2019-01-17 5318 * and remove it if found. 221c5eb2338232 Jens Axboe 2019-01-17 5319 */ 61e98203047983 Pavel Begunkov 2021-02-10 5320 static int io_poll_remove(struct io_kiocb *req, unsigned int issue_flags) 221c5eb2338232 Jens Axboe 2019-01-17 5321 { 221c5eb2338232 Jens Axboe 2019-01-17 5322 struct io_ring_ctx *ctx = req->ctx; 47f467686ec02f Jens Axboe 2019-11-09 5323 int ret; 221c5eb2338232 Jens Axboe 2019-01-17 5324 221c5eb2338232 Jens Axboe 2019-01-17 5325 spin_lock_irq(&ctx->completion_lock); 018043be1f1bc4 Pavel Begunkov 2020-10-27 5326 ret = io_poll_cancel(ctx, req->poll_remove.addr); 221c5eb2338232 Jens Axboe 2019-01-17 5327 spin_unlock_irq(&ctx->completion_lock); 221c5eb2338232 Jens Axboe 2019-01-17 5328 4e88d6e7793f2f Jens Axboe 2019-12-07 5329 if (ret < 0) 4e88d6e7793f2f Jens Axboe 2019-12-07 5330 req_set_fail_links(req); e1e16097e265da Jens Axboe 2020-06-22 5331 io_req_complete(req, ret); 221c5eb2338232 Jens Axboe 2019-01-17 5332 return 0; 221c5eb2338232 Jens Axboe 2019-01-17 5333 } 221c5eb2338232 Jens Axboe 2019-01-17 5334 221c5eb2338232 Jens Axboe 2019-01-17 5335 static int io_poll_wake(struct wait_queue_entry *wait, unsigned mode, int sync, 221c5eb2338232 Jens Axboe 2019-01-17 5336 void *key) 221c5eb2338232 Jens Axboe 2019-01-17 5337 { c2f2eb7d2c1cdc Jens Axboe 2020-02-10 5338 struct io_kiocb *req = wait->private; c2f2eb7d2c1cdc Jens Axboe 2020-02-10 5339 struct io_poll_iocb *poll = &req->poll; 221c5eb2338232 Jens Axboe 2019-01-17 5340 d7718a9d25a614 Jens Axboe 2020-02-14 5341 return __io_async_wake(req, poll, key_to_poll(key), io_poll_task_func); 221c5eb2338232 Jens Axboe 2019-01-17 5342 } 221c5eb2338232 Jens Axboe 2019-01-17 5343 221c5eb2338232 Jens Axboe 2019-01-17 5344 static void io_poll_queue_proc(struct file *file, struct wait_queue_head *head, 221c5eb2338232 Jens Axboe 2019-01-17 5345 struct poll_table_struct *p) 221c5eb2338232 Jens Axboe 2019-01-17 5346 { 221c5eb2338232 Jens Axboe 2019-01-17 5347 struct io_poll_table *pt = container_of(p, struct io_poll_table, pt); 221c5eb2338232 Jens Axboe 2019-01-17 5348 e8c2bc1fb6c949 Jens Axboe 2020-08-15 5349 __io_queue_proc(&pt->req->poll, pt, head, (struct io_poll_iocb **) &pt->req->async_data); eac406c61cd0ec Jens Axboe 2019-11-14 5350 } eac406c61cd0ec Jens Axboe 2019-11-14 5351 3529d8c2b353e6 Jens Axboe 2019-12-19 5352 static int io_poll_add_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) 221c5eb2338232 Jens Axboe 2019-01-17 5353 { 221c5eb2338232 Jens Axboe 2019-01-17 5354 struct io_poll_iocb *poll = &req->poll; 5769a351b89cd4 Jiufei Xue 2020-06-17 5355 u32 events; 221c5eb2338232 Jens Axboe 2019-01-17 5356 221c5eb2338232 Jens Axboe 2019-01-17 5357 if (unlikely(req->ctx->flags & IORING_SETUP_IOPOLL)) 221c5eb2338232 Jens Axboe 2019-01-17 5358 return -EINVAL; 8e66ada09e9d0a Jens Axboe 2021-02-22 5359 if (sqe->addr || sqe->ioprio || sqe->off || sqe->buf_index) 8e66ada09e9d0a Jens Axboe 2021-02-22 5360 return -EINVAL; 8e66ada09e9d0a Jens Axboe 2021-02-22 5361 if (sqe->len & ~IORING_POLL_ADD_MULTI) 221c5eb2338232 Jens Axboe 2019-01-17 5362 return -EINVAL; 221c5eb2338232 Jens Axboe 2019-01-17 5363 5769a351b89cd4 Jiufei Xue 2020-06-17 5364 events = READ_ONCE(sqe->poll32_events); 5769a351b89cd4 Jiufei Xue 2020-06-17 5365 #ifdef __BIG_ENDIAN 5769a351b89cd4 Jiufei Xue 2020-06-17 5366 events = swahw32(events); 5769a351b89cd4 Jiufei Xue 2020-06-17 5367 #endif 8e66ada09e9d0a Jens Axboe 2021-02-22 5368 if (!sqe->len) 8e66ada09e9d0a Jens Axboe 2021-02-22 @5369 events |= EPOLLONESHOT; a31eb4a2f1650f Jiufei Xue 2020-06-17 5370 poll->events = demangle_poll(events) | EPOLLERR | EPOLLHUP | 8e66ada09e9d0a Jens Axboe 2021-02-22 5371 (events & (EPOLLEXCLUSIVE|EPOLLONESHOT)); 0969e783e3a891 Jens Axboe 2019-12-17 5372 return 0; 0969e783e3a891 Jens Axboe 2019-12-17 5373 } 0969e783e3a891 Jens Axboe 2019-12-17 5374 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected]
.config.gz
Description: application/gzip
_______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
