2023-12-08 07:31:02

by Baoquan He

[permalink] [raw]
Subject: [PATCH 0/5] kexec: fix the incorrect ifdeffery and dependency of CONFIG_KEXEC

The select of KEXEC for CRASH_DUMP in kernel/Kconfig.kexec will be
dropped, then compiling errors will be triggered if below config
items are set:

===
CONFIG_CRASH_CORE=y
CONFIG_KEXEC_CORE=y
CONFIG_CRASH_DUMP=y
===

E.g on mips, below link error are seen:
--------------------------------------------------------------------
mipsel-linux-ld: kernel/kexec_core.o: in function `kimage_free':
kernel/kexec_core.c:(.text+0x2200): undefined reference to `machine_kexec_cleanup'
mipsel-linux-ld: kernel/kexec_core.o: in function `__crash_kexec':
kernel/kexec_core.c:(.text+0x2480): undefined reference to `machine_crash_shutdown'
mipsel-linux-ld: kernel/kexec_core.c:(.text+0x2488): undefined reference to `machine_kexec'
mipsel-linux-ld: kernel/kexec_core.o: in function `kernel_kexec':
kernel/kexec_core.c:(.text+0x29b8): undefined reference to `machine_shutdown'
mipsel-linux-ld: kernel/kexec_core.c:(.text+0x29c0): undefined reference to `machine_kexec'
--------------------------------------------------------------------

Here, change the incorrect dependency of building kexec_core related object
files, and the ifdeffery on architectures from CONFIG_KEXEC to
CONFIG_KEXEC_CORE.

Testing:
========
Passed on mips and loognarch with the LKP reproducer.

Baoquan He (5):
loongarch, kexec: change dependency of object files
m68k, kexec: fix the incorrect ifdeffery and build dependency of
CONFIG_KEXEC
mips, kexec: fix the incorrect ifdeffery and dependency of
CONFIG_KEXEC
sh, kexec: fix the incorrect ifdeffery and dependency of CONFIG_KEXEC
x86, kexec: fix the wrong ifdeffery CONFIG_KEXEC

arch/loongarch/kernel/Makefile | 2 +-
arch/m68k/include/asm/kexec.h | 4 ++--
arch/m68k/kernel/Makefile | 2 +-
arch/mips/cavium-octeon/smp.c | 4 ++--
arch/mips/include/asm/kexec.h | 2 +-
arch/mips/include/asm/smp-ops.h | 2 +-
arch/mips/include/asm/smp.h | 2 +-
arch/mips/kernel/Makefile | 2 +-
arch/mips/kernel/smp-bmips.c | 4 ++--
arch/mips/kernel/smp-cps.c | 10 +++++-----
arch/mips/loongson64/reset.c | 4 ++--
arch/mips/loongson64/smp.c | 2 +-
arch/sh/include/asm/kexec.h | 4 ++--
arch/sh/kernel/Makefile | 2 +-
arch/sh/kernel/reboot.c | 4 ++--
arch/sh/kernel/setup.c | 2 +-
arch/x86/boot/compressed/acpi.c | 2 +-
17 files changed, 27 insertions(+), 27 deletions(-)

--
2.41.0


2023-12-08 07:31:16

by Baoquan He

[permalink] [raw]
Subject: [PATCH 1/5] loongarch, kexec: change dependency of object files

Currently, in arch/loongarch/kernel/Makefile, building machine_kexec.o
relocate_kernel.o depends on CONFIG_KEXEC.

Whereas, since we will drop the select of KEXEC for CRASH_DUMP in
kernel/Kconfig.kexec, compiling error will be triggered if below config
items are set:

===
CONFIG_CRASH_CORE=y
CONFIG_KEXEC_CORE=y
CONFIG_CRASH_DUMP=y
===

---------------------------------------------------------------
loongarch64-linux-ld: kernel/kexec_core.o: in function `.L209':
>> kexec_core.c:(.text+0x1660): undefined reference to `machine_kexec_cleanup'
loongarch64-linux-ld: kernel/kexec_core.o: in function `.L287':
>> kexec_core.c:(.text+0x1c5c): undefined reference to `machine_crash_shutdown'
>> loongarch64-linux-ld: kexec_core.c:(.text+0x1c64): undefined reference to `machine_kexec'
loongarch64-linux-ld: kernel/kexec_core.o: in function `.L2^B5':
>> kexec_core.c:(.text+0x2090): undefined reference to `machine_shutdown'
loongarch64-linux-ld: kexec_core.c:(.text+0x20a0): undefined reference to `machine_kexec'
---------------------------------------------------------------

