All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] powerpc/kexec/core: use big-endian types for crash variables
@ 2025-12-24 15:12 Sourabh Jain
  2026-01-02 11:12 ` Venkat Rao Bagalkote
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Sourabh Jain @ 2025-12-24 15:12 UTC (permalink / raw)
  To: linuxppc-dev
  Cc: Sourabh Jain, kernel test robot, Christophe Leroy (CS GROUP),
	Hari Bathini, Madhavan Srinivasan, Mahesh Salgaonkar,
	Michael Ellerman, Ritesh Harjani (IBM), Sachin Sant,
	Shivang Upadhyay, Venkat Rao Bagalkote, kexec

Use explicit word-sized big-endian types for kexec and crash related
variables. This makes the endianness unambiguous and avoids type
mismatches that trigger sparse warnings.

The change addresses sparse warnings like below (seen on both 32-bit
and 64-bit builds):

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

No functional change intended.

Fixes: ea961a828fe7 ("powerpc: Fix endian issues in kexec and crash dump code")
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202512221405.VHPKPjnp-lkp@intel.com/
Cc: Christophe Leroy (CS GROUP) <chleroy@kernel.org>
Cc: Hari Bathini <hbathini@linux.ibm.com>
Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
Cc: Mahesh Salgaonkar <mahesh@linux.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
Cc: Sachin Sant <sachinp@linux.ibm.com>
Cc: Shivang Upadhyay <shivangu@linux.ibm.com>
Cc: Venkat Rao Bagalkote <venkat88@linux.ibm.com>
Cc: kexec@lists.infradead.org
Signed-off-by: Sourabh Jain <sourabhjain@linux.ibm.com>
---
 arch/powerpc/kexec/core.c | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/arch/powerpc/kexec/core.c b/arch/powerpc/kexec/core.c
index 104c05520bf0..dc44f11be353 100644
--- a/arch/powerpc/kexec/core.c
+++ b/arch/powerpc/kexec/core.c
@@ -23,6 +23,7 @@
 #include <asm/firmware.h>
 
 #define cpu_to_be_ulong __PASTE(cpu_to_be, BITS_PER_LONG)
+#define __be_word __PASTE(__be, BITS_PER_LONG)
 
 #ifdef CONFIG_CRASH_DUMP
 void machine_crash_shutdown(struct pt_regs *regs)
@@ -146,25 +147,25 @@ int __init overlaps_crashkernel(unsigned long start, unsigned long size)
 }
 
 /* Values we need to export to the second kernel via the device tree. */
-static phys_addr_t crashk_base;
-static phys_addr_t crashk_size;
-static unsigned long long mem_limit;
+static __be_word crashk_base;
+static __be_word crashk_size;
+static __be_word mem_limit;
 
 static struct property crashk_base_prop = {
 	.name = "linux,crashkernel-base",
-	.length = sizeof(phys_addr_t),
+	.length = sizeof(__be_word),
 	.value = &crashk_base
 };
 
 static struct property crashk_size_prop = {
 	.name = "linux,crashkernel-size",
-	.length = sizeof(phys_addr_t),
+	.length = sizeof(__be_word),
 	.value = &crashk_size,
 };
 
 static struct property memory_limit_prop = {
 	.name = "linux,memory-limit",
-	.length = sizeof(unsigned long long),
+	.length = sizeof(__be_word),
 	.value = &mem_limit,
 };
 
@@ -193,11 +194,11 @@ static void __init export_crashk_values(struct device_node *node)
 }
 #endif /* CONFIG_CRASH_RESERVE */
 
-static phys_addr_t kernel_end;
+static __be_word kernel_end;
 
 static struct property kernel_end_prop = {
 	.name = "linux,kernel-end",
-	.length = sizeof(phys_addr_t),
+	.length = sizeof(__be_word),
 	.value = &kernel_end,
 };
 
-- 
2.51.1



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] powerpc/kexec/core: use big-endian types for crash variables
  2025-12-24 15:12 [PATCH] powerpc/kexec/core: use big-endian types for crash variables Sourabh Jain
@ 2026-01-02 11:12 ` Venkat Rao Bagalkote
  2026-03-08 21:29 ` Aditya Gupta
  2026-03-11  2:14 ` Madhavan Srinivasan
  2 siblings, 0 replies; 5+ messages in thread
