All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Max Kellermann <max.kellermann@ionos.com>
Cc: oe-kbuild-all@lists.linux.dev, Jens Axboe <axboe@kernel.dk>
Subject: [axboe-block:io_uring-epoll-wait 7/19] io_uring/io_uring.c:396:43: sparse: sparse: incorrect type in initializer (different base types)
Date: Sun, 2 Feb 2025 18:19:09 +0800	[thread overview]
Message-ID: <202502021802.ulY6VEco-lkp@intel.com> (raw)

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git io_uring-epoll-wait
head:   81a642b29d7d837fda2d86c4e1dc036effcfa4a7
commit: 4fbd68dbbb65f14f3fd40e1232045e06d168ecbd [7/19] io_uring: cache io_kiocb->flags in variable
config: hexagon-randconfig-r112-20250202 (https://download.01.org/0day-ci/archive/20250202/202502021802.ulY6VEco-lkp@intel.com/config)
compiler: clang version 21.0.0git (https://github.com/llvm/llvm-project 355d0b186f178668b103068537e517f3d52ad639)
reproduce: (https://download.01.org/0day-ci/archive/20250202/202502021802.ulY6VEco-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202502021802.ulY6VEco-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
   io_uring/io_uring.c: note: in included file (through include/linux/io_uring/cmd.h):
   include/linux/io_uring_types.h:191:37: sparse: sparse: array of flexible structures
>> io_uring/io_uring.c:396:43: sparse: sparse: incorrect type in initializer (different base types) @@     expected unsigned int const req_flags @@     got restricted io_req_flags_t [usertype] flags @@
   io_uring/io_uring.c:396:43: sparse:     expected unsigned int const req_flags
   io_uring/io_uring.c:396:43: sparse:     got restricted io_req_flags_t [usertype] flags
>> io_uring/io_uring.c:398:25: sparse: sparse: restricted io_req_flags_t degrades to integer
   io_uring/io_uring.c:404:25: sparse: sparse: restricted io_req_flags_t degrades to integer
   io_uring/io_uring.c:410:26: sparse: sparse: restricted io_req_flags_t degrades to integer
   io_uring/io_uring.c:415:25: sparse: sparse: restricted io_req_flags_t degrades to integer
   io_uring/io_uring.c:417:25: sparse: sparse: restricted io_req_flags_t degrades to integer
   io_uring/io_uring.c:419:25: sparse: sparse: restricted io_req_flags_t degrades to integer
>> io_uring/io_uring.c:473:37: sparse: sparse: incorrect type in initializer (different base types) @@     expected unsigned int req_flags @@     got restricted io_req_flags_t [usertype] flags @@
   io_uring/io_uring.c:473:37: sparse:     expected unsigned int req_flags
   io_uring/io_uring.c:473:37: sparse:     got restricted io_req_flags_t [usertype] flags
   io_uring/io_uring.c:477:27: sparse: sparse: restricted io_req_flags_t degrades to integer
>> io_uring/io_uring.c:478:27: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned int req_flags @@     got restricted io_req_flags_t [usertype] flags @@
   io_uring/io_uring.c:478:27: sparse:     expected unsigned int req_flags
   io_uring/io_uring.c:478:27: sparse:     got restricted io_req_flags_t [usertype] flags
   io_uring/io_uring.c:484:25: sparse: sparse: restricted io_req_flags_t degrades to integer
   io_uring/io_uring.c:487:40: sparse: sparse: restricted io_req_flags_t degrades to integer
   io_uring/io_uring.c:488:27: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned int req_flags @@     got restricted io_req_flags_t [usertype] flags @@
   io_uring/io_uring.c:488:27: sparse:     expected unsigned int req_flags
   io_uring/io_uring.c:488:27: sparse:     got restricted io_req_flags_t [usertype] flags
   io_uring/io_uring.c:490:39: sparse: sparse: restricted io_req_flags_t degrades to integer
   io_uring/io_uring.c:1723:25: sparse: sparse: restricted io_req_flags_t degrades to integer
   io_uring/io_uring.c:1733:43: sparse: sparse: incorrect type in initializer (different base types) @@     expected unsigned int const req_flags @@     got restricted io_req_flags_t [usertype] flags @@
   io_uring/io_uring.c:1733:43: sparse:     expected unsigned int const req_flags
   io_uring/io_uring.c:1733:43: sparse:     got restricted io_req_flags_t [usertype] flags
   io_uring/io_uring.c:1741:13: sparse: sparse: restricted io_req_flags_t degrades to integer
   io_uring/io_uring.c:1798:43: sparse: sparse: incorrect type in initializer (different base types) @@     expected unsigned int const req_flags @@     got restricted io_req_flags_t [usertype] flags @@
   io_uring/io_uring.c:1798:43: sparse:     expected unsigned int const req_flags
   io_uring/io_uring.c:1798:43: sparse:     got restricted io_req_flags_t [usertype] flags
   io_uring/io_uring.c:1805:27: sparse: sparse: restricted io_req_flags_t degrades to integer
   io_uring/io_uring.c:1832:25: sparse: sparse: restricted io_req_flags_t degrades to integer
   io_uring/io_uring.c:1847:25: sparse: sparse: restricted io_req_flags_t degrades to integer
   io_uring/io_uring.c:1865:33: sparse: sparse: restricted io_req_flags_t degrades to integer
   io_uring/io_uring.c:609:36: sparse: sparse: context imbalance in 'io_req_post_cqe' - unexpected unlock
   io_uring/io_uring.c:1197:19: sparse: sparse: Using plain integer as NULL pointer
   io_uring/io_uring.c:1197:19: sparse: sparse: Using plain integer as NULL pointer
   io_uring/io_uring.c:611:17: sparse: sparse: context imbalance in '__io_submit_flush_completions' - different lock contexts for basic block
   io_uring/io_uring.c: note: in included file (through include/linux/sched/signal.h, include/linux/rcuwait.h, include/linux/percpu-rwsem.h, ...):
   include/linux/cred.h:175:41: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected struct cred const *old @@     got struct cred const [noderef] __rcu *cred @@
   include/linux/cred.h:175:41: sparse:     expected struct cred const *old
   include/linux/cred.h:175:41: sparse:     got struct cred const [noderef] __rcu *cred
   include/linux/cred.h:183:51: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected struct cred const *override_cred @@     got struct cred const [noderef] __rcu *cred @@
   include/linux/cred.h:183:51: sparse:     expected struct cred const *override_cred
   include/linux/cred.h:183:51: sparse:     got struct cred const [noderef] __rcu *cred
>> io_uring/io_uring.c:468:34: sparse: sparse: incorrect type in argument 2 (different base types) @@     expected unsigned int req_flags @@     got restricted io_req_flags_t [usertype] flags @@
   io_uring/io_uring.c:468:34: sparse:     expected unsigned int req_flags
   io_uring/io_uring.c:468:34: sparse:     got restricted io_req_flags_t [usertype] flags
   io_uring/io_uring.c:462:13: sparse: sparse: restricted io_req_flags_t degrades to integer
   io_uring/io_uring.c:462:13: sparse: sparse: restricted io_req_flags_t degrades to integer

vim +396 io_uring/io_uring.c

   393	
   394	static void io_clean_op(struct io_kiocb *req)
   395	{
 > 396		const unsigned int req_flags = req->flags;
   397	
 > 398		if (req_flags & REQ_F_BUFFER_SELECTED) {
   399			spin_lock(&req->ctx->completion_lock);
   400			io_kbuf_drop(req);
   401			spin_unlock(&req->ctx->completion_lock);
   402		}
   403	
 > 404		if (req_flags & REQ_F_NEED_CLEANUP) {
   405			const struct io_cold_def *def = &io_cold_defs[req->opcode];
   406	
   407			if (def->cleanup)
   408				def->cleanup(req);
   409		}
   410		if ((req_flags & REQ_F_POLLED) && req->apoll) {
   411			kfree(req->apoll->double_poll);
   412			kfree(req->apoll);
   413			req->apoll = NULL;
   414		}
   415		if (req_flags & REQ_F_INFLIGHT)
   416			atomic_dec(&req->tctx->inflight_tracked);
   417		if (req_flags & REQ_F_CREDS)
   418			put_cred(req->creds);
   419		if (req_flags & REQ_F_ASYNC_DATA) {
   420			kfree(req->async_data);
   421			req->async_data = NULL;
   422		}
   423		req->flags &= ~IO_REQ_CLEAN_FLAGS;
   424	}
   425	
   426	static inline void io_req_track_inflight(struct io_kiocb *req)
   427	{
   428		if (!(req->flags & REQ_F_INFLIGHT)) {
   429			req->flags |= REQ_F_INFLIGHT;
   430			atomic_inc(&req->tctx->inflight_tracked);
   431		}
   432	}
   433	
   434	static struct io_kiocb *__io_prep_linked_timeout(struct io_kiocb *req)
   435	{
   436		if (WARN_ON_ONCE(!req->link))
   437			return NULL;
   438	
   439		req->flags &= ~REQ_F_ARM_LTIMEOUT;
   440		req->flags |= REQ_F_LINK_TIMEOUT;
   441	
   442		/* linked timeouts should have two refs once prep'ed */
   443		io_req_set_refcount(req);
   444		__io_req_set_refcount(req->link, 2);
   445		return req->link;
   446	}
   447	
   448	static inline struct io_kiocb *io_prep_linked_timeout(struct io_kiocb *req)
   449	{
   450		if (likely(!(req->flags & REQ_F_ARM_LTIMEOUT)))
   451			return NULL;
   452		return __io_prep_linked_timeout(req);
   453	}
   454	
   455	static noinline void __io_arm_ltimeout(struct io_kiocb *req)
   456	{
   457		io_queue_linked_timeout(__io_prep_linked_timeout(req));
   458	}
   459	
   460	static inline void _io_arm_ltimeout(struct io_kiocb *req, unsigned int req_flags)
   461	{
   462		if (unlikely(req_flags & REQ_F_ARM_LTIMEOUT))
   463			__io_arm_ltimeout(req);
   464	}
   465	
   466	static inline void io_arm_ltimeout(struct io_kiocb *req)
   467	{
 > 468		_io_arm_ltimeout(req, req->flags);
   469	}
   470	
   471	static void io_prep_async_work(struct io_kiocb *req)
   472	{
 > 473		unsigned int req_flags = req->flags;
   474		const struct io_issue_def *def = &io_issue_defs[req->opcode];
   475		struct io_ring_ctx *ctx = req->ctx;
   476	
   477		if (!(req_flags & REQ_F_CREDS)) {
 > 478			req_flags = req->flags |= REQ_F_CREDS;
   479			req->creds = get_current_cred();
   480		}
   481	
   482		req->work.list.next = NULL;
   483		atomic_set(&req->work.flags, 0);
   484		if (req_flags & REQ_F_FORCE_ASYNC)
   485			atomic_or(IO_WQ_WORK_CONCURRENT, &req->work.flags);
   486	
   487		if (req->file && !(req_flags & REQ_F_FIXED_FILE))
   488			req_flags = req->flags |= io_file_get_flags(req->file);
   489	
   490		if (req->file && (req_flags & REQ_F_ISREG)) {
   491			bool should_hash = def->hash_reg_file;
   492	
   493			/* don't serialize this request if the fs doesn't need it */
   494			if (should_hash && (req->file->f_flags & O_DIRECT) &&
   495			    (req->file->f_op->fop_flags & FOP_DIO_PARALLEL_WRITE))
   496				should_hash = false;
   497			if (should_hash || (ctx->flags & IORING_SETUP_IOPOLL))
   498				io_wq_hash_work(&req->work, file_inode(req->file));
   499		} else if (!req->file || !S_ISBLK(file_inode(req->file)->i_mode)) {
   500			if (def->unbound_nonreg_file)
   501				atomic_or(IO_WQ_WORK_UNBOUND, &req->work.flags);
   502		}
   503	}
   504	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

             reply	other threads:[~2025-02-02 10:19 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-02 10:19 kernel test robot [this message]
2025-02-02 15:03 ` [axboe-block:io_uring-epoll-wait 7/19] io_uring/io_uring.c:396:43: sparse: sparse: incorrect type in initializer (different base types) Jens Axboe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202502021802.ulY6VEco-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=axboe@kernel.dk \
    --cc=max.kellermann@ionos.com \
    --cc=oe-kbuild-all@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.