Here, changing the dependency of machine_kexec.o relocate_kernel.o to
CONFIG_KEXEC_CORE can fix above building error.

Reported-by: kernel test robot <[email protected]>
Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
Signed-off-by: Baoquan He <[email protected]>
---
arch/loongarch/kernel/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/loongarch/kernel/Makefile b/arch/loongarch/kernel/Makefile
index 4fcc168f0732..3c808c680370 100644
--- a/arch/loongarch/kernel/Makefile
+++ b/arch/loongarch/kernel/Makefile
@@ -57,7 +57,7 @@ obj-$(CONFIG_MAGIC_SYSRQ) += sysrq.o

obj-$(CONFIG_RELOCATABLE) += relocate.o

-obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o
+obj-$(CONFIG_KEXEC_CORE) += machine_kexec.o relocate_kernel.o
obj-$(CONFIG_CRASH_DUMP) += crash_dump.o

obj-$(CONFIG_UNWINDER_GUESS) += unwind_guess.o
--
2.41.0

2023-12-08 07:31:40

by Baoquan He

[permalink] [raw]
Subject: [PATCH 3/5] mips, kexec: fix the incorrect ifdeffery and dependency of CONFIG_KEXEC

The select of KEXEC for CRASH_DUMP in kernel/Kconfig.kexec will be
dropped, then compiling errors will be triggered if below config
items are set:

===
CONFIG_CRASH_CORE=y
CONFIG_KEXEC_CORE=y
CONFIG_CRASH_DUMP=y
===

--------------------------------------------------------------------
mipsel-linux-ld: kernel/kexec_core.o: in function `kimage_free':
kernel/kexec_core.c:(.text+0x2200): undefined reference to `machine_kexec_cleanup'
mipsel-linux-ld: kernel/kexec_core.o: in function `__crash_kexec':
kernel/kexec_core.c:(.text+0x2480): undefined reference to `machine_crash_shutdown'
mipsel-linux-ld: kernel/kexec_core.c:(.text+0x2488): undefined reference to `machine_kexec'
mipsel-linux-ld: kernel/kexec_core.o: in function `kernel_kexec':
kernel/kexec_core.c:(.text+0x29b8): undefined reference to `machine_shutdown'
mipsel-linux-ld: kernel/kexec_core.c:(.text+0x29c0): undefined reference to `machine_kexec'
--------------------------------------------------------------------

Here, change the dependency of building kexec_core related object files,
and the ifdeffery in mips from CONFIG_KEXEC to CONFIG_KEXEC_CORE.

Reported-by: kernel test robot <[email protected]>
Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
Signed-off-by: Baoquan He <[email protected]>
---
arch/mips/cavium-octeon/smp.c | 4 ++--
arch/mips/include/asm/kexec.h | 2 +-
arch/mips/include/asm/smp-ops.h | 2 +-
arch/mips/include/asm/smp.h | 2 +-
arch/mips/kernel/Makefile | 2 +-
arch/mips/kernel/smp-bmips.c | 4 ++--
arch/mips/kernel/smp-cps.c | 10 +++++-----
arch/mips/loongson64/reset.c | 4 ++--
arch/mips/loongson64/smp.c | 2 +-
9 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/arch/mips/cavium-octeon/smp.c b/arch/mips/cavium-octeon/smp.c
index 33c09688210f..08ea2cde1eb5 100644
--- a/arch/mips/cavium-octeon/smp.c
+++ b/arch/mips/cavium-octeon/smp.c
@@ -422,7 +422,7 @@ static const struct plat_smp_ops octeon_smp_ops = {
.cpu_disable = octeon_cpu_disable,
.cpu_die = octeon_cpu_die,
#endif
-#ifdef CONFIG_KEXEC
+#ifdef CONFIG_KEXEC_CORE
.kexec_nonboot_cpu = kexec_nonboot_cpu_jump,
#endif
};
@@ -502,7 +502,7 @@ static const struct plat_smp_ops octeon_78xx_smp_ops = {
.cpu_disable = octeon_cpu_disable,
.cpu_die = octeon_cpu_die,
#endif
-#ifdef CONFIG_KEXEC
+#ifdef CONFIG_KEXEC_CORE
.kexec_nonboot_cpu = kexec_nonboot_cpu_jump,
#endif
};
diff --git a/arch/mips/include/asm/kexec.h b/arch/mips/include/asm/kexec.h
index d6d5fa5cc31d..69e579e41e66 100644
--- a/arch/mips/include/asm/kexec.h
+++ b/arch/mips/include/asm/kexec.h
@@ -31,7 +31,7 @@ static inline void crash_setup_regs(struct pt_regs *newregs,
prepare_frametrace(newregs);
}