From: Venkat Rao Bagalkote @ 2026-01-02 11:12 UTC (permalink / raw)
  To: Sourabh Jain, linuxppc-dev
  Cc: kernel test robot, Christophe Leroy (CS GROUP), Hari Bathini,
	Madhavan Srinivasan, Mahesh Salgaonkar, Michael Ellerman,
	Ritesh Harjani (IBM), Sachin Sant, Shivang Upadhyay, kexec


On 24/12/25 8:42 pm, Sourabh Jain wrote:
> Use explicit word-sized big-endian types for kexec and crash related
> variables. This makes the endianness unambiguous and avoids type
> mismatches that trigger sparse warnings.
>
> The change addresses sparse warnings like below (seen on both 32-bit
> and 64-bit builds):
>
> CHECK   ../arch/powerpc/kexec/core.c
> sparse:    expected unsigned int static [addressable] [toplevel] [usertype] crashk_base
> sparse:    got restricted __be32 [usertype]
> sparse: warning: incorrect type in assignment (different base types)
> sparse:    expected unsigned int static [addressable] [toplevel] [usertype] crashk_size
> sparse:    got restricted __be32 [usertype]
> sparse: warning: incorrect type in assignment (different base types)
> sparse:    expected unsigned long long static [addressable] [toplevel] mem_limit
> sparse:    got restricted __be32 [usertype]
> sparse: warning: incorrect type in assignment (different base types)
> sparse:    expected unsigned int static [addressable] [toplevel] [usertype] kernel_end
> sparse:    got restricted __be32 [usertype]
>
> No functional change intended.
>
> Fixes: ea961a828fe7 ("powerpc: Fix endian issues in kexec and crash dump code")
> Reported-by: kernel test robot <lkp@intel.com>
> Closes: https://lore.kernel.org/oe-kbuild-all/202512221405.VHPKPjnp-lkp@intel.com/
> Cc: Christophe Leroy (CS GROUP) <chleroy@kernel.org>
> Cc: Hari Bathini <hbathini@linux.ibm.com>
> Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
> Cc: Mahesh Salgaonkar <mahesh@linux.ibm.com>
> Cc: Michael Ellerman <mpe@ellerman.id.au>
> Cc: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
> Cc: Sachin Sant <sachinp@linux.ibm.com>
> Cc: Shivang Upadhyay <shivangu@linux.ibm.com>
> Cc: Venkat Rao Bagalkote <venkat88@linux.ibm.com>
> Cc: kexec@lists.infradead.org
> Signed-off-by: Sourabh Jain <sourabhjain@linux.ibm.com>
> ---


Tested this patch, by applying on top of mainline repo and it fixes the 
reported issue.

Please add below tag.


Tested-by: Venkat Rao Bagalkote <venkat88@linux.ibm.com>



Logs:


