arch/powerpc/kexec/core.c:217:20: sparse: sparse: incorrect type in assignment (different base types)

Sourabh Jain sourabhjain at linux.ibm.com
Tue Dec 23 23:57:19 AEDT 2025


+Cc: PowerPC mailing list.

and added some comments below.

On 22/12/25 12:14, kernel test robot wrote:
> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head:   9448598b22c50c8a5bb77a9103e2d49f134c9578
> commit: 38c64dfe0af12778953846df5f259e913275cfe5 kexec: Include kernel-end even without crashkernel
> date:   6 weeks ago
> config: powerpc-randconfig-r111-20251222 (https://download.01.org/0day-ci/archive/20251222/202512221405.VHPKPjnp-lkp@intel.com/config)
> compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project 42b3483ac4987cae1bdb632398e8a3ce2dea6633)
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251222/202512221405.VHPKPjnp-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 at intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202512221405.VHPKPjnp-lkp@intel.com/
>
> sparse warnings: (new ones prefixed by >>)
>>> arch/powerpc/kexec/core.c:217:20: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned int static [addressable] [toplevel] [usertype] kernel_end @@     got restricted __be32 [usertype] @@
>     arch/powerpc/kexec/core.c:217:20: sparse:     expected unsigned int static [addressable] [toplevel] [usertype] kernel_end
>     arch/powerpc/kexec/core.c:217:20: sparse:     got restricted __be32 [usertype]

If CONFIG_CRASH_DUMP is enabled (which is not done in config shared by 
kernel test robot) sparse warn
about other assignments in the same file. And these warnings are not 
limited to 32-bit.

../arch/powerpc/kexec/core.c:181:29: sparse: warning: incorrect type in 
assignment (different base types)
../arch/powerpc/kexec/core.c:181:29: sparse:    expected unsigned int 
static [addressable] [toplevel] [usertype] crashk_base
../arch/powerpc/kexec/core.c:181:29: sparse:    got restricted __be32 
[usertype]
../arch/powerpc/kexec/core.c:183:29: sparse: warning: incorrect type in 
assignment (different base types)
../arch/powerpc/kexec/core.c:183:29: sparse:    expected unsigned int 
static [addressable] [toplevel] [usertype] crashk_size
../arch/powerpc/kexec/core.c:183:29: sparse:    got restricted __be32 
[usertype]
../arch/powerpc/kexec/core.c:191:19: sparse: warning: incorrect type in 
assignment (different base types)
../arch/powerpc/kexec/core.c:191:19: sparse:    expected unsigned long 
long static [addressable] [toplevel] mem_limit
../arch/powerpc/kexec/core.c:191:19: sparse:    got restricted __be32 
[usertype]
../arch/powerpc/kexec/core.c:217:20: sparse: warning: incorrect type in 
assignment (different base types)
../arch/powerpc/kexec/core.c:217:20: sparse:    expected unsigned int 
static [addressable] [toplevel] [usertype] kernel_end
../arch/powerpc/kexec/core.c:217:20: sparse:    got restricted __be32 
[usertype]
   CHECK   ../arch/powerpc/kexec/core_32.c

To resolve these warnings:

Should we use __force tpyecast and silence the warnings?
for example:
kernel_end = (__force phys_addr_t) cpu_to_be_ulong(__pa(_end));

Or

Use proper data types __be<32|64> and duplicated the definition and 
assignment? seems like bit too much.

Or

Do we have better way to handle these warnings? If yes, please share.

- Sourabh Jain

>
> vim +217 arch/powerpc/kexec/core.c
>
> 6f29c3298b1821 arch/powerpc/kernel/machine_kexec.c Dale Farnsworth 2008-12-17  203
> 2e8e4f5b80e101 arch/powerpc/kernel/machine_kexec.c Dale Farnsworth 2008-12-16  204  static int __init kexec_setup(void)
> 2e8e4f5b80e101 arch/powerpc/kernel/machine_kexec.c Dale Farnsworth 2008-12-16  205  {
> 2e8e4f5b80e101 arch/powerpc/kernel/machine_kexec.c Dale Farnsworth 2008-12-16  206  	struct device_node *node;
> 2e8e4f5b80e101 arch/powerpc/kernel/machine_kexec.c Dale Farnsworth 2008-12-16  207
> 2e8e4f5b80e101 arch/powerpc/kernel/machine_kexec.c Dale Farnsworth 2008-12-16  208  	node = of_find_node_by_path("/chosen");
> 2e8e4f5b80e101 arch/powerpc/kernel/machine_kexec.c Dale Farnsworth 2008-12-16  209  	if (!node)
> 2e8e4f5b80e101 arch/powerpc/kernel/machine_kexec.c Dale Farnsworth 2008-12-16  210  		return -ENOENT;
> 2e8e4f5b80e101 arch/powerpc/kernel/machine_kexec.c Dale Farnsworth 2008-12-16  211
> 2e8e4f5b80e101 arch/powerpc/kernel/machine_kexec.c Dale Farnsworth 2008-12-16  212  	/* remove any stale properties so ours can be found */
> 38c64dfe0af127 arch/powerpc/kexec/core.c           Ben Collins     2025-04-21  213  	of_remove_property(node, of_find_property(node, kernel_end_prop.name,
> 38c64dfe0af127 arch/powerpc/kexec/core.c           Ben Collins     2025-04-21  214  						  NULL));
> 2e8e4f5b80e101 arch/powerpc/kernel/machine_kexec.c Dale Farnsworth 2008-12-16  215
> 2e8e4f5b80e101 arch/powerpc/kernel/machine_kexec.c Dale Farnsworth 2008-12-16  216  	/* information needed by userspace when using default_machine_kexec */
> ea961a828fe725 arch/powerpc/kernel/machine_kexec.c Anton Blanchard 2014-01-22 @217  	kernel_end = cpu_to_be_ulong(__pa(_end));
> 79d1c712958f94 arch/powerpc/kernel/machine_kexec.c Nathan Fontenot 2012-10-02  218  	of_add_property(node, &kernel_end_prop);
> 2e8e4f5b80e101 arch/powerpc/kernel/machine_kexec.c Dale Farnsworth 2008-12-16  219
>
> :::::: The code at line 217 was first introduced by commit
> :::::: ea961a828fe7250e954f086d74d9323c3d44c3e4 powerpc: Fix endian issues in kexec and crash dump code
>
> :::::: TO: Anton Blanchard <anton at samba.org>
> :::::: CC: Benjamin Herrenschmidt <benh at kernel.crashing.org>
>



More information about the Linuxppc-dev mailing list