-#ifdef CONFIG_KEXEC
+#ifdef CONFIG_KEXEC_CORE
struct kimage;
extern unsigned long kexec_args[4];
extern int (*_machine_kexec_prepare)(struct kimage *);
diff --git a/arch/mips/include/asm/smp-ops.h b/arch/mips/include/asm/smp-ops.h
index 5719ff49eff1..0c59e168f800 100644
--- a/arch/mips/include/asm/smp-ops.h
+++ b/arch/mips/include/asm/smp-ops.h
@@ -35,7 +35,7 @@ struct plat_smp_ops {
void (*cpu_die)(unsigned int cpu);
void (*cleanup_dead_cpu)(unsigned cpu);
#endif
-#ifdef CONFIG_KEXEC
+#ifdef CONFIG_KEXEC_CORE
void (*kexec_nonboot_cpu)(void);
#endif
};
diff --git a/arch/mips/include/asm/smp.h b/arch/mips/include/asm/smp.h
index a40d8c0e4b87..901bc61fa7ae 100644
--- a/arch/mips/include/asm/smp.h
+++ b/arch/mips/include/asm/smp.h
@@ -93,7 +93,7 @@ static inline void __cpu_die(unsigned int cpu)
extern void __noreturn play_dead(void);
#endif

-#ifdef CONFIG_KEXEC
+#ifdef CONFIG_KEXEC_CORE
static inline void kexec_nonboot_cpu(void)
{
extern const struct plat_smp_ops *mp_ops; /* private */
diff --git a/arch/mips/kernel/Makefile b/arch/mips/kernel/Makefile
index 853a43ee4b44..ecf3278a32f7 100644
--- a/arch/mips/kernel/Makefile
+++ b/arch/mips/kernel/Makefile
@@ -90,7 +90,7 @@ obj-$(CONFIG_GPIO_TXX9) += gpio_txx9.o

obj-$(CONFIG_RELOCATABLE) += relocate.o

-obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o crash.o
+obj-$(CONFIG_KEXEC_CORE) += machine_kexec.o relocate_kernel.o crash.o
obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
obj-$(CONFIG_EARLY_PRINTK_8250) += early_printk_8250.o
diff --git a/arch/mips/kernel/smp-bmips.c b/arch/mips/kernel/smp-bmips.c
index c074ecce3fbf..b3dbf9ecb0d6 100644
--- a/arch/mips/kernel/smp-bmips.c
+++ b/arch/mips/kernel/smp-bmips.c
@@ -434,7 +434,7 @@ const struct plat_smp_ops bmips43xx_smp_ops = {
.cpu_disable = bmips_cpu_disable,
.cpu_die = bmips_cpu_die,
#endif
-#ifdef CONFIG_KEXEC
+#ifdef CONFIG_KEXEC_CORE
.kexec_nonboot_cpu = kexec_nonboot_cpu_jump,
#endif
};
@@ -451,7 +451,7 @@ const struct plat_smp_ops bmips5000_smp_ops = {
.cpu_disable = bmips_cpu_disable,
.cpu_die = bmips_cpu_die,
#endif
-#ifdef CONFIG_KEXEC
+#ifdef CONFIG_KEXEC_CORE
.kexec_nonboot_cpu = kexec_nonboot_cpu_jump,
#endif
};
diff --git a/arch/mips/kernel/smp-cps.c b/arch/mips/kernel/smp-cps.c
index dd55d59b88db..f6c37d407f36 100644
--- a/arch/mips/kernel/smp-cps.c
+++ b/arch/mips/kernel/smp-cps.c
@@ -392,7 +392,7 @@ static void cps_smp_finish(void)
local_irq_enable();
}