make -C /root/linux O=/root/build_dir ARCH=powerpc CC=clang W=1 C=1 
CHECKFLAGS="-Wbitwise -Wcast-to-as -Waddress-space" V=1 arch/powerpc/kexec/
make: Entering directory '/root/linux'
make  -C /root/build_dir \
-f /root/linux/Makefile arch/powerpc/kexec/
make[1]: Entering directory '/root/build_dir'
make --no-print-directory -C /root/build_dir \
-f /root/linux/Makefile arch/powerpc/kexec/
ln -fsn /root/linux source
# GEN     Makefile
   { echo "# Automatically generated by /root/linux/Makefile: don't 
edit"; echo "export KBUILD_OUTPUT = /root/build_dir"; echo "include 
/root/linux/Makefile"; } > Makefile
test -e .gitignore || \
{ echo "# this is build directory, ignore it"; echo "*"; } > .gitignore
make -f /root/linux/scripts/Makefile.build 
obj=arch/powerpc/kernel/syscalls all
make -f /root/linux/scripts/Makefile.build obj=scripts/basic
make -f /root/linux/scripts/Makefile.build obj=scripts/dtc
make -f /root/linux/scripts/Makefile.build obj=scripts
set -e; mkdir -p include/config/; trap "rm -f 
include/config/.tmp_kernel.release" EXIT; { 
/root/linux/scripts/setlocalversion /root/linux; } > 
include/config/.tmp_kernel.release; if [ ! -r 
include/config/kernel.release ] || ! cmp -s 
include/config/kernel.release include/config/.tmp_kernel.release; then : 
'  UPD     include/config/kernel.release'; mv -f 
include/config/.tmp_kernel.release include/config/kernel.release; fi
make -f /root/linux/scripts/Makefile.asm-headers 
obj=arch/powerpc/include/generated/uapi/asm \
generic=include/uapi/asm-generic
make -f /root/linux/scripts/Makefile.asm-headers 
obj=arch/powerpc/include/generated/asm \
generic=include/asm-generic
set -e; mkdir -p include/generated/uapi/linux/; trap "rm -f 
include/generated/uapi/linux/.tmp_version.h" EXIT; {     if [ 0 -gt 255 
]; then echo \#define LINUX_VERSION_CODE 398335; else echo \#define 
LINUX_VERSION_CODE 398080; fi; echo '#define KERNEL_VERSION(a,b,c) (((a) 
<< 16) + ((b) << 8) + ((c) > 255 ? 255 : (c)))'; echo \#define 
LINUX_VERSION_MAJOR 6; echo \#define LINUX_VERSION_PATCHLEVEL 19; echo 
\#define LINUX_VERSION_SUBLEVEL 0; } > 
include/generated/uapi/linux/.tmp_version.h; if [ ! -r 
include/generated/uapi/linux/version.h ] || ! cmp -s 
include/generated/uapi/linux/version.h 
include/generated/uapi/linux/.tmp_version.h; then : '  UPD 
  include/generated/uapi/linux/version.h'; mv -f 
