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]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to