kdump/kdump-try-both-kexec_load-and-kexec_file_load.patch
Petr Tesařík db202b37a8 Accepting request 566424 from home:ptesarik:branches:Kernel:kdump
- kdump-kdump_echo-and-kdump_logger-helpers.patch: load.sh:
  introduce kdump_echo and kdump_logger helpers (bsc#951144).
- kdump-kdump_echo-and-kdump_logger-helpers.patch: load.sh:
  introduce kdump_echo and kdump_logger helpers (bsc#951144).

OBS-URL: https://build.opensuse.org/request/show/566424
OBS-URL: https://build.opensuse.org/package/show/Kernel:kdump/kdump?expand=0&rev=144
2018-01-16 13:55:27 +00:00

85 lines
2.6 KiB
Diff

From: Lance Wang <lzwang@suse.com>
Date: Tue, 16 Jan 2018 13:53:40 +0100
Subject: Try both kexec_load(2) and kexec_file_load(2)
References: bsc#951144
Upstream: merged
Git-commit: ab9c22489ef7627e3f0ad67f46ea19e8d401d044
The logic in load.sh will use kexec_load first. If kexec_load fails
or is blocked by kernel, then it will try kexec_load_file on
x86_64.
Signed-off-by: Joey Lee <jlee@suse.com>
Signed-off-by: Lance Wang <lzwang@suse.com>
Signed-off-by: Petr Tesarik <ptesarik@suse.com>
---
init/load.sh | 38 +++++++++++++++++++++++++-------------
1 file changed, 25 insertions(+), 13 deletions(-)
--- a/init/load.sh
+++ b/init/load.sh
@@ -138,11 +138,6 @@ function build_kexec_options()
options="$options --noio"
fi
- # add -s on x86_64 for signature verification of kernel
- if [ "$(uname -i)" = "x86_64" ] ; then
- options="$options -s"
- fi
-
echo "$options"
}
@@ -151,6 +146,7 @@ function build_kexec_options()
function load_kdump_kexec()
{
local result
+ local output
if [ ! -f "$kdump_initrd" ] ; then
echo "No kdump initial ramdisk found. Tried to locate $kdump_initrd."
@@ -163,19 +159,35 @@ function load_kdump_kexec()
KEXEC_CALL="$KEXEC -p $kdump_kernel --append=\"$kdump_commandline\""
KEXEC_CALL="$KEXEC_CALL --initrd=$kdump_initrd $kexec_options"
- kdump_echo "Loading kdump kernel: $KEXEC_CALL"
+ kdump_echo "Starting load kdump kernel with kexec_file_load(2)"
+ kdump_echo "kexec cmdline: $KEXEC_CALL -s"
- local output
- output=$(eval "$KEXEC_CALL" 2>&1)
- if [ $? -eq 0 ] ; then
- result=0
- else
- result=1
+ output=$(eval "$KEXEC_CALL -s" 2>&1)
+ result=$?
+ if [ $result -eq 255 ] ; then
+ echo $output | grep -q 'syscall kexec_file_load not available' && result=7
fi
# print stderr in any case to show warnings that normally
# would be supressed (bnc#374185)
- echo -n "$output"
+ echo -n "$output"; echo
+
+ if [ $result -eq 0 ] ; then
+ kdump_logger "Loaded kdump kernel: $KEXEC_CALL -s, Result: $output"
+ return 0
+ elif [ $result -ne 7 ]; then
+ kdump_logger "FAILED to load kdump kernel: $KEXEC_CALL -s, Result: $output"
+ return $result
+ fi
+
+ # kexec_file_load(2) not available
+ kdump_echo "kexec_file_load(2) not available"
+ kdump_echo "Starting load kdump kernel with kexec_load(2)"
+ kdump_echo "kexec cmdline: $KEXEC_CALL"
+
+ output=$(eval "$KEXEC_CALL" 2>&1)
+ result=$?
+ echo -n "$output";echo
if [ $result -eq 0 ] ; then
kdump_logger "Loaded kdump kernel: $KEXEC_CALL, Result: $output"