* fs/io_uring.c:6361:33: sparse: sparse: incorrect type in initializer (different base types)
@ 2022-05-27 22:49 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2022-05-27 22:49 UTC (permalink / raw)
To: Hao Xu; +Cc: kbuild-all, linux-kernel, Jens Axboe
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 8291eaafed36f575f23951f3ce18407f480e9ecf
commit: dbc2564cfe0faff439dc46adb8c009589054ea46 io_uring: let fast poll support multishot
date: 13 days ago
config: arc-randconfig-s031-20220527 (https://download.01.org/0day-ci/archive/20220528/202205280650.UIaqqALt-lkp@intel.com/config)
compiler: arceb-elf-gcc (GCC) 11.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.4-14-g5a0004b5-dirty
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=dbc2564cfe0faff439dc46adb8c009589054ea46
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout dbc2564cfe0faff439dc46adb8c009589054ea46
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=arc SHELL=/bin/bash
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
fs/io_uring.c:3305:23: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] flags @@ got restricted __kernel_rwf_t @@
fs/io_uring.c:3305:23: sparse: expected unsigned int [usertype] flags
fs/io_uring.c:3305:23: sparse: got restricted __kernel_rwf_t
fs/io_uring.c:3472:31: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void [noderef] __user * @@ got void * @@
fs/io_uring.c:3472:31: sparse: expected void [noderef] __user *
fs/io_uring.c:3472:31: sparse: got void *
fs/io_uring.c:3496:31: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void [noderef] __user * @@ got void * @@
fs/io_uring.c:3496:31: sparse: expected void [noderef] __user *
fs/io_uring.c:3496:31: sparse: got void *
fs/io_uring.c:3890:48: sparse: sparse: incorrect type in argument 2 (different base types) @@ expected restricted __kernel_rwf_t [usertype] flags @@ got unsigned int [usertype] flags @@
fs/io_uring.c:3890:48: sparse: expected restricted __kernel_rwf_t [usertype] flags
fs/io_uring.c:3890:48: sparse: got unsigned int [usertype] flags
fs/io_uring.c:5251:14: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct file *file @@ got struct file [noderef] __rcu * @@
fs/io_uring.c:5251:14: sparse: expected struct file *file
fs/io_uring.c:5251:14: sparse: got struct file [noderef] __rcu *
fs/io_uring.c:6042:68: sparse: sparse: incorrect type in initializer (different base types) @@ expected restricted __poll_t [usertype] _key @@ got int apoll_events @@
fs/io_uring.c:6042:68: sparse: expected restricted __poll_t [usertype] _key
fs/io_uring.c:6042:68: sparse: got int apoll_events
fs/io_uring.c:6047:48: sparse: sparse: restricted __poll_t degrades to integer
fs/io_uring.c:6052:41: sparse: sparse: restricted __poll_t degrades to integer
fs/io_uring.c:6057:66: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected restricted __poll_t [usertype] val @@ got int @@
fs/io_uring.c:6057:66: sparse: expected restricted __poll_t [usertype] val
fs/io_uring.c:6057:66: sparse: got int
fs/io_uring.c:6057:52: sparse: sparse: incorrect type in initializer (different base types) @@ expected restricted __poll_t [usertype] mask @@ got unsigned short @@
fs/io_uring.c:6057:52: sparse: expected restricted __poll_t [usertype] mask
fs/io_uring.c:6057:52: sparse: got unsigned short
fs/io_uring.c:6063:50: sparse: sparse: incorrect type in argument 3 (different base types) @@ expected signed int [usertype] res @@ got restricted __poll_t [usertype] mask @@
fs/io_uring.c:6063:50: sparse: expected signed int [usertype] res
fs/io_uring.c:6063:50: sparse: got restricted __poll_t [usertype] mask
fs/io_uring.c:6100:68: sparse: sparse: restricted __poll_t degrades to integer
fs/io_uring.c:6100:57: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected restricted __poll_t [usertype] val @@ got unsigned int @@
fs/io_uring.c:6100:57: sparse: expected restricted __poll_t [usertype] val
fs/io_uring.c:6100:57: sparse: got unsigned int
fs/io_uring.c:6182:45: sparse: sparse: incorrect type in argument 3 (different base types) @@ expected int events @@ got restricted __poll_t [usertype] events @@
fs/io_uring.c:6182:45: sparse: expected int events
fs/io_uring.c:6182:45: sparse: got restricted __poll_t [usertype] events
fs/io_uring.c:6204:47: sparse: sparse: restricted __poll_t degrades to integer
fs/io_uring.c:6204:35: sparse: sparse: restricted __poll_t degrades to integer
fs/io_uring.c:6204:23: sparse: sparse: restricted __poll_t degrades to integer
fs/io_uring.c:6217:40: sparse: sparse: incorrect type in argument 2 (different base types) @@ expected int mask @@ got restricted __poll_t [usertype] mask @@
fs/io_uring.c:6217:40: sparse: expected int mask
fs/io_uring.c:6217:40: sparse: got restricted __poll_t [usertype] mask
fs/io_uring.c:6217:50: sparse: sparse: incorrect type in argument 3 (different base types) @@ expected int events @@ got restricted __poll_t [usertype] events @@
fs/io_uring.c:6217:50: sparse: expected int events
fs/io_uring.c:6217:50: sparse: got restricted __poll_t [usertype] events
fs/io_uring.c:6309:24: sparse: sparse: incorrect type in return expression (different base types) @@ expected int @@ got restricted __poll_t [assigned] [usertype] mask @@
fs/io_uring.c:6309:24: sparse: expected int
fs/io_uring.c:6309:24: sparse: got restricted __poll_t [assigned] [usertype] mask
fs/io_uring.c:6326:40: sparse: sparse: incorrect type in argument 2 (different base types) @@ expected int mask @@ got restricted __poll_t [assigned] [usertype] mask @@
fs/io_uring.c:6326:40: sparse: expected int mask
fs/io_uring.c:6326:40: sparse: got restricted __poll_t [assigned] [usertype] mask
fs/io_uring.c:6326:50: sparse: sparse: incorrect type in argument 3 (different base types) @@ expected int events @@ got restricted __poll_t [usertype] events @@
fs/io_uring.c:6326:50: sparse: expected int events
fs/io_uring.c:6326:50: sparse: got restricted __poll_t [usertype] events
fs/io_uring.c:6336:47: sparse: sparse: incorrect type in argument 3 (different base types) @@ expected int events @@ got restricted __poll_t [usertype] events @@
fs/io_uring.c:6336:47: sparse: expected int events
fs/io_uring.c:6336:47: sparse: got restricted __poll_t [usertype] events
>> fs/io_uring.c:6361:33: sparse: sparse: incorrect type in initializer (different base types) @@ expected restricted __poll_t [usertype] mask @@ got int @@
fs/io_uring.c:6361:33: sparse: expected restricted __poll_t [usertype] mask
fs/io_uring.c:6361:33: sparse: got int
fs/io_uring.c:6374:22: sparse: sparse: invalid assignment: |=
fs/io_uring.c:6374:22: sparse: left side has type restricted __poll_t
fs/io_uring.c:6374:22: sparse: right side has type int
fs/io_uring.c:6379:30: sparse: sparse: invalid assignment: &=
fs/io_uring.c:6379:30: sparse: left side has type restricted __poll_t
fs/io_uring.c:6379:30: sparse: right side has type int
fs/io_uring.c:6381:22: sparse: sparse: invalid assignment: |=
fs/io_uring.c:6381:22: sparse: left side has type restricted __poll_t
fs/io_uring.c:6381:22: sparse: right side has type int
fs/io_uring.c:6409:33: sparse: sparse: incorrect type in argument 5 (different base types) @@ expected int mask @@ got restricted __poll_t [assigned] [usertype] mask @@
fs/io_uring.c:6409:33: sparse: expected int mask
fs/io_uring.c:6409:33: sparse: got restricted __poll_t [assigned] [usertype] mask
fs/io_uring.c:6409:50: sparse: sparse: incorrect type in argument 6 (different base types) @@ expected int events @@ got restricted __poll_t [usertype] events @@
fs/io_uring.c:6409:50: sparse: expected int events
fs/io_uring.c:6409:50: sparse: got restricted __poll_t [usertype] events
fs/io_uring.c:6523:24: sparse: sparse: invalid assignment: |=
fs/io_uring.c:6523:24: sparse: left side has type unsigned int
fs/io_uring.c:6523:24: sparse: right side has type restricted __poll_t
fs/io_uring.c:6524:65: sparse: sparse: restricted __poll_t degrades to integer
fs/io_uring.c:6524:29: sparse: sparse: restricted __poll_t degrades to integer
fs/io_uring.c:6524:38: sparse: sparse: incorrect type in return expression (different base types) @@ expected restricted __poll_t @@ got unsigned int @@
fs/io_uring.c:6524:38: sparse: expected restricted __poll_t
fs/io_uring.c:6524:38: sparse: got unsigned int
fs/io_uring.c:6572:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected int apoll_events @@ got restricted __poll_t [usertype] events @@
fs/io_uring.c:6572:27: sparse: expected int apoll_events
fs/io_uring.c:6572:27: sparse: got restricted __poll_t [usertype] events
fs/io_uring.c:6611:43: sparse: sparse: invalid assignment: &=
fs/io_uring.c:6611:43: sparse: left side has type restricted __poll_t
fs/io_uring.c:6611:43: sparse: right side has type int
fs/io_uring.c:6612:62: sparse: sparse: restricted __poll_t degrades to integer
fs/io_uring.c:6612:43: sparse: sparse: invalid assignment: |=
fs/io_uring.c:6612:43: sparse: left side has type restricted __poll_t
fs/io_uring.c:6612:43: sparse: right side has type unsigned int
fs/io_uring.c:2561:17: sparse: sparse: context imbalance in 'handle_prev_tw_list' - different lock contexts for basic block
fs/io_uring.c:7676:39: sparse: sparse: marked inline, but without a definition
fs/io_uring.c:7676:39: sparse: sparse: marked inline, but without a definition
fs/io_uring.c:7676:39: sparse: sparse: marked inline, but without a definition
fs/io_uring.c:7676:39: sparse: sparse: marked inline, but without a definition
vim +6361 fs/io_uring.c
6281
6282 static int __io_arm_poll_handler(struct io_kiocb *req,
6283 struct io_poll_iocb *poll,
6284 struct io_poll_table *ipt, __poll_t mask)
6285 {
6286 struct io_ring_ctx *ctx = req->ctx;
6287 int v;
6288
6289 INIT_HLIST_NODE(&req->hash_node);
6290 req->work.cancel_seq = atomic_read(&ctx->cancel_seq);
6291 io_init_poll_iocb(poll, mask, io_poll_wake);
6292 poll->file = req->file;
6293
6294 ipt->pt._key = mask;
6295 ipt->req = req;
6296 ipt->error = 0;
6297 ipt->nr_entries = 0;
6298
6299 /*
6300 * Take the ownership to delay any tw execution up until we're done
6301 * with poll arming. see io_poll_get_ownership().
6302 */
6303 atomic_set(&req->poll_refs, 1);
6304 mask = vfs_poll(req->file, &ipt->pt) & poll->events;
6305
6306 if (mask && (poll->events & EPOLLONESHOT)) {
6307 io_poll_remove_entries(req);
6308 /* no one else has access to the req, forget about the ref */
6309 return mask;
6310 }
6311 if (!mask && unlikely(ipt->error || !ipt->nr_entries)) {
6312 io_poll_remove_entries(req);
6313 if (!ipt->error)
6314 ipt->error = -EINVAL;
6315 return 0;
6316 }
6317
6318 spin_lock(&ctx->completion_lock);
6319 io_poll_req_insert(req);
6320 spin_unlock(&ctx->completion_lock);
6321
6322 if (mask) {
6323 /* can't multishot if failed, just queue the event we've got */
6324 if (unlikely(ipt->error || !ipt->nr_entries))
6325 poll->events |= EPOLLONESHOT;
> 6326 __io_poll_execute(req, mask, poll->events);
6327 return 0;
6328 }
6329
6330 /*
6331 * Release ownership. If someone tried to queue a tw while it was
6332 * locked, kick it off for them.
6333 */
6334 v = atomic_dec_return(&req->poll_refs);
6335 if (unlikely(v & IO_POLL_REF_MASK))
6336 __io_poll_execute(req, 0, poll->events);
6337 return 0;
6338 }
6339
6340 static void io_async_queue_proc(struct file *file, struct wait_queue_head *head,
6341 struct poll_table_struct *p)
6342 {
6343 struct io_poll_table *pt = container_of(p, struct io_poll_table, pt);
6344 struct async_poll *apoll = pt->req->apoll;
6345
6346 __io_queue_proc(&apoll->poll, pt, head, &apoll->double_poll);
6347 }
6348
6349 enum {
6350 IO_APOLL_OK,
6351 IO_APOLL_ABORTED,
6352 IO_APOLL_READY
6353 };
6354
6355 static int io_arm_poll_handler(struct io_kiocb *req, unsigned issue_flags)
6356 {
6357 const struct io_op_def *def = &io_op_defs[req->opcode];
6358 struct io_ring_ctx *ctx = req->ctx;
6359 struct async_poll *apoll;
6360 struct io_poll_table ipt;
> 6361 __poll_t mask = POLLPRI | POLLERR;
6362 int ret;
6363
6364 if (!def->pollin && !def->pollout)
6365 return IO_APOLL_ABORTED;
6366 if (!file_can_poll(req->file))
6367 return IO_APOLL_ABORTED;
6368 if ((req->flags & (REQ_F_POLLED|REQ_F_PARTIAL_IO)) == REQ_F_POLLED)
6369 return IO_APOLL_ABORTED;
6370 if (!(req->flags & REQ_F_APOLL_MULTISHOT))
6371 mask |= EPOLLONESHOT;
6372
6373 if (def->pollin) {
6374 mask |= POLLIN | POLLRDNORM;
6375
6376 /* If reading from MSG_ERRQUEUE using recvmsg, ignore POLLIN */
6377 if ((req->opcode == IORING_OP_RECVMSG) &&
6378 (req->sr_msg.msg_flags & MSG_ERRQUEUE))
6379 mask &= ~POLLIN;
6380 } else {
6381 mask |= POLLOUT | POLLWRNORM;
6382 }
6383 if (def->poll_exclusive)
6384 mask |= EPOLLEXCLUSIVE;
6385 if (req->flags & REQ_F_POLLED) {
6386 apoll = req->apoll;
6387 } else if (!(issue_flags & IO_URING_F_UNLOCKED) &&
6388 !list_empty(&ctx->apoll_cache)) {
6389 apoll = list_first_entry(&ctx->apoll_cache, struct async_poll,
6390 poll.wait.entry);
6391 list_del_init(&apoll->poll.wait.entry);
6392 } else {
6393 apoll = kmalloc(sizeof(*apoll), GFP_ATOMIC);
6394 if (unlikely(!apoll))
6395 return IO_APOLL_ABORTED;
6396 }
6397 apoll->double_poll = NULL;
6398 req->apoll = apoll;
6399 req->flags |= REQ_F_POLLED;
6400 ipt.pt._qproc = io_async_queue_proc;
6401
6402 io_kbuf_recycle(req, issue_flags);
6403
6404 ret = __io_arm_poll_handler(req, &apoll->poll, &ipt, mask);
6405 if (ret || ipt.error)
6406 return ret ? IO_APOLL_READY : IO_APOLL_ABORTED;
6407
6408 trace_io_uring_poll_arm(ctx, req, req->cqe.user_data, req->opcode,
6409 mask, apoll->poll.events);
6410 return IO_APOLL_OK;
6411 }
6412
--
0-DAY CI Kernel Test Service
https://01.org/lkp
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-05-27 22:49 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-27 22:49 fs/io_uring.c:6361:33: sparse: sparse: incorrect type in initializer (different base types) kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.