All of lore.kernel.org
 help / color / mirror / Atom feed
* [linux-nvme:nvme-6.13 7/7] drivers/nvme/target/pr.c:857:34: sparse: sparse: incorrect type in assignment (different base types)
@ 2024-11-08  3:18 kernel test robot
  2024-11-08  3:29 ` Guixin Liu
  0 siblings, 1 reply; 3+ messages in thread
From: kernel test robot @ 2024-11-08  3:18 UTC (permalink / raw)
  To: Guixin Liu
  Cc: oe-kbuild-all, linux-nvme, Keith Busch, Dmitry Bogdanov,
	Christoph Hellwig, Chaitanya Kulkarni

tree:   git://git.infradead.org/nvme.git nvme-6.13
head:   4c0ce9416cd06e9ef0e049f7a9226707c3786b1a
commit: 4c0ce9416cd06e9ef0e049f7a9226707c3786b1a [7/7] nvmet: support reservation feature
config: x86_64-randconfig-121-20241108 (https://download.01.org/0day-ci/archive/20241108/202411081109.soCWJfGT-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241108/202411081109.soCWJfGT-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/202411081109.soCWJfGT-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
>> drivers/nvme/target/pr.c:857:34: sparse: sparse: incorrect type in assignment (different base types) @@     expected restricted __le16 [usertype] cntlid @@     got int @@
   drivers/nvme/target/pr.c:857:34: sparse:     expected restricted __le16 [usertype] cntlid
   drivers/nvme/target/pr.c:857:34: sparse:     got int

vim +857 drivers/nvme/target/pr.c

   802	
   803	static void nvmet_execute_pr_report(struct nvmet_req *req)
   804	{
   805		u32 cdw11 = le32_to_cpu(req->cmd->common.cdw11);
   806		u32 cdw10 = le32_to_cpu(req->cmd->common.cdw10);
   807		u32 num_bytes = 4 * (cdw10 + 1); /* cdw10 is number of dwords */
   808		u8 eds = cdw11 & 1; /* Extended data structure, bit 00 */
   809		struct nvme_registered_ctrl_ext *ctrl_eds;
   810		struct nvme_reservation_status_ext *data;
   811		struct nvmet_pr *pr = &req->ns->pr;
   812		struct nvmet_pr_registrant *holder;
   813		struct nvmet_pr_registrant *reg;
   814		u16 num_ctrls = 0;
   815		u16 status;
   816		u8 rtype;
   817	
   818		/* nvmet hostid(uuid_t) is 128 bit. */
   819		if (!eds) {
   820			req->error_loc = offsetof(struct nvme_common_command, cdw11);
   821			status = NVME_SC_HOST_ID_INCONSIST | NVME_STATUS_DNR;
   822			goto out;
   823		}
   824	
   825		if (num_bytes < sizeof(struct nvme_reservation_status_ext)) {
   826			req->error_loc = offsetof(struct nvme_common_command, cdw10);
   827			status = NVME_SC_INVALID_FIELD | NVME_STATUS_DNR;
   828			goto out;
   829		}
   830	
   831		data = kmalloc(num_bytes, GFP_KERNEL);
   832		if (!data) {
   833			status = NVME_SC_INTERNAL;
   834			goto out;
   835		}
   836		memset(data, 0, num_bytes);
   837		data->gen = cpu_to_le32(atomic_read(&pr->generation));
   838		data->ptpls = 0;
   839		ctrl_eds = data->regctl_eds;
   840	
   841		rcu_read_lock();
   842		holder = rcu_dereference(pr->holder);
   843		rtype = holder ? holder->rtype : 0;
   844		data->rtype = rtype;
   845	
   846		list_for_each_entry_rcu(reg, &pr->registrant_list, entry) {
   847			num_ctrls++;
   848			/*
   849			 * continue to get the number of all registrans.
   850			 */
   851			if ((void *)(ctrl_eds + sizeof(*ctrl_eds)) >
   852				(void *)(data + num_bytes))
   853				continue;
   854			/*
   855			 * Dynamic controller, set cntlid to 0xffff.
   856			 */
 > 857			ctrl_eds->cntlid = NVME_CNTLID_DYNAMIC;
   858			if (rtype == NVME_PR_WRITE_EXCLUSIVE_ALL_REGS ||
   859			    rtype == NVME_PR_EXCLUSIVE_ACCESS_ALL_REGS)
   860				ctrl_eds->rcsts = 1;
   861			if (reg == holder)
   862				ctrl_eds->rcsts = 1;
   863			uuid_copy((uuid_t *)&ctrl_eds->hostid, &reg->hostid);
   864			ctrl_eds->rkey = cpu_to_le64(reg->rkey);
   865			ctrl_eds++;
   866		}
   867		rcu_read_unlock();
   868	
   869		put_unaligned_le16(num_ctrls, data->regctl);
   870		status = nvmet_copy_to_sgl(req, 0, data, num_bytes);
   871		kfree(data);
   872	out:
   873		nvmet_req_complete(req, status);
   874	}
   875	

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


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [linux-nvme:nvme-6.13 7/7] drivers/nvme/target/pr.c:857:34: sparse: sparse: incorrect type in assignment (different base types)
  2024-11-08  3:18 [linux-nvme:nvme-6.13 7/7] drivers/nvme/target/pr.c:857:34: sparse: sparse: incorrect type in assignment (different base types) kernel test robot
@ 2024-11-08  3:29 ` Guixin Liu
  2024-11-08  7:10   ` Christoph Hellwig
  0 siblings, 1 reply; 3+ messages in thread
From: Guixin Liu @ 2024-11-08  3:29 UTC (permalink / raw)
  To: kernel test robot, Keith Busch
  Cc: oe-kbuild-all, linux-nvme, Keith Busch, Dmitry Bogdanov,
	Christoph Hellwig, Chaitanya Kulkarni


在 2024/11/8 11:18, kernel test robot 写道:
> tree:   git://git.infradead.org/nvme.git nvme-6.13
> head:   4c0ce9416cd06e9ef0e049f7a9226707c3786b1a
> commit: 4c0ce9416cd06e9ef0e049f7a9226707c3786b1a [7/7] nvmet: support reservation feature
> config: x86_64-randconfig-121-20241108 (https://download.01.org/0day-ci/archive/20241108/202411081109.soCWJfGT-lkp@intel.com/config)
> compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241108/202411081109.soCWJfGT-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/202411081109.soCWJfGT-lkp@intel.com/
>
> sparse warnings: (new ones prefixed by >>)
>>> drivers/nvme/target/pr.c:857:34: sparse: sparse: incorrect type in assignment (different base types) @@     expected restricted __le16 [usertype] cntlid @@     got int @@
>     drivers/nvme/target/pr.c:857:34: sparse:     expected restricted __le16 [usertype] cntlid
>     drivers/nvme/target/pr.c:857:34: sparse:     got int
>
> vim +857 drivers/nvme/target/pr.c
>
>     802	
>     803	static void nvmet_execute_pr_report(struct nvmet_req *req)
>     804	{
>     805		u32 cdw11 = le32_to_cpu(req->cmd->common.cdw11);
>     806		u32 cdw10 = le32_to_cpu(req->cmd->common.cdw10);
>     807		u32 num_bytes = 4 * (cdw10 + 1); /* cdw10 is number of dwords */
>     808		u8 eds = cdw11 & 1; /* Extended data structure, bit 00 */
>     809		struct nvme_registered_ctrl_ext *ctrl_eds;
>     810		struct nvme_reservation_status_ext *data;
>     811		struct nvmet_pr *pr = &req->ns->pr;
>     812		struct nvmet_pr_registrant *holder;
>     813		struct nvmet_pr_registrant *reg;
>     814		u16 num_ctrls = 0;
>     815		u16 status;
>     816		u8 rtype;
>     817	
>     818		/* nvmet hostid(uuid_t) is 128 bit. */
>     819		if (!eds) {
>     820			req->error_loc = offsetof(struct nvme_common_command, cdw11);
>     821			status = NVME_SC_HOST_ID_INCONSIST | NVME_STATUS_DNR;
>     822			goto out;
>     823		}
>     824	
>     825		if (num_bytes < sizeof(struct nvme_reservation_status_ext)) {
>     826			req->error_loc = offsetof(struct nvme_common_command, cdw10);
>     827			status = NVME_SC_INVALID_FIELD | NVME_STATUS_DNR;
>     828			goto out;
>     829		}
>     830	
>     831		data = kmalloc(num_bytes, GFP_KERNEL);
>     832		if (!data) {
>     833			status = NVME_SC_INTERNAL;
>     834			goto out;
>     835		}
>     836		memset(data, 0, num_bytes);
>     837		data->gen = cpu_to_le32(atomic_read(&pr->generation));
>     838		data->ptpls = 0;
>     839		ctrl_eds = data->regctl_eds;
>     840	
>     841		rcu_read_lock();
>     842		holder = rcu_dereference(pr->holder);
>     843		rtype = holder ? holder->rtype : 0;
>     844		data->rtype = rtype;
>     845	
>     846		list_for_each_entry_rcu(reg, &pr->registrant_list, entry) {
>     847			num_ctrls++;
>     848			/*
>     849			 * continue to get the number of all registrans.
>     850			 */
>     851			if ((void *)(ctrl_eds + sizeof(*ctrl_eds)) >
>     852				(void *)(data + num_bytes))
>     853				continue;
>     854			/*
>     855			 * Dynamic controller, set cntlid to 0xffff.
>     856			 */
>   > 857			ctrl_eds->cntlid = NVME_CNTLID_DYNAMIC;

Hi Keith,

     I miss here should use cpu_to_le16, should I send a v20 to fix this?

Best Regards,

Guixin Liu

>     858			if (rtype == NVME_PR_WRITE_EXCLUSIVE_ALL_REGS ||
>     859			    rtype == NVME_PR_EXCLUSIVE_ACCESS_ALL_REGS)
>     860				ctrl_eds->rcsts = 1;
>     861			if (reg == holder)
>     862				ctrl_eds->rcsts = 1;
>     863			uuid_copy((uuid_t *)&ctrl_eds->hostid, &reg->hostid);
>     864			ctrl_eds->rkey = cpu_to_le64(reg->rkey);
>     865			ctrl_eds++;
>     866		}
>     867		rcu_read_unlock();
>     868	
>     869		put_unaligned_le16(num_ctrls, data->regctl);
>     870		status = nvmet_copy_to_sgl(req, 0, data, num_bytes);
>     871		kfree(data);
>     872	out:
>     873		nvmet_req_complete(req, status);
>     874	}
>     875	
>


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [linux-nvme:nvme-6.13 7/7] drivers/nvme/target/pr.c:857:34: sparse: sparse: incorrect type in assignment (different base types)
  2024-11-08  3:29 ` Guixin Liu
@ 2024-11-08  7:10   ` Christoph Hellwig
  0 siblings, 0 replies; 3+ messages in thread
From: Christoph Hellwig @ 2024-11-08  7:10 UTC (permalink / raw)
  To: Guixin Liu
  Cc: kernel test robot, Keith Busch, oe-kbuild-all, linux-nvme,
	Dmitry Bogdanov, Christoph Hellwig, Chaitanya Kulkarni

On Fri, Nov 08, 2024 at 11:29:35AM +0800, Guixin Liu wrote:
>     I miss here should use cpu_to_le16, should I send a v20 to fix this?
>
> Best Regards,

Just send an incremental fix that can be folded in.



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2024-11-08  7:10 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-08  3:18 [linux-nvme:nvme-6.13 7/7] drivers/nvme/target/pr.c:857:34: sparse: sparse: incorrect type in assignment (different base types) kernel test robot
2024-11-08  3:29 ` Guixin Liu
2024-11-08  7:10   ` Christoph Hellwig

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.