All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Kanchan Joshi <joshi.k@samsung.com>
Cc: llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev,
	Jens Axboe <axboe@kernel.dk>
Subject: [axboe:nvme-raw-queues 10/16] drivers/nvme/host/ioctl.c:566:30: error: no member named 'queue_uring_cmd' in 'struct blk_mq_ops'
Date: Thu, 07 May 2026 14:36:32 +0800	[thread overview]
Message-ID: <202605071449.cb0U5rca-lkp@intel.com> (raw)

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux.git nvme-raw-queues
head:   38cfa7887dc8d403af2baa576d06c438408a192c
commit: 3c53a8c35b891c1535f55b6a462bcd8ff74ef8e7 [10/16] nvme: submisssion/completion of uring_cmd to/from the registered queue
config: hexagon-randconfig-001-20260506 (https://download.01.org/0day-ci/archive/20260507/202605071449.cb0U5rca-lkp@intel.com/config)
compiler: clang version 23.0.0git (https://github.com/llvm/llvm-project 5bac06718f502014fade905512f1d26d578a18f3)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260507/202605071449.cb0U5rca-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/202605071449.cb0U5rca-lkp@intel.com/

All errors (new ones prefixed by >>):

   drivers/nvme/host/ioctl.c:558:12: error: call to undeclared function 'io_uring_cmd_import_qid'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
     558 |         int qid = io_uring_cmd_import_qid(ioucmd);
         |                   ^
   drivers/nvme/host/ioctl.c:558:12: note: did you mean 'io_uring_cmd_import_fixed'?
   include/linux/io_uring/cmd.h:45:5: note: 'io_uring_cmd_import_fixed' declared here
      45 | int io_uring_cmd_import_fixed(u64 ubuf, unsigned long len, int rw,
         |     ^
>> drivers/nvme/host/ioctl.c:566:30: error: no member named 'queue_uring_cmd' in 'struct blk_mq_ops'
     566 |         if (q->mq_ops && q->mq_ops->queue_uring_cmd)
         |                          ~~~~~~~~~  ^
   drivers/nvme/host/ioctl.c:567:21: error: no member named 'queue_uring_cmd' in 'struct blk_mq_ops'
     567 |                 return q->mq_ops->queue_uring_cmd(ioucmd, qid);
         |                        ~~~~~~~~~  ^
>> drivers/nvme/host/ioctl.c:719:32: error: no member named 'poll_uring_cmd' in 'struct blk_mq_ops'
     719 |         if (!(q->mq_ops && q->mq_ops->poll_uring_cmd))
         |                            ~~~~~~~~~  ^
   drivers/nvme/host/ioctl.c:722:20: error: no member named 'poll_uring_cmd' in 'struct blk_mq_ops'
     722 |                 ret = q->mq_ops->poll_uring_cmd(ioucmd, qid, iob);
         |                       ~~~~~~~~~  ^
   drivers/nvme/host/ioctl.c:711:5: warning: no previous prototype for function 'nvme_uring_cmd_iopoll_qid' [-Wmissing-prototypes]
     711 | int nvme_uring_cmd_iopoll_qid(struct request_queue *q,
         |     ^
   drivers/nvme/host/ioctl.c:711:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     711 | int nvme_uring_cmd_iopoll_qid(struct request_queue *q,
         | ^
         | static 
   drivers/nvme/host/ioctl.c:754:13: error: call to undeclared function 'io_uring_cmd_import_qid'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
     754 |                 int qid = io_uring_cmd_import_qid(ioucmd);
         |                           ^
   drivers/nvme/host/ioctl.c:864:30: error: no member named 'register_queue' in 'struct blk_mq_ops'
     864 |         if (q->mq_ops && q->mq_ops->register_queue)
         |                          ~~~~~~~~~  ^
   drivers/nvme/host/ioctl.c:865:20: error: no member named 'register_queue' in 'struct blk_mq_ops'
     865 |                 ret = q->mq_ops->register_queue(ns);
         |                       ~~~~~~~~~  ^
   drivers/nvme/host/ioctl.c:888:30: error: no member named 'unregister_queue' in 'struct blk_mq_ops'
     888 |         if (q->mq_ops && q->mq_ops->unregister_queue)
         |                          ~~~~~~~~~  ^
   drivers/nvme/host/ioctl.c:889:20: error: no member named 'unregister_queue' in 'struct blk_mq_ops'
     889 |                 ret = q->mq_ops->unregister_queue(ns, qid);
         |                       ~~~~~~~~~  ^
   1 warning and 10 errors generated.

Kconfig warnings: (for reference only)
   WARNING: unmet direct dependencies detected for MFD_STMFX
   Depends on [n]: HAS_IOMEM [=y] && I2C [=y] && OF [=n]
   Selected by [y]:
   - PINCTRL_STMFX [=y] && PINCTRL [=y] && I2C [=y] && HAS_IOMEM [=y]


vim +566 drivers/nvme/host/ioctl.c

   553	
   554	static int nvme_uring_cmd_io_direct(struct nvme_ctrl *ctrl, struct nvme_ns *ns,
   555			struct io_uring_cmd *ioucmd, unsigned int issue_flags)
   556	{
   557		struct request_queue *q = ns ? ns->queue : ctrl->admin_q;
   558		int qid = io_uring_cmd_import_qid(ioucmd);
   559		struct nvme_uring_direct_pdu *pdu =
   560			(struct nvme_uring_direct_pdu *)&ioucmd->pdu;
   561	
   562		if ((issue_flags & IO_URING_F_IOPOLL) != IO_URING_F_IOPOLL)
   563			return -EOPNOTSUPP;
   564	
   565		pdu->ns = ns;
 > 566		if (q->mq_ops && q->mq_ops->queue_uring_cmd)
   567			return q->mq_ops->queue_uring_cmd(ioucmd, qid);
   568		return -EOPNOTSUPP;
   569	}
   570	
   571	static int nvme_ctrl_ioctl(struct nvme_ctrl *ctrl, unsigned int cmd,
   572			void __user *argp, bool open_for_write)
   573	{
   574		switch (cmd) {
   575		case NVME_IOCTL_ADMIN_CMD:
   576			return nvme_user_cmd(ctrl, NULL, argp, 0, open_for_write);
   577		case NVME_IOCTL_ADMIN64_CMD:
   578			return nvme_user_cmd64(ctrl, NULL, argp, 0, open_for_write);
   579		default:
   580			return sed_ioctl(ctrl->opal_dev, cmd, argp);
   581		}
   582	}
   583	
   584	#ifdef COMPAT_FOR_U64_ALIGNMENT
   585	struct nvme_user_io32 {
   586		__u8	opcode;
   587		__u8	flags;
   588		__u16	control;
   589		__u16	nblocks;
   590		__u16	rsvd;
   591		__u64	metadata;
   592		__u64	addr;
   593		__u64	slba;
   594		__u32	dsmgmt;
   595		__u32	reftag;
   596		__u16	apptag;
   597		__u16	appmask;
   598	} __attribute__((__packed__));
   599	#define NVME_IOCTL_SUBMIT_IO32	_IOW('N', 0x42, struct nvme_user_io32)
   600	#endif /* COMPAT_FOR_U64_ALIGNMENT */
   601	
   602	static int nvme_ns_ioctl(struct nvme_ns *ns, unsigned int cmd,
   603			void __user *argp, unsigned int flags, bool open_for_write)
   604	{
   605		switch (cmd) {
   606		case NVME_IOCTL_ID:
   607			force_successful_syscall_return();
   608			return ns->head->ns_id;
   609		case NVME_IOCTL_IO_CMD:
   610			return nvme_user_cmd(ns->ctrl, ns, argp, flags, open_for_write);
   611		/*
   612		 * struct nvme_user_io can have different padding on some 32-bit ABIs.
   613		 * Just accept the compat version as all fields that are used are the
   614		 * same size and at the same offset.
   615		 */
   616	#ifdef COMPAT_FOR_U64_ALIGNMENT
   617		case NVME_IOCTL_SUBMIT_IO32:
   618	#endif
   619		case NVME_IOCTL_SUBMIT_IO:
   620			return nvme_submit_io(ns, argp);
   621		case NVME_IOCTL_IO64_CMD_VEC:
   622			flags |= NVME_IOCTL_VEC;
   623			fallthrough;
   624		case NVME_IOCTL_IO64_CMD:
   625			return nvme_user_cmd64(ns->ctrl, ns, argp, flags,
   626					       open_for_write);
   627		default:
   628			return -ENOTTY;
   629		}
   630	}
   631	
   632	int nvme_ioctl(struct block_device *bdev, blk_mode_t mode,
   633			unsigned int cmd, unsigned long arg)
   634	{
   635		struct nvme_ns *ns = bdev->bd_disk->private_data;
   636		bool open_for_write = mode & BLK_OPEN_WRITE;
   637		void __user *argp = (void __user *)arg;
   638		unsigned int flags = 0;
   639	
   640		if (bdev_is_partition(bdev))
   641			flags |= NVME_IOCTL_PARTITION;
   642	
   643		if (is_ctrl_ioctl(cmd))
   644			return nvme_ctrl_ioctl(ns->ctrl, cmd, argp, open_for_write);
   645		return nvme_ns_ioctl(ns, cmd, argp, flags, open_for_write);
   646	}
   647	
   648	long nvme_ns_chr_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
   649	{
   650		struct nvme_ns *ns =
   651			container_of(file_inode(file)->i_cdev, struct nvme_ns, cdev);
   652		bool open_for_write = file->f_mode & FMODE_WRITE;
   653		void __user *argp = (void __user *)arg;
   654	
   655		if (is_ctrl_ioctl(cmd))
   656			return nvme_ctrl_ioctl(ns->ctrl, cmd, argp, open_for_write);
   657		return nvme_ns_ioctl(ns, cmd, argp, 0, open_for_write);
   658	}
   659	
   660	static int nvme_uring_cmd_checks(unsigned int issue_flags)
   661	{
   662	
   663		/* NVMe passthrough requires big SQE/CQE support */
   664		if ((issue_flags & (IO_URING_F_SQE128|IO_URING_F_CQE32)) !=
   665		    (IO_URING_F_SQE128|IO_URING_F_CQE32))
   666			return -EOPNOTSUPP;
   667		return 0;
   668	}
   669	
   670	static int nvme_ns_uring_cmd(struct nvme_ns *ns, struct io_uring_cmd *ioucmd,
   671				     unsigned int issue_flags)
   672	{
   673		struct nvme_ctrl *ctrl = ns->ctrl;
   674		int ret;
   675	
   676		ret = nvme_uring_cmd_checks(issue_flags);
   677		if (ret)
   678			return ret;
   679	
   680		switch (ioucmd->cmd_op) {
   681		case NVME_URING_CMD_IO:
   682			if (ioucmd->flags & IORING_URING_CMD_DIRECT) {
   683				ret = nvme_uring_cmd_io_direct(ctrl, ns, ioucmd,
   684						issue_flags);
   685				if (ret == -EIOCBQUEUED)
   686					return ret;
   687				/* in case of any error, just fallback */
   688				ioucmd->flags &= ~(IORING_URING_CMD_DIRECT);
   689			}
   690			ret = nvme_uring_cmd_io(ctrl, ns, ioucmd, issue_flags, false);
   691			break;
   692		case NVME_URING_CMD_IO_VEC:
   693			ret = nvme_uring_cmd_io(ctrl, ns, ioucmd, issue_flags, true);
   694			break;
   695		default:
   696			ret = -ENOTTY;
   697		}
   698	
   699		return ret;
   700	}
   701	
   702	int nvme_ns_chr_uring_cmd(struct io_uring_cmd *ioucmd, unsigned int issue_flags)
   703	{
   704		struct nvme_ns *ns = container_of(file_inode(ioucmd->file)->i_cdev,
   705				struct nvme_ns, cdev);
   706	
   707		return nvme_ns_uring_cmd(ns, ioucmd, issue_flags);
   708	}
   709	
   710	/* similar to blk_mq_poll; may be possible to unify */
   711	int nvme_uring_cmd_iopoll_qid(struct request_queue *q,
   712					 struct io_uring_cmd *ioucmd, int qid,
   713					 struct io_comp_batch *iob,
   714					 unsigned int flags)
   715	{
   716		long state = get_current_state();
   717		int ret;
   718	
 > 719		if (!(q->mq_ops && q->mq_ops->poll_uring_cmd))
   720			return 0;
   721		do {
   722			ret = q->mq_ops->poll_uring_cmd(ioucmd, qid, iob);
   723			if (ret > 0) {
   724				__set_current_state(TASK_RUNNING);
   725				return ret;
   726			}
   727			if (signal_pending_state(state, current))
   728				__set_current_state(TASK_RUNNING);
   729			if (task_is_running(current))
   730				return 1;
   731	
   732			if (ret < 0 || (flags & BLK_POLL_ONESHOT))
   733				break;
   734			cpu_relax();
   735	
   736		} while (!need_resched());
   737	
   738		__set_current_state(TASK_RUNNING);
   739		return 0;
   740	}
   741	

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

                 reply	other threads:[~2026-05-07  6:36 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=202605071449.cb0U5rca-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=axboe@kernel.dk \
    --cc=joshi.k@samsung.com \
    --cc=llvm@lists.linux.dev \
    --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.