-#if defined(CONFIG_HOTPLUG_CPU) || defined(CONFIG_KEXEC)
+#if defined(CONFIG_HOTPLUG_CPU) || defined(CONFIG_KEXEC_CORE)

enum cpu_death {
CPU_DEATH_HALT,
@@ -429,7 +429,7 @@ static void cps_shutdown_this_cpu(enum cpu_death death)
}
}

-#ifdef CONFIG_KEXEC
+#ifdef CONFIG_KEXEC_CORE

static void cps_kexec_nonboot_cpu(void)
{
@@ -439,9 +439,9 @@ static void cps_kexec_nonboot_cpu(void)
cps_shutdown_this_cpu(CPU_DEATH_POWER);
}

-#endif /* CONFIG_KEXEC */
+#endif /* CONFIG_KEXEC_CORE */

-#endif /* CONFIG_HOTPLUG_CPU || CONFIG_KEXEC */
+#endif /* CONFIG_HOTPLUG_CPU || CONFIG_KEXEC_CORE */

#ifdef CONFIG_HOTPLUG_CPU

@@ -610,7 +610,7 @@ static const struct plat_smp_ops cps_smp_ops = {
.cpu_die = cps_cpu_die,
.cleanup_dead_cpu = cps_cleanup_dead_cpu,
#endif
-#ifdef CONFIG_KEXEC
+#ifdef CONFIG_KEXEC_CORE
.kexec_nonboot_cpu = cps_kexec_nonboot_cpu,
#endif
};
diff --git a/arch/mips/loongson64/reset.c b/arch/mips/loongson64/reset.c
index e420800043b0..e01c8d4a805a 100644
--- a/arch/mips/loongson64/reset.c
+++ b/arch/mips/loongson64/reset.c
@@ -53,7 +53,7 @@ static void loongson_halt(void)
}
}

-#ifdef CONFIG_KEXEC
+#ifdef CONFIG_KEXEC_CORE

/* 0X80000000~0X80200000 is safe */
#define MAX_ARGS 64
@@ -158,7 +158,7 @@ static int __init mips_reboot_setup(void)
_machine_halt = loongson_halt;
pm_power_off = loongson_poweroff;

-#ifdef CONFIG_KEXEC
+#ifdef CONFIG_KEXEC_CORE
kexec_argv = kmalloc(KEXEC_ARGV_SIZE, GFP_KERNEL);
if (WARN_ON(!kexec_argv))
return -ENOMEM;
diff --git a/arch/mips/loongson64/smp.c b/arch/mips/loongson64/smp.c
index e015a26a40f7..498bdc1bb0ed 100644
--- a/arch/mips/loongson64/smp.c
+++ b/arch/mips/loongson64/smp.c
@@ -864,7 +864,7 @@ const struct plat_smp_ops loongson3_smp_ops = {
.cpu_disable = loongson3_cpu_disable,
.cpu_die = loongson3_cpu_die,
#endif
-#ifdef CONFIG_KEXEC
+#ifdef CONFIG_KEXEC_CORE
.kexec_nonboot_cpu = kexec_nonboot_cpu_jump,
#endif
};
--
2.41.0

2023-12-08 07:31:47

by Baoquan He

[permalink] [raw]
Subject: [PATCH 4/5] sh, kexec: fix the incorrect ifdeffery and dependency of CONFIG_KEXEC

The select of KEXEC for CRASH_DUMP in kernel/Kconfig.kexec will be
dropped, then compiling errors will be triggered if below config
items are set:

===
CONFIG_CRASH_CORE=y
CONFIG_KEXEC_CORE=y
CONFIG_CRASH_DUMP=y
===

Here, change the dependency of building kexec_core related object files,
and the ifdeffery on SuperH from CONFIG_KEXEC to CONFIG_KEXEC_CORE.

Signed-off-by: Baoquan He <[email protected]>
---
arch/sh/include/asm/kexec.h | 4 ++--
arch/sh/kernel/Makefile | 2 +-
arch/sh/kernel/reboot.c | 4 ++--
arch/sh/kernel/setup.c | 2 +-
4 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/arch/sh/include/asm/kexec.h b/arch/sh/include/asm/kexec.h
index 927d80ba2332..76631714673c 100644
--- a/arch/sh/include/asm/kexec.h
+++ b/arch/sh/include/asm/kexec.h
@@ -28,7 +28,7 @@
/* The native architecture */
#define KEXEC_ARCH KEXEC_ARCH_SH