include/generated/uapi/linux/.tmp_version.h 
include/generated/uapi/linux/version.h; fi
set -e; mkdir -p include/generated/; trap "rm -f 
include/generated/.tmp_utsrelease.h" EXIT; {     if [ `echo -n 
"6.19.0-rc3-00153-g662be6163c58" | wc -c ` -gt 64 ]; then echo 
'"6.19.0-rc3-00153-g662be6163c58" exceeds 64 characters' >&2; exit 1; 
fi; echo \#define UTS_RELEASE \"6.19.0-rc3-00153-g662be6163c58\"; } > 
include/generated/.tmp_utsrelease.h; if [ ! -r 
include/generated/utsrelease.h ] || ! cmp -s 
include/generated/utsrelease.h include/generated/.tmp_utsrelease.h; then 
: '  UPD  include/generated/utsrelease.h'; mv -f 
include/generated/.tmp_utsrelease.h include/generated/utsrelease.h; fi
set -e; mkdir -p include/generated/; trap "rm -f 
include/generated/.tmp_compile.h" EXIT; { 
/root/linux/scripts/mkcompile_h "ppc" "clang version 18.1.8 (Red Hat, 
Inc. 18.1.8-3.el9)" "ld"; } > include/generated/.tmp_compile.h; if [ ! 
-r include/generated/compile.h ] || ! cmp -s include/generated/compile.h 
include/generated/.tmp_compile.h; then : '  UPD    
  include/generated/compile.h'; mv -f include/generated/.tmp_compile.h 
include/generated/compile.h; fi
/root/linux/scripts/remove-stale-files
make -f /root/linux/scripts/Makefile.build obj=scripts/mod
set -e; mkdir -p scripts/mod/; trap "rm -f 
scripts/mod/.tmp_devicetable-offsets.h" EXIT; {      echo "#ifndef 
__DEVICETABLE_OFFSETS_H__"; echo "#define __DEVICETABLE_OFFSETS_H__"; 
echo "/*"; echo " * DO NOT MODIFY."; echo " *"; echo " * This file was 
generated by Kbuild"; echo " */"; echo ""; sed -ne 
  's:^[[:space:]]*\.ascii[[:space:]]*"\(.*\)".*:\1:; 
/^->/{s:->#\(.*\):/* \1 */:; s:^->\([^ ]*\) [\$#]*\([^ ]*\) 
\(.*\):#define \1 \2 /* \3 */:; s:->::; p;}' < 
scripts/mod/devicetable-offsets.s; echo ""; echo "#endif"; } > 
scripts/mod/.tmp_devicetable-offsets.h; if [ ! -r 
scripts/mod/devicetable-offsets.h ] || ! cmp -s 
scripts/mod/devicetable-offsets.h 
scripts/mod/.tmp_devicetable-offsets.h; then : '  UPD 
  scripts/mod/devicetable-offsets.h'; mv -f 
scripts/mod/.tmp_devicetable-offsets.h scripts/mod/devicetable-offsets.h; fi
make -f /root/linux/scripts/Makefile.build obj=. prepare
set -e; mkdir -p include/generated/; trap "rm -f 
include/generated/.tmp_timeconst.h" EXIT; { echo 250 | bc -q 
/root/linux/kernel/time/timeconst.bc; } > 
include/generated/.tmp_timeconst.h; if [ ! -r 
include/generated/timeconst.h ] || ! cmp -s 
include/generated/timeconst.h include/generated/.tmp_timeconst.h; then : 
'  UPD     include/generated/timeconst.h'; mv -f 
include/generated/.tmp_timeconst.h include/generated/timeconst.h; fi
set -e; mkdir -p include/generated/; trap "rm -f 
include/generated/.tmp_bounds.h" EXIT; {      echo "#ifndef 
__LINUX_BOUNDS_H__"; echo "#define __LINUX_BOUNDS_H__"; echo "/*"; echo 
" * DO NOT MODIFY."; echo " *"; echo " * This file was generated by 
Kbuild"; echo " */"; echo ""; sed -ne 
  's:^[[:space:]]*\.ascii[[:space:]]*"\(.*\)".*:\1:; 
/^->/{s:->#\(.*\):/* \1 */:; s:^->\([^ ]*\) [\$#]*\([^ ]*\) 
\(.*\):#define \1 \2 /* \3 */:; s:->::; p;}' < kernel/bounds.s; echo ""; 
echo "#endif"; } > include/generated/.tmp_bounds.h; if [ ! -r 
include/generated/bounds.h ] || ! cmp -s include/generated/bounds.h 
include/generated/.tmp_bounds.h; then : '  UPD    
  include/generated/bounds.h'; mv -f include/generated/.tmp_bounds.h 
include/generated/bounds.h; fi
set -e; mkdir -p include/generated/; trap "rm -f 
include/generated/.tmp_asm-offsets.h" EXIT; {      echo "#ifndef 
__ASM_OFFSETS_H__"; echo "#define __ASM_OFFSETS_H__"; echo "/*"; echo " 
* DO NOT MODIFY."; echo " *"; echo " * This file was generated by 
Kbuild"; echo " */"; echo ""; sed -ne 
  's:^[[:space:]]*\.ascii[[:space:]]*"\(.*\)".*:\1:; 
/^->/{s:->#\(.*\):/* \1 */:; s:^->\([^ ]*\) [\$#]*\([^ ]*\) 
\(.*\):#define \1 \2 /* \3 */:; s:->::; p;}' < 
arch/powerpc/kernel/asm-offsets.s; echo ""; echo "#endif"; } > 
include/generated/.tmp_asm-offsets.h; if [ ! -r 
include/generated/asm-offsets.h ] || ! cmp -s 
include/generated/asm-offsets.h include/generated/.tmp_asm-offsets.h; 
then : '  UPD  include/generated/asm-offsets.h'; mv -f 
include/generated/.tmp_asm-offsets.h include/generated/asm-offsets.h; fi
set -e; mkdir -p include/generated/; trap "rm -f 
include/generated/.tmp_rq-offsets.h" EXIT; {      echo "#ifndef 
__RQ_OFFSETS_H__"; echo "#define __RQ_OFFSETS_H__"; echo "/*"; echo " * 
DO NOT MODIFY."; echo " *"; echo " * This file was generated by Kbuild"; 
echo " */"; echo ""; sed -ne 
  's:^[[:space:]]*\.ascii[[:space:]]*"\(.*\)".*:\1:; 
/^->/{s:->#\(.*\):/* \1 */:; s:^->\([^ ]*\) [\$#]*\([^ ]*\) 
\(.*\):#define \1 \2 /* \3 */:; s:->::; p;}' < 
kernel/sched/rq-offsets.s; echo ""; echo "#endif"; } > 
include/generated/.tmp_rq-offsets.h; if [ ! -r 
include/generated/rq-offsets.h ] || ! cmp -s 
include/generated/rq-offsets.h include/generated/.tmp_rq-offsets.h; then 
: '  UPD  include/generated/rq-offsets.h'; mv -f 
include/generated/.tmp_rq-offsets.h include/generated/rq-offsets.h; fi
# CALL    /root/linux/scripts/checksyscalls.sh
   sh /root/linux/scripts/checksyscalls.sh clang 
-Wp,-MMD,./.missing-syscalls.d -nostdinc 
-I/root/linux/arch/powerpc/include -I./arch/powerpc/include/generated 
-I/root/linux/include -I./include 
-I/root/linux/arch/powerpc/include/uapi 
-I./arch/powerpc/include/generated/uapi -I/root/linux/include/uapi 
-I./include/generated/uapi -include 
/root/linux/include/linux/compiler-version.h -include 
/root/linux/include/linux/kconfig.h -include 
/root/linux/include/linux/compiler_types.h -D__KERNEL__ 
--target=powerpc64le-linux-gnu -fintegrated-as 
-Werror=unknown-warning-option -Werror=ignored-optimization-argument 
-Werror=option-ignored -Werror=unused-command-line-argument -mbig-endian 
-m32 -I /root/linux/arch/powerpc -DHAVE_AS_ATHIGH=1 
-fmacro-prefix-map=/root/linux/= -Wundef -DKBUILD_EXTRA_WARN1 -std=gnu11 
-fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing 
-msoft-float -mcpu=powerpc -mno-prefixed -mno-pcrel -mno-altivec 
-mno-vsx -mno-mma -mno-spe -fno-asynchronous-unwind-tables -mbig-endian 
-fno-delete-null-pointer-checks -O2 -fno-stack-protector 
-fomit-frame-pointer -falign-functions=4 -fstrict-flex-arrays=3 
-fms-extensions -fno-strict-overflow -fno-stack-check 
-fno-builtin-wcslen -Wall -Wextra -Wundef 
-Werror=implicit-function-declaration -Werror=implicit-int 
-Werror=return-type -Werror=strict-prototypes -Wno-format-security 
-Wno-trigraphs -Wno-frame-address -Wno-address-of-packed-member 
-Wmissing-declarations -Wmissing-prototypes -Wframe-larger-than=1024 
-Wno-gnu -Wno-microsoft-anon-tag -Wno-format-overflow-non-kprintf 
-Wno-format-truncation-non-kprintf -Wno-pointer-sign 
-Wcast-function-type -Wimplicit-fallthrough -Werror=date-time 
-Werror=incompatible-pointer-types -Wenum-conversion -Wunused 
-Wmissing-format-attribute -Wmissing-include-dirs 
-Wunused-const-variable -Wno-missing-field-initializers -Wno-type-limits 
-Wno-shift-negative-value -Wno-enum-enum-conversion -Wno-sign-compare 
-Wno-unused-parameter -I/root/linux/. -I.    
-DKBUILD_MODFILE='"./missing-syscalls"' 
-DKBUILD_BASENAME='"missing_syscalls"' 
-DKBUILD_MODNAME='"missing_syscalls"' -D__KBUILD_MODNAME=missing_syscalls
mkdir -p ./tools
make O=/root/build_dir subdir=tools -C /root/linux/tools/ objtool
mkdir -p /root/build_dir/tools/objtool && make O=/root/build_dir 
subdir=tools/objtool --no-print-directory -C objtool
make -C /root/linux/tools/build CFLAGS= LDFLAGS= 
/root/build_dir/tools/objtool/fixdep
if [ ! -f /root/build_dir/tools/objtool/fixdep ]; then             \
     make -f /root/linux/tools/build/Makefile.build dir=. obj=fixdep 
HOSTCFLAGS="-Wall -Wmissing-prototypes -Wstrict-prototypes -O2 
-fomit-frame-pointer -std=gnu11   -I /root/linux/scripts/include";    \
     rm -f /root/build_dir/tools/objtool/fixdep.o;       \
fi
make -f /root/linux/tools/build/Makefile.build dir=. obj=fixdep 
HOSTCFLAGS="-Wall -Wmissing-prototypes -Wstrict-prototypes -O2 
-fomit-frame-pointer -std=gnu11   -I /root/linux/scripts/include"
make -C /root/linux/tools/lib/subcmd/ 
O=/root/build_dir/tools/objtool/libsubcmd \
     DESTDIR=/root/build_dir/tools/objtool/libsubcmd prefix= subdir= \
     CC="gcc" LD="ld" AR="ar" EXTRA_CFLAGS="-std=gnu11 
-fomit-frame-pointer -O2 -g -Werror -Wall -Wextra -Wmissing-prototypes 
-Wmissing-declarations -Wwrite-strings -Wno-implicit-fallthrough 
-Wno-sign-compare -Wno-unused-parameter -I/root/linux/tools/include 
-I/root/linux/tools/include/uapi 
-I/root/linux/tools/arch/powerpc/include/uapi 
-I/root/linux/tools/arch/powerpc/include 
-I/root/linux/tools/objtool/include 
-I/root/linux/tools/objtool/arch/powerpc/include 
-I/root/build_dir/tools/objtool/libsubcmd/include   " \
     /root/build_dir/tools/objtool/libsubcmd/libsubcmd.a install_headers
make -C /root/linux/tools/build CFLAGS= LDFLAGS= 
/root/build_dir/tools/objtool/libsubcmd/fixdep
if [ ! -f /root/build_dir/tools/objtool/libsubcmd/fixdep ]; then         
               \
     make -f /root/linux/tools/build/Makefile.build dir=. obj=fixdep 
HOSTCFLAGS="-Wall -Wmissing-prototypes -Wstrict-prototypes -O2 
-fomit-frame-pointer -std=gnu11   -I /root/linux/scripts/include";    \
     rm -f /root/build_dir/tools/objtool/libsubcmd/fixdep.o;             
     \
fi
make -f /root/linux/tools/build/Makefile.build dir=. obj=fixdep 
HOSTCFLAGS="-Wall -Wmissing-prototypes -Wstrict-prototypes -O2 
-fomit-frame-pointer -std=gnu11   -I /root/linux/scripts/include"
make[5]: 'install_headers' is up to date.
sh ./sync-check.sh
make -f /root/linux/tools/build/Makefile.build dir=. obj=objtool 
CC="gcc" LD="ld" AR="ar" CFLAGS="-std=gnu11 -fomit-frame-pointer -O2 -g 
-Werror -Wall -Wextra -Wmissing-prototypes -Wmissing-declarations 
-Wwrite-strings -Wno-implicit-fallthrough -Wno-sign-compare 
-Wno-unused-parameter -I/root/linux/tools/include 
-I/root/linux/tools/include/uapi 
-I/root/linux/tools/arch/powerpc/include/uapi 
-I/root/linux/tools/arch/powerpc/include 
-I/root/linux/tools/objtool/include 
-I/root/linux/tools/objtool/arch/powerpc/include 
-I/root/build_dir/tools/objtool/libsubcmd/include   " \
     LDFLAGS="/root/build_dir/tools/objtool/libsubcmd/libsubcmd.a -lelf   "
make -f /root/linux/tools/build/Makefile.build dir=./arch/powerpc 
obj=objtool
make -f /root/linux/scripts/Makefile.build obj=arch/powerpc/kernel/vdso 
include/generated/vdso32-offsets.h
make -f /root/linux/scripts/Makefile.build obj=. need-builtin=1 
need-modorder=1 ./arch/powerpc/kexec/
make -f /root/linux/scripts/Makefile.build obj=arch/powerpc \
need-builtin=1 \
need-modorder=1 \
arch/powerpc/kexec/
make -f /root/linux/scripts/Makefile.build obj=arch/powerpc/kexec \
need-builtin=1 \
need-modorder=1 \
arch/powerpc/kexec/
make[1]: Leaving directory '/root/build_dir'
make: Leaving directory '/root/linux'


Regards,

Venkat.


>   arch/powerpc/kexec/core.c | 17 +++++++++--------
>   1 file changed, 9 insertions(+), 8 deletions(-)
>
> diff --git a/arch/powerpc/kexec/core.c b/arch/powerpc/kexec/core.c
> index 104c05520bf0..dc44f11be353 100644
> --- a/arch/powerpc/kexec/core.c
> +++ b/arch/powerpc/kexec/core.c
> @@ -23,6 +23,7 @@
>   #include <asm/firmware.h>
>   
>   #define cpu_to_be_ulong __PASTE(cpu_to_be, BITS_PER_LONG)
> +#define __be_word __PASTE(__be, BITS_PER_LONG)
>   
>   #ifdef CONFIG_CRASH_DUMP
>   void machine_crash_shutdown(struct pt_regs *regs)
> @@ -146,25 +147,25 @@ int __init overlaps_crashkernel(unsigned long start, unsigned long size)
>   }
>   
>   /* Values we need to export to the second kernel via the device tree. */
> -static phys_addr_t crashk_base;
> -static phys_addr_t crashk_size;
> -static unsigned long long mem_limit;
> +static __be_word crashk_base;
> +static __be_word crashk_size;
> +static __be_word mem_limit;
>   
>   static struct property crashk_base_prop = {
>   	.name = "linux,crashkernel-base",
> -	.length = sizeof(phys_addr_t),
> +	.length = sizeof(__be_word),
>   	.value = &crashk_base
>   };
>   
>   static struct property crashk_size_prop = {
>   	.name = "linux,crashkernel-size",
> -	.length = sizeof(phys_addr_t),
> +	.length = sizeof(__be_word),
>   	.value = &crashk_size,
>   };
>   
>   static struct property memory_limit_prop = {
>   	.name = "linux,memory-limit",
> -	.length = sizeof(unsigned long long),
> +	.length = sizeof(__be_word),
>   	.value = &mem_limit,
>   };
>   
> @@ -193,11 +194,11 @@ static void __init export_crashk_values(struct device_node *node)
>   }
>   #endif /* CONFIG_CRASH_RESERVE */
>   
> -static phys_addr_t kernel_end;
> +static __be_word kernel_end;
>   
>   static struct property kernel_end_prop = {
>   	.name = "linux,kernel-end",
> -	.length = sizeof(phys_addr_t),
> +	.length = sizeof(__be_word),
>   	.value = &kernel_end,
>   };
>   


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] powerpc/kexec/core: use big-endian types for crash variables
  2025-12-24 15:12 [PATCH] powerpc/kexec/core: use big-endian types for crash variables Sourabh Jain
  2026-01-02 11:12 ` Venkat Rao Bagalkote
