Re: [PATCH v4 12/13] s390/kexec: refactor for kernel/Kconfig.kexec
On 7/6/23 10:58, Alexander Gordeev wrote: On Wed, Jul 05, 2023 at 08:49:58AM -0700, Nathan Chancellor wrote: ... I just bisected the following build failure visible with 'ARCH=s390 allnoconfig' to this change as commit 842ce0e1dafa ("s390/kexec: refactor for kernel/Kconfig.kexec") in -next. arch/s390/kernel/machine_kexec.c:120:37: warning: 'struct kimage' declared inside parameter list will not be visible outside of this definition or declaration 120 | static bool kdump_csum_valid(struct kimage *image) | ^~ arch/s390/kernel/machine_kexec.c:188:34: warning: 'struct kimage' declared inside parameter list will not be visible outside of this definition or declaration 188 | int machine_kexec_prepare(struct kimage *image) | ^~ arch/s390/kernel/machine_kexec.c: In function 'machine_kexec_prepare': arch/s390/kernel/machine_kexec.c:192:18: error: invalid use of undefined type 'struct kimage' 192 | if (image->type == KEXEC_TYPE_CRASH) | ^~ arch/s390/kernel/machine_kexec.c:192:28: error: 'KEXEC_TYPE_CRASH' undeclared (first use in this function); did you mean 'KEXEC_ON_CRASH'? 192 | if (image->type == KEXEC_TYPE_CRASH) |^~~~ |KEXEC_ON_CRASH arch/s390/kernel/machine_kexec.c:192:28: note: each undeclared identifier is reported only once for each function it appears in arch/s390/kernel/machine_kexec.c:196:18: error: invalid use of undefined type 'struct kimage' 196 | if (image->type != KEXEC_TYPE_DEFAULT) | ^~ arch/s390/kernel/machine_kexec.c:196:28: error: 'KEXEC_TYPE_DEFAULT' undeclared (first use in this function); did you mean 'KEXEC_ARCH_DEFAULT'? 196 | if (image->type != KEXEC_TYPE_DEFAULT) |^~ |KEXEC_ARCH_DEFAULT In file included from arch/s390/include/asm/thread_info.h:31, from include/linux/thread_info.h:60, from arch/s390/include/asm/preempt.h:6, from include/linux/preempt.h:79, from arch/s390/include/asm/percpu.h:5, from include/linux/irqflags.h:18, from include/linux/rcupdate.h:26, from include/linux/rculist.h:11, from include/linux/pid.h:5, from include/linux/sched.h:14, from include/linux/ratelimit.h:6, from include/linux/dev_printk.h:16, from include/linux/device.h:15, from arch/s390/kernel/machine_kexec.c:9: arch/s390/kernel/machine_kexec.c:200:48: error: invalid use of undefined type 'struct kimage' 200 | reboot_code_buffer = page_to_virt(image->control_code_page); |^~ arch/s390/include/asm/page.h:186:58: note: in definition of macro '__va' 186 | #define __va(x) ((void *)(unsigned long)(x)) | ^ arch/s390/include/asm/page.h:194:38: note: in expansion of macro 'pfn_to_phys' 194 | #define pfn_to_virt(pfn)__va(pfn_to_phys(pfn)) | ^~~ arch/s390/include/asm/page.h:199:33: note: in expansion of macro 'pfn_to_virt' 199 | #define page_to_virt(page) pfn_to_virt(page_to_pfn(page)) | ^~~ include/asm-generic/memory_model.h:64:21: note: in expansion of macro '__page_to_pfn' 64 | #define page_to_pfn __page_to_pfn | ^ arch/s390/kernel/machine_kexec.c:200:30: note: in expansion of macro 'page_to_virt' 200 | reboot_code_buffer = page_to_virt(image->control_code_page); | ^~~~ arch/s390/kernel/machine_kexec.c: At top level: arch/s390/kernel/machine_kexec.c:207:35: warning: 'struct kimage' declared inside parameter list will not be visible outside of this definition or declaration 207 | void machine_kexec_cleanup(struct kimage *image) | ^~ arch/s390/kernel/machine_kexec.c: In function '__do_machine_kexec': arch/s390/kernel/machine_kexec.c:243:40: error: invalid use of undefined type 'struct kimage' 243 | data_mover = page_to_phys(image->control_code_page); |^~ arch/s390/include/asm/page.h:189:35: note: in definition of macro 'pfn_to_phys' 189 | #define pfn_to_phys(pfn)((pfn) << PAGE_SHIFT) | ^~~ include/asm-generic/memory_model.h:64:21: note: in expansion o
Re: [PATCH v4 12/13] s390/kexec: refactor for kernel/Kconfig.kexec
On Wed, Jul 05, 2023 at 08:49:58AM -0700, Nathan Chancellor wrote: ... > I just bisected the following build failure visible with 'ARCH=s390 > allnoconfig' to this change as commit 842ce0e1dafa ("s390/kexec: > refactor for kernel/Kconfig.kexec") in -next. > > arch/s390/kernel/machine_kexec.c:120:37: warning: 'struct kimage' declared > inside parameter list will not be visible outside of this definition or > declaration > 120 | static bool kdump_csum_valid(struct kimage *image) > | ^~ > arch/s390/kernel/machine_kexec.c:188:34: warning: 'struct kimage' declared > inside parameter list will not be visible outside of this definition or > declaration > 188 | int machine_kexec_prepare(struct kimage *image) > | ^~ > arch/s390/kernel/machine_kexec.c: In function 'machine_kexec_prepare': > arch/s390/kernel/machine_kexec.c:192:18: error: invalid use of undefined > type 'struct kimage' > 192 | if (image->type == KEXEC_TYPE_CRASH) > | ^~ > arch/s390/kernel/machine_kexec.c:192:28: error: 'KEXEC_TYPE_CRASH' > undeclared (first use in this function); did you mean 'KEXEC_ON_CRASH'? > 192 | if (image->type == KEXEC_TYPE_CRASH) > |^~~~ > |KEXEC_ON_CRASH > arch/s390/kernel/machine_kexec.c:192:28: note: each undeclared identifier > is reported only once for each function it appears in > arch/s390/kernel/machine_kexec.c:196:18: error: invalid use of undefined > type 'struct kimage' > 196 | if (image->type != KEXEC_TYPE_DEFAULT) > | ^~ > arch/s390/kernel/machine_kexec.c:196:28: error: 'KEXEC_TYPE_DEFAULT' > undeclared (first use in this function); did you mean 'KEXEC_ARCH_DEFAULT'? > 196 | if (image->type != KEXEC_TYPE_DEFAULT) > |^~ > |KEXEC_ARCH_DEFAULT > In file included from arch/s390/include/asm/thread_info.h:31, >from include/linux/thread_info.h:60, >from arch/s390/include/asm/preempt.h:6, >from include/linux/preempt.h:79, >from arch/s390/include/asm/percpu.h:5, >from include/linux/irqflags.h:18, >from include/linux/rcupdate.h:26, >from include/linux/rculist.h:11, >from include/linux/pid.h:5, >from include/linux/sched.h:14, >from include/linux/ratelimit.h:6, >from include/linux/dev_printk.h:16, >from include/linux/device.h:15, >from arch/s390/kernel/machine_kexec.c:9: > arch/s390/kernel/machine_kexec.c:200:48: error: invalid use of undefined > type 'struct kimage' > 200 | reboot_code_buffer = page_to_virt(image->control_code_page); > |^~ > arch/s390/include/asm/page.h:186:58: note: in definition of macro '__va' > 186 | #define __va(x) ((void *)(unsigned long)(x)) > | ^ > arch/s390/include/asm/page.h:194:38: note: in expansion of macro > 'pfn_to_phys' > 194 | #define pfn_to_virt(pfn)__va(pfn_to_phys(pfn)) > | ^~~ > arch/s390/include/asm/page.h:199:33: note: in expansion of macro > 'pfn_to_virt' > 199 | #define page_to_virt(page) pfn_to_virt(page_to_pfn(page)) > | ^~~ > include/asm-generic/memory_model.h:64:21: note: in expansion of macro > '__page_to_pfn' > 64 | #define page_to_pfn __page_to_pfn > | ^ > arch/s390/kernel/machine_kexec.c:200:30: note: in expansion of macro > 'page_to_virt' > 200 | reboot_code_buffer = page_to_virt(image->control_code_page); > | ^~~~ > arch/s390/kernel/machine_kexec.c: At top level: > arch/s390/kernel/machine_kexec.c:207:35: warning: 'struct kimage' declared > inside parameter list will not be visible outside of this definition or > declaration > 207 | void machine_kexec_cleanup(struct kimage *image) > | ^~ > arch/s390/kernel/machine_kexec.c: In function '__do_machine_kexec': > arch/s390/kernel/machine_kexec.c:243:40: error: invalid use of undefined > type 'struct kimage' > 243 | data_mover = page_to_phys(image->control_code_page); > |^~ > arch/s390/include/asm/page.h:189:35: note: in definition of macro > 'pfn_to_phys' > 189 | #define pfn_to_phys(pfn)((pfn) << PAGE_SHIFT) > | ^~~ >
Re: [PATCH v4 12/13] s390/kexec: refactor for kernel/Kconfig.kexec
On 7/5/23 11:23, Eric DeVolder wrote: On 7/5/23 10:49, Nathan Chancellor wrote: Hi Eric, On Wed, Jul 05, 2023 at 10:20:03AM -0400, Eric DeVolder wrote: The kexec and crash kernel options are provided in the common kernel/Kconfig.kexec. Utilize the common options and provide the ARCH_SUPPORTS_ and ARCH_SELECTS_ entries to recreate the equivalent set of KEXEC and CRASH options. NOTE: The original Kconfig has a KEXEC_SIG which depends on MODULE_SIG_FORMAT. However, attempts to keep the MODULE_SIG_FORMAT dependency (using the strategy outlined in this series, and other techniques) results in 'error: recursive dependency detected' on CRYPTO. Per Alexander Gordeev : "the MODULE_SIG_FORMAT dependency was introduced with [git commit below] and in fact was not necessary, since s390 did/does not use mod_check_sig() anyway. commit c8424e776b09 ("MODSIGN: Export module signature definitions") MODULE_SIG_FORMAT is needed to select SYSTEM_DATA_VERIFICATION. But SYSTEM_DATA_VERIFICATION is also selected by FS_VERITY*, so dropping MODULE_SIG_FORMAT does not hurt." Therefore, the solution is to drop the MODULE_SIG_FORMAT dependency from KEXEC_SIG. Still results in equivalent .config files for s390. Signed-off-by: Eric DeVolder Acked-by: Alexander Gordeev --- arch/s390/Kconfig | 65 ++- 1 file changed, 19 insertions(+), 46 deletions(-) diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index 5b39918b7042..5d4fbbfdd1cd 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig @@ -244,6 +244,25 @@ config PGTABLE_LEVELS source "kernel/livepatch/Kconfig" +config ARCH_DEFAULT_KEXEC + def_bool y + +config ARCH_SUPPORTS_KEXEC + def_bool y + +config ARCH_SUPPORTS_KEXEC_FILE + def_bool CRYPTO && CRYPTO_SHA256 && CRYPTO_SHA256_S390 + +config ARCH_HAS_KEXEC_PURGATORY + def_bool KEXEC_FILE + +config ARCH_SUPPORTS_CRASH_DUMP + def_bool y + help + Refer to for more details on this. + This option also enables s390 zfcpdump. + See also + menu "Processor type and features" config HAVE_MARCH_Z10_FEATURES @@ -482,36 +501,6 @@ config SCHED_TOPOLOGY source "kernel/Kconfig.hz" -config KEXEC - def_bool y - select KEXEC_CORE - -config KEXEC_FILE - bool "kexec file based system call" - select KEXEC_CORE - depends on CRYPTO - depends on CRYPTO_SHA256 - depends on CRYPTO_SHA256_S390 - help - Enable the kexec file based system call. In contrast to the normal - kexec system call this system call takes file descriptors for the - kernel and initramfs as arguments. - -config ARCH_HAS_KEXEC_PURGATORY - def_bool y - depends on KEXEC_FILE - -config KEXEC_SIG - bool "Verify kernel signature during kexec_file_load() syscall" - depends on KEXEC_FILE && MODULE_SIG_FORMAT - help - This option makes kernel signature verification mandatory for - the kexec_file_load() syscall. - - In addition to that option, you need to enable signature - verification for the corresponding kernel image type being - loaded in order for this to work. - config KERNEL_NOBP def_bool n prompt "Enable modified branch prediction for the kernel by default" @@ -733,22 +722,6 @@ config VFIO_AP endmenu -menu "Dump support" - -config CRASH_DUMP - bool "kernel crash dumps" - select KEXEC - help - Generate crash dump after being started by kexec. - Crash dump kernels are loaded in the main kernel with kexec-tools - into a specially reserved region and then later executed after - a crash by kdump/kexec. - Refer to for more details on this. - This option also enables s390 zfcpdump. - See also - -endmenu - config CCW def_bool y -- 2.31.1 I just bisected the following build failure visible with 'ARCH=s390 allnoconfig' to this change as commit 842ce0e1dafa ("s390/kexec: refactor for kernel/Kconfig.kexec") in -next. arch/s390/kernel/machine_kexec.c:120:37: warning: 'struct kimage' declared inside parameter list will not be visible outside of this definition or declaration 120 | static bool kdump_csum_valid(struct kimage *image) | ^~ arch/s390/kernel/machine_kexec.c:188:34: warning: 'struct kimage' declared inside parameter list will not be visible outside of this definition or declaration 188 | int machine_kexec_prepare(struct kimage *image) | ^~ arch/s390/kernel/machine_kexec.c: In function 'machine_kexec_prepare': arch/s390/kernel/machine_kexec.c:192:18: error: invalid use of undefined type 'struct kimage' 192 | if (image->type == KEXEC_TYPE_CRASH) | ^~ arch/s390/kernel/machine_kexec.c:192:28: error: 'KEXEC_TYPE_CRASH' undeclared (first use in this function); did you mean 'KEXEC_ON_CRASH'? 192 | if (image->type == KEXEC_TYPE_CRASH) |
Re: [PATCH v4 12/13] s390/kexec: refactor for kernel/Kconfig.kexec
On 7/5/23 10:49, Nathan Chancellor wrote: Hi Eric, On Wed, Jul 05, 2023 at 10:20:03AM -0400, Eric DeVolder wrote: The kexec and crash kernel options are provided in the common kernel/Kconfig.kexec. Utilize the common options and provide the ARCH_SUPPORTS_ and ARCH_SELECTS_ entries to recreate the equivalent set of KEXEC and CRASH options. NOTE: The original Kconfig has a KEXEC_SIG which depends on MODULE_SIG_FORMAT. However, attempts to keep the MODULE_SIG_FORMAT dependency (using the strategy outlined in this series, and other techniques) results in 'error: recursive dependency detected' on CRYPTO. Per Alexander Gordeev : "the MODULE_SIG_FORMAT dependency was introduced with [git commit below] and in fact was not necessary, since s390 did/does not use mod_check_sig() anyway. commit c8424e776b09 ("MODSIGN: Export module signature definitions") MODULE_SIG_FORMAT is needed to select SYSTEM_DATA_VERIFICATION. But SYSTEM_DATA_VERIFICATION is also selected by FS_VERITY*, so dropping MODULE_SIG_FORMAT does not hurt." Therefore, the solution is to drop the MODULE_SIG_FORMAT dependency from KEXEC_SIG. Still results in equivalent .config files for s390. Signed-off-by: Eric DeVolder Acked-by: Alexander Gordeev --- arch/s390/Kconfig | 65 ++- 1 file changed, 19 insertions(+), 46 deletions(-) diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index 5b39918b7042..5d4fbbfdd1cd 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig @@ -244,6 +244,25 @@ config PGTABLE_LEVELS source "kernel/livepatch/Kconfig" +config ARCH_DEFAULT_KEXEC + def_bool y + +config ARCH_SUPPORTS_KEXEC + def_bool y + +config ARCH_SUPPORTS_KEXEC_FILE + def_bool CRYPTO && CRYPTO_SHA256 && CRYPTO_SHA256_S390 + +config ARCH_HAS_KEXEC_PURGATORY + def_bool KEXEC_FILE + +config ARCH_SUPPORTS_CRASH_DUMP + def_bool y + help + Refer to for more details on this. + This option also enables s390 zfcpdump. + See also + menu "Processor type and features" config HAVE_MARCH_Z10_FEATURES @@ -482,36 +501,6 @@ config SCHED_TOPOLOGY source "kernel/Kconfig.hz" -config KEXEC - def_bool y - select KEXEC_CORE - -config KEXEC_FILE - bool "kexec file based system call" - select KEXEC_CORE - depends on CRYPTO - depends on CRYPTO_SHA256 - depends on CRYPTO_SHA256_S390 - help - Enable the kexec file based system call. In contrast to the normal - kexec system call this system call takes file descriptors for the - kernel and initramfs as arguments. - -config ARCH_HAS_KEXEC_PURGATORY - def_bool y - depends on KEXEC_FILE - -config KEXEC_SIG - bool "Verify kernel signature during kexec_file_load() syscall" - depends on KEXEC_FILE && MODULE_SIG_FORMAT - help - This option makes kernel signature verification mandatory for - the kexec_file_load() syscall. - - In addition to that option, you need to enable signature - verification for the corresponding kernel image type being - loaded in order for this to work. - config KERNEL_NOBP def_bool n prompt "Enable modified branch prediction for the kernel by default" @@ -733,22 +722,6 @@ config VFIO_AP endmenu -menu "Dump support" - -config CRASH_DUMP - bool "kernel crash dumps" - select KEXEC - help - Generate crash dump after being started by kexec. - Crash dump kernels are loaded in the main kernel with kexec-tools - into a specially reserved region and then later executed after - a crash by kdump/kexec. - Refer to for more details on this. - This option also enables s390 zfcpdump. - See also - -endmenu - config CCW def_bool y -- 2.31.1 I just bisected the following build failure visible with 'ARCH=s390 allnoconfig' to this change as commit 842ce0e1dafa ("s390/kexec: refactor for kernel/Kconfig.kexec") in -next. arch/s390/kernel/machine_kexec.c:120:37: warning: 'struct kimage' declared inside parameter list will not be visible outside of this definition or declaration 120 | static bool kdump_csum_valid(struct kimage *image) | ^~ arch/s390/kernel/machine_kexec.c:188:34: warning: 'struct kimage' declared inside parameter list will not be visible outside of this definition or declaration 188 | int machine_kexec_prepare(struct kimage *image) | ^~ arch/s390/kernel/machine_kexec.c: In function 'machine_kexec_prepare': arch/s390/kernel/machine_kexec.c:192:18: error: invalid use of undefined type 'struct kimage' 192 | if (image->type == KEXEC_TYPE_CRASH) | ^~ arch/s390/kernel/machine_kexec.c:192:28: error: 'KEXEC_TYPE_CRASH' undeclared (first use in this function); did you me
Re: [PATCH v4 12/13] s390/kexec: refactor for kernel/Kconfig.kexec
Hi Eric, On Wed, Jul 05, 2023 at 10:20:03AM -0400, Eric DeVolder wrote: > The kexec and crash kernel options are provided in the common > kernel/Kconfig.kexec. Utilize the common options and provide > the ARCH_SUPPORTS_ and ARCH_SELECTS_ entries to recreate the > equivalent set of KEXEC and CRASH options. > > NOTE: The original Kconfig has a KEXEC_SIG which depends on > MODULE_SIG_FORMAT. However, attempts to keep the MODULE_SIG_FORMAT > dependency (using the strategy outlined in this series, and other > techniques) results in 'error: recursive dependency detected' > on CRYPTO. > > Per Alexander Gordeev : "the MODULE_SIG_FORMAT > dependency was introduced with [git commit below] and in fact was not > necessary, since s390 did/does not use mod_check_sig() anyway. > > commit c8424e776b09 ("MODSIGN: Export module signature definitions") > > MODULE_SIG_FORMAT is needed to select SYSTEM_DATA_VERIFICATION. But > SYSTEM_DATA_VERIFICATION is also selected by FS_VERITY*, so dropping > MODULE_SIG_FORMAT does not hurt." > > Therefore, the solution is to drop the MODULE_SIG_FORMAT dependency > from KEXEC_SIG. Still results in equivalent .config files for s390. > > Signed-off-by: Eric DeVolder > Acked-by: Alexander Gordeev > --- > arch/s390/Kconfig | 65 ++- > 1 file changed, 19 insertions(+), 46 deletions(-) > > diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig > index 5b39918b7042..5d4fbbfdd1cd 100644 > --- a/arch/s390/Kconfig > +++ b/arch/s390/Kconfig > @@ -244,6 +244,25 @@ config PGTABLE_LEVELS > > source "kernel/livepatch/Kconfig" > > +config ARCH_DEFAULT_KEXEC > + def_bool y > + > +config ARCH_SUPPORTS_KEXEC > + def_bool y > + > +config ARCH_SUPPORTS_KEXEC_FILE > + def_bool CRYPTO && CRYPTO_SHA256 && CRYPTO_SHA256_S390 > + > +config ARCH_HAS_KEXEC_PURGATORY > + def_bool KEXEC_FILE > + > +config ARCH_SUPPORTS_CRASH_DUMP > + def_bool y > + help > + Refer to for more details on > this. > + This option also enables s390 zfcpdump. > + See also > + > menu "Processor type and features" > > config HAVE_MARCH_Z10_FEATURES > @@ -482,36 +501,6 @@ config SCHED_TOPOLOGY > > source "kernel/Kconfig.hz" > > -config KEXEC > - def_bool y > - select KEXEC_CORE > - > -config KEXEC_FILE > - bool "kexec file based system call" > - select KEXEC_CORE > - depends on CRYPTO > - depends on CRYPTO_SHA256 > - depends on CRYPTO_SHA256_S390 > - help > - Enable the kexec file based system call. In contrast to the normal > - kexec system call this system call takes file descriptors for the > - kernel and initramfs as arguments. > - > -config ARCH_HAS_KEXEC_PURGATORY > - def_bool y > - depends on KEXEC_FILE > - > -config KEXEC_SIG > - bool "Verify kernel signature during kexec_file_load() syscall" > - depends on KEXEC_FILE && MODULE_SIG_FORMAT > - help > - This option makes kernel signature verification mandatory for > - the kexec_file_load() syscall. > - > - In addition to that option, you need to enable signature > - verification for the corresponding kernel image type being > - loaded in order for this to work. > - > config KERNEL_NOBP > def_bool n > prompt "Enable modified branch prediction for the kernel by default" > @@ -733,22 +722,6 @@ config VFIO_AP > > endmenu > > -menu "Dump support" > - > -config CRASH_DUMP > - bool "kernel crash dumps" > - select KEXEC > - help > - Generate crash dump after being started by kexec. > - Crash dump kernels are loaded in the main kernel with kexec-tools > - into a specially reserved region and then later executed after > - a crash by kdump/kexec. > - Refer to for more details on > this. > - This option also enables s390 zfcpdump. > - See also > - > -endmenu > - > config CCW > def_bool y > > -- > 2.31.1 > I just bisected the following build failure visible with 'ARCH=s390 allnoconfig' to this change as commit 842ce0e1dafa ("s390/kexec: refactor for kernel/Kconfig.kexec") in -next. arch/s390/kernel/machine_kexec.c:120:37: warning: 'struct kimage' declared inside parameter list will not be visible outside of this definition or declaration 120 | static bool kdump_csum_valid(struct kimage *image) | ^~ arch/s390/kernel/machine_kexec.c:188:34: warning: 'struct kimage' declared inside parameter list will not be visible outside of this definition or declaration 188 | int machine_kexec_prepare(struct kimage *image) | ^~ arch/s390/kernel/machine_kexec.c: In function 'machine_kexec_prepare': arch/s390/kernel/machine_kexec.c:192:18: error: invalid use of undefined type 'struct kimage' 192 | if (image->type == KEXEC_TYPE_CRASH) | ^~ arch/s390/kernel/machine_kexec.c:192: