Re: [kbuild-all] Re: [axboe-block:nvme-passthru-wip 10/19] drivers/nvme/host/ioctl.c:47:19: error: cast to pointer from integer of different size

From: Chen, Rong A
Date: Wed Oct 13 2021 - 01:24:42 EST




On 10/8/2021 8:35 PM, Jens Axboe wrote:
On 10/8/21 2:19 AM, Geert Uytterhoeven wrote:
On Fri, Oct 8, 2021 at 12:12 AM kernel test robot <lkp@xxxxxxxxx> wrote:
tree: https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git nvme-passthru-wip
head: 9c18980ac90053bcdb21594eae48935d89bf389c
commit: 5cc445dd8df6e06f3482711aa590170450364393 [10/19] nvme: wire-up support for async-passthru on char-device.
config: m68k-allmodconfig (attached as .config)
compiler: m68k-linux-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git/commit/?id=5cc445dd8df6e06f3482711aa590170450364393
git remote add axboe-block https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git
git fetch --no-tags axboe-block nvme-passthru-wip
git checkout 5cc445dd8df6e06f3482711aa590170450364393
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross ARCH=m68k

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>

All errors (new ones prefixed by >>):

drivers/nvme/host/ioctl.c: In function 'nvme_pt_task_cb':
drivers/nvme/host/ioctl.c:47:19: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]
47 | ptcmd64 = (void __user *) bcmd->unused2[0];
| ^
drivers/nvme/host/ioctl.c:62:58: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]
62 | struct nvme_passthru_cmd __user *ptcmd = (void *)bcmd->unused2[0];
| ^
drivers/nvme/host/ioctl.c: In function 'nvme_ns_async_ioctl':
drivers/nvme/host/ioctl.c:472:29: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]
472 | void __user *argp = (void __user *) bcmd->unused2[0];
| ^
cc1: all warnings being treated as errors


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

39
40 static void nvme_pt_task_cb(struct io_uring_cmd *ioucmd)
41 {
42 struct uring_cmd_data *ucd;
43 struct nvme_passthru_cmd64 __user *ptcmd64 = NULL;
44 struct block_uring_cmd *bcmd;
45
46 bcmd = (struct block_uring_cmd *) &ioucmd->pdu;
> 47 ptcmd64 = (void __user *) bcmd->unused2[0];

Casts from u64 to a pointer on 32-bit need an intermediate cast to uintptr_t:

ptcmd64 = (void __user *)(uintptr_t)bcmd->unused2[0];

Note that you can improve on the naming, as people may be surprised
discovering "unused2" is actually used ;-)

There's a reason the branch is called -wip, it's just a hodge podge of
stuff. Not sure why the kernel test robot bothers reporting failures
publicly for that...


Hi Jens,

We have changed the rule to not report the wip branches to public:

https://github.com/intel/lkp-tests/commit/f5f8d52830e342d51a200d5688b931faa0b786ea

Best Regards,
Rong Chen