Hi Liu,
since CMDR_OFF is defined as "sizeof(struct tcmu_mailbox)", we could
fix the warning by using %z. OTOH, the fields cmdr_off and cmdr_size
in struct tcmu_mailbox are defined as u32, as well as cmdr_size in
struct tcmu_dev.
So I think we should add a cast to u32 in the definition of CMDR_OFF.
That should allow us to use %u on all architectures. Additionally
it avoids expansion to long during calculations where CMDR_OFF is
involved.
Btw: in my comments I asked you to remove the "\n" in the sprintf for
DataPagesPerBlk. But of course we need a space instead to allow
proper parsing of the output.
Bodo
On 15.02.22 14:05, kernel test robot wrote:
Hi Guixin,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on mkp-scsi/for-next]
[also build test WARNING on v5.17-rc4 next-20220215]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Guixin-Liu/scsi-target-tcmu-Make-cmd_ring_size-changeable-via-configfs/20220215-160505
base: https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git for-next
config: x86_64-allyesconfig (https://download.01.org/0day-ci/archive/20220215/202202152052.AEF7jHIH-lkp@xxxxxxxxx/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce (this is a W=1 build):
# https://github.com/0day-ci/linux/commit/7f77700542b8196c546ef10656dda7a107d8d1ad
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Guixin-Liu/scsi-target-tcmu-Make-cmd_ring_size-changeable-via-configfs/20220215-160505
git checkout 7f77700542b8196c546ef10656dda7a107d8d1ad
# save the config file to linux build tree
mkdir build_dir
make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash drivers/target/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>
All warnings (new ones prefixed by >>):
drivers/target/target_core_user.c: In function 'tcmu_show_configfs_dev_params':
drivers/target/target_core_user.c:2627:41: warning: format '%u' expects argument of type 'unsigned int', but argument 3 has type 'long unsigned int' [-Wformat=]
2627 | bl += sprintf(b + bl, "CmdRingSizeMB: %u\n",
| ~^
| |
| unsigned int
| %lu
2628 | (udev->cmdr_size + CMDR_OFF) >> 20);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| |
| long unsigned int
drivers/target/target_core_user.c: In function 'tcmu_cmd_ring_size_mb_show':
drivers/target/target_core_user.c:2743:37: warning: format '%u' expects argument of type 'unsigned int', but argument 4 has type 'long unsigned int' [-Wformat=]
2743 | return snprintf(page, PAGE_SIZE, "%u\n",
| ~^
| |
| unsigned int
| %lu
2744 | (udev->cmdr_size + CMDR_OFF) >> 20);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| |
| long unsigned int
vim +2627 drivers/target/target_core_user.c
2616
2617 static ssize_t tcmu_show_configfs_dev_params(struct se_device *dev, char *b)
2618 {
2619 struct tcmu_dev *udev = TCMU_DEV(dev);
2620 ssize_t bl = 0;
2621
2622 bl = sprintf(b + bl, "Config: %s ",
2623 udev->dev_config[0] ? udev->dev_config : "NULL");
2624 bl += sprintf(b + bl, "Size: %llu ", udev->dev_size);
2625 bl += sprintf(b + bl, "MaxDataAreaMB: %u ", udev->data_area_mb);
2626 bl += sprintf(b + bl, "DataPagesPerBlk: %u", udev->data_pages_per_blk);
2627 bl += sprintf(b + bl, "CmdRingSizeMB: %u\n",
2628 (udev->cmdr_size + CMDR_OFF) >> 20);
2629
2630 return bl;
2631 }
2632
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx