* [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, ®->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, ®->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.