Building the Linux kernel with Clang and LLVM
 help / color / mirror / Atom feed
* [axboe-block:for-next 69/81] block/blk-settings.c:200:20: error: incompatible pointer types passing 'unsigned int *' to parameter of type 'uint64_t *' (aka 'unsigned long long *')
@ 2024-06-21 21:56 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2024-06-21 21:56 UTC (permalink / raw)
  To: John Garry
  Cc: llvm, oe-kbuild-all, Jens Axboe, Himanshu Madhani,
	Martin K. Petersen, Keith Busch

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-next
head:   b398f439dc8f6eeb855ba46842cb5d127f39ae77
commit: 9da3d1e912f3953196e66991d75208cde3e845e1 [69/81] block: Add core atomic write support
config: arm-randconfig-003-20240622 (https://download.01.org/0day-ci/archive/20240622/202406220538.GuaaK0FH-lkp@intel.com/config)
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240622/202406220538.GuaaK0FH-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/202406220538.GuaaK0FH-lkp@intel.com/

Note: the axboe-block/for-next HEAD b398f439dc8f6eeb855ba46842cb5d127f39ae77 builds fine.
      It only hurts bisectability.

All error/warnings (new ones prefixed by >>):

>> block/blk-settings.c:200:20: warning: comparison of distinct pointer types ('typeof ((chunk_sectors)) *' (aka 'unsigned int *') and 'uint64_t *' (aka 'unsigned long long *')) [-Wcompare-distinct-pointer-types]
                   if (WARN_ON_ONCE(do_div(chunk_sectors, boundary_sectors)))
                       ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/asm-generic/div64.h:222:28: note: expanded from macro 'do_div'
           (void)(((typeof((n)) *)0) == ((uint64_t *)0));  \
                                     ^  ~~~~~~~~~~~~~~~
   include/asm-generic/bug.h:148:18: note: expanded from macro 'WARN_ON_ONCE'
           DO_ONCE_LITE_IF(condition, WARN_ON, 1)
           ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
   include/linux/once_lite.h:28:27: note: expanded from macro 'DO_ONCE_LITE_IF'
                   bool __ret_do_once = !!(condition);                     \
                                           ^~~~~~~~~
>> block/blk-settings.c:200:20: error: incompatible pointer types passing 'unsigned int *' to parameter of type 'uint64_t *' (aka 'unsigned long long *') [-Werror,-Wincompatible-pointer-types]
                   if (WARN_ON_ONCE(do_div(chunk_sectors, boundary_sectors)))
                       ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/asm-generic/div64.h:238:22: note: expanded from macro 'do_div'
                   __rem = __div64_32(&(n), __base);       \
                                      ^
   include/asm-generic/bug.h:148:18: note: expanded from macro 'WARN_ON_ONCE'
           DO_ONCE_LITE_IF(condition, WARN_ON, 1)
           ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
   include/linux/once_lite.h:28:27: note: expanded from macro 'DO_ONCE_LITE_IF'
                   bool __ret_do_once = !!(condition);                     \
                                           ^~~~~~~~~
   arch/arm/include/asm/div64.h:24:45: note: passing argument to parameter 'n' here
   static inline uint32_t __div64_32(uint64_t *n, uint32_t base)
                                               ^
>> block/blk-settings.c:200:20: warning: shift count >= width of type [-Wshift-count-overflow]
                   if (WARN_ON_ONCE(do_div(chunk_sectors, boundary_sectors)))
                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/asm-generic/div64.h:234:25: note: expanded from macro 'do_div'
           } else if (likely(((n) >> 32) == 0)) {          \
                                  ^  ~~
   include/linux/compiler.h:76:40: note: expanded from macro 'likely'
   # define likely(x)      __builtin_expect(!!(x), 1)
                                               ^
   include/asm-generic/bug.h:148:18: note: expanded from macro 'WARN_ON_ONCE'
           DO_ONCE_LITE_IF(condition, WARN_ON, 1)
                           ^~~~~~~~~
   include/linux/once_lite.h:28:27: note: expanded from macro 'DO_ONCE_LITE_IF'
                   bool __ret_do_once = !!(condition);                     \
                                           ^~~~~~~~~
   2 warnings and 1 error generated.


vim +200 block/blk-settings.c

   175	
   176	static void blk_validate_atomic_write_limits(struct queue_limits *lim)
   177	{
   178		unsigned int chunk_sectors = lim->chunk_sectors;
   179		unsigned int boundary_sectors;
   180	
   181		if (!lim->atomic_write_hw_max)
   182			goto unsupported;
   183	
   184		boundary_sectors = lim->atomic_write_hw_boundary >> SECTOR_SHIFT;
   185	
   186		if (boundary_sectors) {
   187			/*
   188			 * A feature of boundary support is that it disallows bios to
   189			 * be merged which would result in a merged request which
   190			 * crosses either a chunk sector or atomic write HW boundary,
   191			 * even though chunk sectors may be just set for performance.
   192			 * For simplicity, disallow atomic writes for a chunk sector
   193			 * which is non-zero and smaller than atomic write HW boundary.
   194			 * Furthermore, chunk sectors must be a multiple of atomic
   195			 * write HW boundary. Otherwise boundary support becomes
   196			 * complicated.
   197			 * Devices which do not conform to these rules can be dealt
   198			 * with if and when they show up.
   199			 */
 > 200			if (WARN_ON_ONCE(do_div(chunk_sectors, boundary_sectors)))
   201				goto unsupported;
   202	
   203			/*
   204			 * The boundary size just needs to be a multiple of unit_max
   205			 * (and not necessarily a power-of-2), so this following check
   206			 * could be relaxed in future.
   207			 * Furthermore, if needed, unit_max could even be reduced so
   208			 * that it is compliant with a !power-of-2 boundary.
   209			 */
   210			if (!is_power_of_2(boundary_sectors))
   211				goto unsupported;
   212		}
   213	
   214		blk_atomic_writes_update_limits(lim);
   215		return;
   216	
   217	unsupported:
   218		lim->atomic_write_max_sectors = 0;
   219		lim->atomic_write_boundary_sectors = 0;
   220		lim->atomic_write_unit_min = 0;
   221		lim->atomic_write_unit_max = 0;
   222	}
   223	

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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2024-06-21 21:56 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-21 21:56 [axboe-block:for-next 69/81] block/blk-settings.c:200:20: error: incompatible pointer types passing 'unsigned int *' to parameter of type 'uint64_t *' (aka 'unsigned long long *') kernel test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox