- 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
85 lines
2.6 KiB
Diff
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"
|