aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChen Minqiang <ptpt52@gmail.com>2019-07-11 22:34:03 +0800
committerDaniel Golle <daniel@makrotopia.org>2020-03-20 21:45:06 +0000
commitec5e8461c194346c4341e3e8bb35bc06ad707d47 (patch)
tree184c2e8ea322728ec0ee126dd4a06336dfaf66cd
parentecef29b29463e7549779e90739e61f8729ccaf09 (diff)
downloadupstream-ec5e8461c194346c4341e3e8bb35bc06ad707d47.tar.gz
upstream-ec5e8461c194346c4341e3e8bb35bc06ad707d47.tar.bz2
upstream-ec5e8461c194346c4341e3e8bb35bc06ad707d47.zip
x86: make crashdump works
1. KERNEL_CRASH_DUMP should depends on KERNEL_PROC_KCORE (kexec use it) 2. select crashkernel mem size by totalmem mem <= 256M disable crashkernel by default mem >= 4G use 256M for crashkernel mem >= 8G use 512M for crashkernel default use 128M 3. set BOOT_IMAGE in kdump.init 4. resolve a "Unhandled rela relocation: R_X86_64_PLT32" error Tested on x86_64 Signed-off-by: Chen Minqiang <ptpt52@gmail.com>
-rw-r--r--config/Config-kernel.in4
-rw-r--r--package/boot/kexec-tools/files/kdump.defaults14
-rwxr-xr-xpackage/boot/kexec-tools/files/kdump.init2
-rw-r--r--package/boot/kexec-tools/patches/100-kexec-tools-fix-for-Unhandled-rela-relocation-R_X86_64_PLT32-error.patch14
4 files changed, 33 insertions, 1 deletions
diff --git a/config/Config-kernel.in b/config/Config-kernel.in
index f7ba2b6723..fc24c3c932 100644
--- a/config/Config-kernel.in
+++ b/config/Config-kernel.in
@@ -477,10 +477,14 @@ config KERNEL_KEXEC
config KERNEL_PROC_VMCORE
bool
+config KERNEL_PROC_KCORE
+ bool
+
config KERNEL_CRASH_DUMP
depends on i386 || x86_64 || arm || armeb
select KERNEL_KEXEC
select KERNEL_PROC_VMCORE
+ select KERNEL_PROC_KCORE
bool "Enable support for kexec crashdump"
default y
diff --git a/package/boot/kexec-tools/files/kdump.defaults b/package/boot/kexec-tools/files/kdump.defaults
index 2f15e757bf..62366a2950 100644
--- a/package/boot/kexec-tools/files/kdump.defaults
+++ b/package/boot/kexec-tools/files/kdump.defaults
@@ -1,10 +1,22 @@
#!/bin/sh
+# kB disable if mem low than 256MB
+memtotal=`grep MemTotal /proc/meminfo | awk '{print $2}'`
+if test $memtotal -le 262144; then
+ exit 0
+fi
+KZ=128
+if test $memtotal -ge 8388608; then
+ KZ=512
+elif test $memtotal -ge 4194304; then
+ KZ=256
+fi
+
case $(uname -m) in
i?86|x86_64)
if ! grep -q crashkernel /boot/grub/grub.cfg; then
mount /boot -o remount,rw
- sed -i 's/linux.*/& crashkernel=32M@32M/' /boot/grub/grub.cfg
+ sed -i "s/linux.*/& crashkernel=${KZ}M/" /boot/grub/grub.cfg
mount /boot -o remount,ro
fi
;;
diff --git a/package/boot/kexec-tools/files/kdump.init b/package/boot/kexec-tools/files/kdump.init
index 0955047156..9d0d2fc2fb 100755
--- a/package/boot/kexec-tools/files/kdump.init
+++ b/package/boot/kexec-tools/files/kdump.init
@@ -3,6 +3,8 @@
START=41
STOP=90
+BOOT_IMAGE=/boot/vmlinuz
+
EXTRA_COMMANDS="status"
EXTRA_HELP=" status Print crashkernel status"
diff --git a/package/boot/kexec-tools/patches/100-kexec-tools-fix-for-Unhandled-rela-relocation-R_X86_64_PLT32-error.patch b/package/boot/kexec-tools/patches/100-kexec-tools-fix-for-Unhandled-rela-relocation-R_X86_64_PLT32-error.patch
new file mode 100644
index 0000000000..dfad21992b
--- /dev/null
+++ b/package/boot/kexec-tools/patches/100-kexec-tools-fix-for-Unhandled-rela-relocation-R_X86_64_PLT32-error.patch
@@ -0,0 +1,14 @@
+diff --git a/kexec/arch/x86_64/kexec-elf-rel-x86_64.c b/kexec/arch/x86_64/kexec-elf-rel-x86_64.c
+index 7fdde73..af33689 100644
+--- a/kexec/arch/x86_64/kexec-elf-rel-x86_64.c
++++ b/kexec/arch/x86_64/kexec-elf-rel-x86_64.c
+@@ -78,7 +78,8 @@ void machine_apply_elf_rel(struct mem_ehdr *UNUSED(ehdr),
+ if ((int64_t)value != *(int32_t *)location)
+ goto overflow;
+ break;
+- case R_X86_64_PC32:
++ case R_X86_64_PC32:
++ case R_X86_64_PLT32:
+ *(uint32_t *)location = value - address;
+ break;
+ default: