Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 12db5562 authored by Vivek Goyal's avatar Vivek Goyal Committed by Linus Torvalds
Browse files

kexec: load and relocate purgatory at kernel load time



Load purgatory code in RAM and relocate it based on the location.
Relocation code has been inspired by module relocation code and purgatory
relocation code in kexec-tools.

Also compute the checksums of loaded kexec segments and store them in
purgatory.

Arch independent code provides this functionality so that arch dependent
bootloaders can make use of it.

Helper functions are provided to get/set symbol values in purgatory which
are used by bootloaders later to set things like stack and entry point of
second kernel etc.

Signed-off-by: default avatarVivek Goyal <vgoyal@redhat.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: Michael Kerrisk <mtk.manpages@gmail.com>
Cc: Yinghai Lu <yinghai@kernel.org>
Cc: Eric Biederman <ebiederm@xmission.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Matthew Garrett <mjg59@srcf.ucam.org>
Cc: Greg Kroah-Hartman <greg@kroah.com>
Cc: Dave Young <dyoung@redhat.com>
Cc: WANG Chao <chaowang@redhat.com>
Cc: Baoquan He <bhe@redhat.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 8fc5b4d4
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -2065,6 +2065,8 @@ config XIP_PHYS_ADDR
config KEXEC
	bool "Kexec system call (EXPERIMENTAL)"
	depends on (!SMP || PM_SLEEP_SMP)
	select CRYPTO
	select CRYPTO_SHA256
	help
	  kexec is a system call that implements the ability to shutdown your
	  current kernel, and to start another kernel.  It is like a reboot
+2 −0
Original line number Diff line number Diff line
@@ -549,6 +549,8 @@ source "drivers/sn/Kconfig"
config KEXEC
	bool "kexec system call"
	depends on !IA64_HP_SIM && (!SMP || HOTPLUG_CPU)
	select CRYPTO
	select CRYPTO_SHA256
	help
	  kexec is a system call that implements the ability to shutdown your
	  current kernel, and to start another kernel.  It is like a reboot
+2 −0
Original line number Diff line number Diff line
@@ -91,6 +91,8 @@ config MMU_SUN3
config KEXEC
	bool "kexec system call"
	depends on M68KCLASSIC
	select CRYPTO
	select CRYPTO_SHA256
	help
	  kexec is a system call that implements the ability to shutdown your
	  current kernel, and to start another kernel.  It is like a reboot
+2 −0
Original line number Diff line number Diff line
@@ -2396,6 +2396,8 @@ source "kernel/Kconfig.preempt"

config KEXEC
	bool "Kexec system call"
	select CRYPTO
	select CRYPTO_SHA256
	help
	  kexec is a system call that implements the ability to shutdown your
	  current kernel, and to start another kernel.  It is like a reboot
+2 −0
Original line number Diff line number Diff line
@@ -399,6 +399,8 @@ config PPC64_SUPPORTS_MEMORY_FAILURE
config KEXEC
	bool "kexec system call"
	depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP))
	select CRYPTO
	select CRYPTO_SHA256
	help
	  kexec is a system call that implements the ability to shutdown your
	  current kernel, and to start another kernel.  It is like a reboot
Loading