-#ifdef CONFIG_KEXEC
+#ifdef CONFIG_KEXEC_CORE
/* arch/sh/kernel/machine_kexec.c */
void reserve_crashkernel(void);

@@ -67,6 +67,6 @@ static inline void crash_setup_regs(struct pt_regs *newregs,
}
#else
static inline void reserve_crashkernel(void) { }
-#endif /* CONFIG_KEXEC */
+#endif /* CONFIG_KEXEC_CORE */

#endif /* __ASM_SH_KEXEC_H */
diff --git a/arch/sh/kernel/Makefile b/arch/sh/kernel/Makefile
index 69cd9ac4b2ab..2d7e70537de0 100644
--- a/arch/sh/kernel/Makefile
+++ b/arch/sh/kernel/Makefile
@@ -33,7 +33,7 @@ obj-$(CONFIG_SMP) += smp.o
obj-$(CONFIG_SH_STANDARD_BIOS) += sh_bios.o
obj-$(CONFIG_KGDB) += kgdb.o
obj-$(CONFIG_MODULES) += sh_ksyms_32.o module.o
-obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o
+obj-$(CONFIG_KEXEC_CORE) += machine_kexec.o relocate_kernel.o
obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
obj-$(CONFIG_STACKTRACE) += stacktrace.o
obj-$(CONFIG_IO_TRAPPED) += io_trapped.o
diff --git a/arch/sh/kernel/reboot.c b/arch/sh/kernel/reboot.c
index e8eeedc9b182..1de006b1c339 100644
--- a/arch/sh/kernel/reboot.c
+++ b/arch/sh/kernel/reboot.c
@@ -63,7 +63,7 @@ struct machine_ops machine_ops = {
.shutdown = native_machine_shutdown,
.restart = native_machine_restart,
.halt = native_machine_halt,
-#ifdef CONFIG_KEXEC
+#ifdef CONFIG_KEXEC_CORE
.crash_shutdown = native_machine_crash_shutdown,
#endif
};
@@ -88,7 +88,7 @@ void machine_halt(void)
machine_ops.halt();
}

