diff options
author | Chen Minqiang <ptpt52@gmail.com> | 2019-07-11 22:34:03 +0800 |
---|---|---|
committer | Daniel Golle <daniel@makrotopia.org> | 2020-03-20 21:45:06 +0000 |
commit | ec5e8461c194346c4341e3e8bb35bc06ad707d47 (patch) | |
tree | 184c2e8ea322728ec0ee126dd4a06336dfaf66cd | |
parent | ecef29b29463e7549779e90739e61f8729ccaf09 (diff) | |
download | upstream-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>
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: |