@ 2026-03-08 21:29 ` Aditya Gupta
  2026-03-10  3:33   ` Sourabh Jain
  2026-03-11  2:14 ` Madhavan Srinivasan
  2 siblings, 1 reply; 5+ messages in thread
From: Aditya Gupta @ 2026-03-08 21:29 UTC (permalink / raw)
  To: Sourabh Jain
  Cc: kernel test robot, Christophe Leroy (CS GROUP), Hari Bathini,
	Madhavan Srinivasan, Mahesh Salgaonkar, Michael Ellerman,
	Ritesh Harjani (IBM), Sachin Sant, Shivang Upadhyay,
	Venkat Rao Bagalkote, kexec

On 25/12/24 08:42PM, Sourabh Jain wrote:
> Use explicit word-sized big-endian types for kexec and crash related
> variables. This makes the endianness unambiguous and avoids type
> mismatches that trigger sparse warnings.
> 
> The change addresses sparse warnings like below (seen on both 32-bit
> and 64-bit builds):
> 
> <...snip...>
> ...
>
>  /* Values we need to export to the second kernel via the device tree. */
> -static phys_addr_t crashk_base;
> -static phys_addr_t crashk_size;
> -static unsigned long long mem_limit;
> +static __be_word crashk_base;
> +static __be_word crashk_size;
> +static __be_word mem_limit;
> ...
>  
>  static struct property memory_limit_prop = {
>  	.name = "linux,memory-limit",
> -	.length = sizeof(unsigned long long),
> +	.length = sizeof(__be_word),
>  	.value = &mem_limit,

'mem_limit' has slight change here. it used to be 64bit always,
but now on ppc32 it will be 32bit

I see only one usage of this in arch/powerpc/kernel/prom.c, and don't
see any issue with usage due to the 32-bit/64-bit memory_limit

For the patch:
Reviewed-by: Aditya Gupta <adityaglinux.ibm.com>

Thanks,
- Aditya G



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] powerpc/kexec/core: use big-endian types for crash variables
  2026-03-08 21:29 ` Aditya Gupta