-#ifdef CONFIG_KEXEC
+#ifdef CONFIG_KEXEC_CORE
void machine_crash_shutdown(struct pt_regs *regs)
{
machine_ops.crash_shutdown(regs);
diff --git a/arch/sh/kernel/setup.c b/arch/sh/kernel/setup.c
index 3d80515298d2..d3175f09b3aa 100644
--- a/arch/sh/kernel/setup.c
+++ b/arch/sh/kernel/setup.c
@@ -220,7 +220,7 @@ void __init __add_active_range(unsigned int nid, unsigned long start_pfn,
request_resource(res, &code_resource);
request_resource(res, &data_resource);
request_resource(res, &bss_resource);
-#ifdef CONFIG_KEXEC
+#ifdef CONFIG_KEXEC_CORE
request_resource(res, &crashk_res);
#endif

--
2.41.0

2023-12-08 07:31:50

by Baoquan He

[permalink] [raw]
Subject: [PATCH 5/5] x86, kexec: fix the wrong ifdeffery CONFIG_KEXEC

With the current ifdeffery CONFIG_KEXEC, get_cmdline_acpi_rsdp() is only
available when kexec_load interface is taken, while kexec_file_load
interface can't make use of it.

Now change it to CONFIG_KEXEC_CORE.

Signed-off-by: Baoquan He <[email protected]>
---
arch/x86/boot/compressed/acpi.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/boot/compressed/acpi.c b/arch/x86/boot/compressed/acpi.c
index 55c98fdd67d2..18d15d1ce87d 100644
--- a/arch/x86/boot/compressed/acpi.c
+++ b/arch/x86/boot/compressed/acpi.c
@@ -178,7 +178,7 @@ static unsigned long get_cmdline_acpi_rsdp(void)
{
unsigned long addr = 0;

-#ifdef CONFIG_KEXEC
+#ifdef CONFIG_KEXEC_CORE
char val[MAX_ADDR_LEN] = { };
int ret;

--
2.41.0

2023-12-08 07:32:16

by Baoquan He

[permalink] [raw]
Subject: [PATCH 2/5] m68k, kexec: fix the incorrect ifdeffery and build dependency of CONFIG_KEXEC

The select of KEXEC for CRASH_DUMP in kernel/Kconfig.kexec will be
dropped, then compiling errors will be triggered if below config
items are set:

===
CONFIG_CRASH_CORE=y
CONFIG_KEXEC_CORE=y
CONFIG_CRASH_DUMP=y
===

Here, change the dependency of buinding machine_kexec.o relocate_kernel.o
and the ifdeffery in asm/kexe.h to CONFIG_KEXEC_CORE.

Signed-off-by: Baoquan He <[email protected]>
---
arch/m68k/include/asm/kexec.h | 4 ++--
arch/m68k/kernel/Makefile | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/m68k/include/asm/kexec.h b/arch/m68k/include/asm/kexec.h
index f5a8b2defa4b..3b0b64f0a353 100644
--- a/arch/m68k/include/asm/kexec.h
+++ b/arch/m68k/include/asm/kexec.h
@@ -2,7 +2,7 @@
#ifndef _ASM_M68K_KEXEC_H
#define _ASM_M68K_KEXEC_H

-#ifdef CONFIG_KEXEC
+#ifdef CONFIG_KEXEC_CORE

/* Maximum physical address we can use pages from */
#define KEXEC_SOURCE_MEMORY_LIMIT (-1UL)
@@ -25,6 +25,6 @@ static inline void crash_setup_regs(struct pt_regs *newregs,

#endif /* __ASSEMBLY__ */

-#endif /* CONFIG_KEXEC */
+#endif /* CONFIG_KEXEC_CORE */

#endif /* _ASM_M68K_KEXEC_H */
diff --git a/arch/m68k/kernel/Makefile b/arch/m68k/kernel/Makefile
index 01fb69a5095f..f335bf3268a1 100644
--- a/arch/m68k/kernel/Makefile
+++ b/arch/m68k/kernel/Makefile
@@ -25,7 +25,7 @@ obj-$(CONFIG_PCI) += pcibios.o

obj-$(CONFIG_M68K_NONCOHERENT_DMA) += dma.o

-obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o
+obj-$(CONFIG_KEXEC_CORE) += machine_kexec.o relocate_kernel.o
obj-$(CONFIG_BOOTINFO_PROC) += bootinfo_proc.o
obj-$(CONFIG_UBOOT) += uboot.o

--
2.41.0

2023-12-08 07:43:44

by Baoquan He

[permalink] [raw]
Subject: Re: [PATCH 0/5] kexec: fix the incorrect ifdeffery and dependency of CONFIG_KEXEC

Forgot adding kexec to CC, add it now.

On 12/08/23 at 03:30pm, Baoquan He wrote:
> The select of KEXEC for CRASH_DUMP in kernel/Kconfig.kexec will be
> dropped, then compiling errors will be triggered if below config
> items are set:
>
> ===
> CONFIG_CRASH_CORE=y
> CONFIG_KEXEC_CORE=y
> CONFIG_CRASH_DUMP=y
> ===
>
> E.g on mips, below link error are seen:
> --------------------------------------------------------------------
> mipsel-linux-ld: kernel/kexec_core.o: in function `kimage_free':
> kernel/kexec_core.c:(.text+0x2200): undefined reference to `machine_kexec_cleanup'
> mipsel-linux-ld: kernel/kexec_core.o: in function `__crash_kexec':
> kernel/kexec_core.c:(.text+0x2480): undefined reference to `machine_crash_shutdown'
> mipsel-linux-ld: kernel/kexec_core.c:(.text+0x2488): undefined reference to `machine_kexec'
> mipsel-linux-ld: kernel/kexec_core.o: in function `kernel_kexec':
> kernel/kexec_core.c:(.text+0x29b8): undefined reference to `machine_shutdown'
> mipsel-linux-ld: kernel/kexec_core.c:(.text+0x29c0): undefined reference to `machine_kexec'
> --------------------------------------------------------------------
>
> Here, change the incorrect dependency of building kexec_core related object
> files, and the ifdeffery on architectures from CONFIG_KEXEC to
> CONFIG_KEXEC_CORE.
>
> Testing:
> ========
> Passed on mips and loognarch with the LKP reproducer.
>
> Baoquan He (5):
> loongarch, kexec: change dependency of object files
> m68k, kexec: fix the incorrect ifdeffery and build dependency of
> CONFIG_KEXEC
> mips, kexec: fix the incorrect ifdeffery and dependency of
> CONFIG_KEXEC
> sh, kexec: fix the incorrect ifdeffery and dependency of CONFIG_KEXEC
> x86, kexec: fix the wrong ifdeffery CONFIG_KEXEC
>
> arch/loongarch/kernel/Makefile | 2 +-
> arch/m68k/include/asm/kexec.h | 4 ++--
> arch/m68k/kernel/Makefile | 2 +-
> arch/mips/cavium-octeon/smp.c | 4 ++--
> arch/mips/include/asm/kexec.h | 2 +-
> arch/mips/include/asm/smp-ops.h | 2 +-
> arch/mips/include/asm/smp.h | 2 +-
> arch/mips/kernel/Makefile | 2 +-
> arch/mips/kernel/smp-bmips.c | 4 ++--
> arch/mips/kernel/smp-cps.c | 10 +++++-----
> arch/mips/loongson64/reset.c | 4 ++--
> arch/mips/loongson64/smp.c | 2 +-
> arch/sh/include/asm/kexec.h | 4 ++--
> arch/sh/kernel/Makefile | 2 +-
> arch/sh/kernel/reboot.c | 4 ++--
> arch/sh/kernel/setup.c | 2 +-
> arch/x86/boot/compressed/acpi.c | 2 +-
> 17 files changed, 27 insertions(+), 27 deletions(-)
>
> --
> 2.41.0
>

2023-12-11 08:51:05

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: [PATCH 0/5] kexec: fix the incorrect ifdeffery and dependency of CONFIG_KEXEC

Hi Baoquan,

On Fri, Dec 8, 2023 at 8:43 AM Baoquan He <[email protected]> wrote:
> Forgot adding kexec to CC, add it now.
>
> On 12/08/23 at 03:30pm, Baoquan He wrote:
> > The select of KEXEC for CRASH_DUMP in kernel/Kconfig.kexec will be
> > dropped, then compiling errors will be triggered if below config
> > items are set:
> >
> > ===
> > CONFIG_CRASH_CORE=y
> > CONFIG_KEXEC_CORE=y
> > CONFIG_CRASH_DUMP=y
> > ===
> >
> > E.g on mips, below link error are seen:
> > --------------------------------------------------------------------
> > mipsel-linux-ld: kernel/kexec_core.o: in function `kimage_free':
> > kernel/kexec_core.c:(.text+0x2200): undefined reference to `machine_kexec_cleanup'
> > mipsel-linux-ld: kernel/kexec_core.o: in function `__crash_kexec':
> > kernel/kexec_core.c:(.text+0x2480): undefined reference to `machine_crash_shutdown'
> > mipsel-linux-ld: kernel/kexec_core.c:(.text+0x2488): undefined reference to `machine_kexec'
> > mipsel-linux-ld: kernel/kexec_core.o: in function `kernel_kexec':
> > kernel/kexec_core.c:(.text+0x29b8): undefined reference to `machine_shutdown'
> > mipsel-linux-ld: kernel/kexec_core.c:(.text+0x29c0): undefined reference to `machine_kexec'
> > --------------------------------------------------------------------
> >
> > Here, change the incorrect dependency of building kexec_core related object
> > files, and the ifdeffery on architectures from CONFIG_KEXEC to
> > CONFIG_KEXEC_CORE.
> >
> > Testing:
> > ========
> > Passed on mips and loognarch with the LKP reproducer.
> >
> > Baoquan He (5):
> > loongarch, kexec: change dependency of object files
> > m68k, kexec: fix the incorrect ifdeffery and build dependency of
> > CONFIG_KEXEC
> > mips, kexec: fix the incorrect ifdeffery and dependency of
> > CONFIG_KEXEC
> > sh, kexec: fix the incorrect ifdeffery and dependency of CONFIG_KEXEC
> > x86, kexec: fix the wrong ifdeffery CONFIG_KEXEC

I understand this series is v3 of "[PATCH v2] kexec_core: change
dependency of object files"? As this series does not contain a
changelog, can you please summarize what was changed?
Thanks!

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds

2023-12-11 09:10:52

by Baoquan He

[permalink] [raw]
Subject: Re: [PATCH 0/5] kexec: fix the incorrect ifdeffery and dependency of CONFIG_KEXEC

On 12/11/23 at 09:25am, Geert Uytterhoeven wrote:
> Hi Baoquan,
>
> On Fri, Dec 8, 2023 at 8:43 AM Baoquan He <[email protected]> wrote:
> > Forgot adding kexec to CC, add it now.
> >
> > On 12/08/23 at 03:30pm, Baoquan He wrote:
> > > The select of KEXEC for CRASH_DUMP in kernel/Kconfig.kexec will be
> > > dropped, then compiling errors will be triggered if below config
> > > items are set:
> > >
> > > ===
> > > CONFIG_CRASH_CORE=y
> > > CONFIG_KEXEC_CORE=y
> > > CONFIG_CRASH_DUMP=y
> > > ===
> > >
> > > E.g on mips, below link error are seen:
> > > --------------------------------------------------------------------
> > > mipsel-linux-ld: kernel/kexec_core.o: in function `kimage_free':
> > > kernel/kexec_core.c:(.text+0x2200): undefined reference to `machine_kexec_cleanup'
> > > mipsel-linux-ld: kernel/kexec_core.o: in function `__crash_kexec':
> > > kernel/kexec_core.c:(.text+0x2480): undefined reference to `machine_crash_shutdown'
> > > mipsel-linux-ld: kernel/kexec_core.c:(.text+0x2488): undefined reference to `machine_kexec'
> > > mipsel-linux-ld: kernel/kexec_core.o: in function `kernel_kexec':
> > > kernel/kexec_core.c:(.text+0x29b8): undefined reference to `machine_shutdown'
> > > mipsel-linux-ld: kernel/kexec_core.c:(.text+0x29c0): undefined reference to `machine_kexec'
> > > --------------------------------------------------------------------
> > >
> > > Here, change the incorrect dependency of building kexec_core related object
> > > files, and the ifdeffery on architectures from CONFIG_KEXEC to
> > > CONFIG_KEXEC_CORE.
> > >
> > > Testing:
> > > ========
> > > Passed on mips and loognarch with the LKP reproducer.
> > >
> > > Baoquan He (5):
> > > loongarch, kexec: change dependency of object files
> > > m68k, kexec: fix the incorrect ifdeffery and build dependency of
> > > CONFIG_KEXEC
> > > mips, kexec: fix the incorrect ifdeffery and dependency of
> > > CONFIG_KEXEC
> > > sh, kexec: fix the incorrect ifdeffery and dependency of CONFIG_KEXEC
> > > x86, kexec: fix the wrong ifdeffery CONFIG_KEXEC
>
> I understand this series is v3 of "[PATCH v2] kexec_core: change
> dependency of object files"? As this series does not contain a
> changelog, can you please summarize what was changed?
> Thanks!

Oh, sorry for the confusion.

You are right, I should have taken this as v3 and posted to avoid
confusion.

I add below change log for this series, not sure if it's clearer than
before. E.g for m68k, the <asm/kexec.h> is included in <linux/kexec.h>.
The old ifdeffery CONFIG_KEXEC will cause those definitions in
asm/kexec.h unseen if CONFIG_KEXEC is unset. See
KEXEC_SOURCE_MEMORY_LIMIT, it's needed in kernel/kexec_core.c.

Changelog:
------------
v2->v3:
- Change the incorrect ifdeffery CONFIG_KEXEC in arch. Since select of
KEXEC for CRASH_DUMP in kernel/Kconfig.kexec is dropped, people can
set below config items dependently of CONFIG_KEXEC. Then those
KEXEC_CORE or CRASH_CORE related codes compiling will report error.

===
CONFIG_CRASH_CORE=y
CONFIG_KEXEC_CORE=y
CONFIG_CRASH_DUMP=y
===
- Change the incorrect ifdeffery CONFIG_KEXEC in get_cmdline_acpi_rsdp()
of x86 because kexec_file_load needs that too.

v1->v2:
- V1 only includes fix on loongarch. Add m68k, mips, sh fix in v2 too.