@ 2026-03-10  3:33   ` Sourabh Jain
  0 siblings, 0 replies; 5+ messages in thread
From: Sourabh Jain @ 2026-03-10  3:33 UTC (permalink / raw)
  To: Aditya Gupta
  Cc: kernel test robot, Christophe Leroy (CS GROUP), Hari Bathini,
	Madhavan Srinivasan, Mahesh Salgaonkar, Michael Ellerman,
	Ritesh Harjani (IBM), Sachin Sant, Shivang Upadhyay,
	Venkat Rao Bagalkote, kexec



On 09/03/26 02:59, Aditya Gupta wrote:
> On 25/12/24 08:42PM, Sourabh Jain wrote:
>> Use explicit word-sized big-endian types for kexec and crash related
>> variables. This makes the endianness unambiguous and avoids type
>> mismatches that trigger sparse warnings.
>>
>> The change addresses sparse warnings like below (seen on both 32-bit
>> and 64-bit builds):
>>
>> <...snip...>
>> ...
>>
>>   /* Values we need to export to the second kernel via the device tree. */
>> -static phys_addr_t crashk_base;
>> -static phys_addr_t crashk_size;
>> -static unsigned long long mem_limit;
>> +static __be_word crashk_base;
>> +static __be_word crashk_size;
>> +static __be_word mem_limit;
>> ...
>>   
>>   static struct property memory_limit_prop = {
>>   	.name = "linux,memory-limit",
>> -	.length = sizeof(unsigned long long),
>> +	.length = sizeof(__be_word),
>>   	.value = &mem_limit,
> 'mem_limit' has slight change here. it used to be 64bit always,
> but now on ppc32 it will be 32bit
>
> I see only one usage of this in arch/powerpc/kernel/prom.c, and don't
> see any issue with usage due to the 32-bit/64-bit memory_limit
>
> For the patch:
> Reviewed-by: Aditya Gupta <adityaglinux.ibm.com>
Thank you for the review.

- Sourabh Jain


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] powerpc/kexec/core: use big-endian types for crash variables
  2025-12-24 15:12 [PATCH] powerpc/kexec/core: use big-endian types for crash variables Sourabh Jain
  2026-01-02 11:12 ` Venkat Rao Bagalkote
  2026-03-08 21:29 ` Aditya Gupta
@ 2026-03-11  2:14 ` Madhavan Srinivasan
  2 siblings, 0 replies; 5+ messages in thread
From: Madhavan Srinivasan @ 2026-03-11  2:14 UTC (permalink / raw)
  To: linuxppc-dev, Sourabh Jain
  Cc: kernel test robot, Christophe Leroy (CS GROUP), Hari Bathini,
	Mahesh Salgaonkar, Michael Ellerman, Ritesh Harjani (IBM),
	Sachin Sant, Shivang Upadhyay, Venkat Rao Bagalkote, kexec

On Wed, 24 Dec 2025 20:42:57 +0530, Sourabh Jain wrote:
> Use explicit word-sized big-endian types for kexec and crash related
> variables. This makes the endianness unambiguous and avoids type
> mismatches that trigger sparse warnings.
> 
> The change addresses sparse warnings like below (seen on both 32-bit
> and 64-bit builds):
> 
> [...]

Applied to powerpc/fixes.

[1/1] powerpc/kexec/core: use big-endian types for crash variables
      https://git.kernel.org/powerpc/c/20197b967a6a29dab81495f25a988515bda84cfe

cheers


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-03-11  2:15 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-24 15:12 [PATCH] powerpc/kexec/core: use big-endian types for crash variables Sourabh Jain
2026-01-02 11:12 ` Venkat Rao Bagalkote
2026-03-08 21:29 ` Aditya Gupta
2026-03-10  3:33   ` Sourabh Jain
2026-03-11  2:14 ` Madhavan Srinivasan

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.