OBS User unknown 2007-02-05 14:39:32 +00:00 committed by Git OBS Bridge
parent b7abc06e11
commit 2de9d40b8f
9 changed files with 390 additions and 121 deletions

View File

@ -208,6 +208,13 @@ If you do not give a command line, then the default will be taken from
/proc/cmdline.
- KDUMP_COMMANDLINE_APPEND
Set this variable if you only want to _append_ values to the default
command line string. The string gets also appended if KDUMP_COMMANDLINE
is set.
- KEXEC_OPTIONS
You can use this to pass additional arguments to kexec. For i386 and

31
kdump
View File

@ -160,20 +160,25 @@ load_kdump()
fi
if [ -z "$KDUMP_COMMANDLINE" ]; then
KDUMP_COMMANDLINE=`cat /proc/cmdline`
KDUMP_COMMANDLINE=`echo $KDUMP_COMMANDLINE | \
sed -e 's/crashkernel=[0-9]\+[mM]\(@[0-9]\+[Mm]\)\?//g' \
-e 's/ *splash=[^ ]* / /g' \
KDUMP_COMMANDLINE=`cat /proc/cmdline | \
sed -e 's/crashkernel=[0-9]\+[mM]\(@[0-9]\+[Mm]\?\)\?//g' \
-e 's/ *splash=[^ ]*/ /g' \
-e 's/ *BOOT_IMAGE=[^ ]* / /g' \
-e 's/ *showopts/ /g'`
# Use deadline for saving the memory footprint
KDUMP_COMMANDLINE="$KDUMP_COMMANDLINE elevator=deadline sysrq=1"
case `uname -i` in
i?86|x86_64)
i?86|x86_64|ia64)
KDUMP_COMMANDLINE="$KDUMP_COMMANDLINE irqpoll"
;;
esac
fi
KDUMP_COMMANDLINE="CRASH=1 $KDUMP_COMMANDLINE"
if [ -n "$KDUMP_COMMANDLINE_APPEND" ] ; then
KDUMP_COMMANDLINE="$KDUMP_COMMANDLINE $KDUMP_COMMANDLINE_APPEND"
fi
if [ -n "$KDUMP_RUNLEVEL" ]; then
case "$KDUMP_RUNLEVEL" in
[1-5s])
@ -283,14 +288,14 @@ case "$1" in
;;
stop)
if [ ! -f /proc/vmcore ]; then
if [ "$RUNLEVEL" != "" ]; then
echo -n "Not unloading kdump during runlevel changes"
rc_status -s
else
echo -n "Unloading kdump"
$KEXEC -p -u
rc_status -v
fi
if [ "$RUNLEVEL" != "" ]; then
echo -n "Not unloading kdump during runlevel changes"
rc_status -s
else
echo -n "Unloading kdump"
$KEXEC -p -u
rc_status -v
fi
fi
;;
status)

326
kexec-longer-cmdline.diff Normal file
View File

@ -0,0 +1,326 @@
This patch increases the kernel command line size for x86_64 and i386
to 2048 characters. This is necessary because with kernel 2.6.20-rc6-mm
and newer, the kernel command line size has increased and kexec needs
lot of command line space, so this solves some "command line overflow"
problems.
To be able to warn users running older kernels that the command line
is too long (and don't wait that the kernel truncates it), the
patch tries to get the kernel command line length from the kernel
image that is loaded if possible by checking the length of the
static array that holds the kernel command line when booting.
If this is not possible or the command line is not in the range
[256; 2048], the default value is used (2048).
Signed-off-by: Bernhard Walle <bwalle@suse.de>
---
include/x86/x86-linux.h | 8 ++-----
kexec/arch/i386/crashdump-x86.c | 36 ++++++++++++++++++++++++++++++++---
kexec/arch/i386/crashdump-x86.h | 5 ++++
kexec/arch/i386/kexec-bzImage.c | 8 +++----
kexec/arch/i386/kexec-elf-x86.c | 8 +++----
kexec/arch/i386/x86-linux-setup.c | 6 +++--
kexec/arch/x86_64/crashdump-x86_64.c | 35 +++++++++++++++++++++++++++++++---
kexec/arch/x86_64/crashdump-x86_64.h | 3 ++
kexec/arch/x86_64/kexec-elf-x86_64.c | 11 ++++++----
9 files changed, 95 insertions(+), 25 deletions(-)
Index: b/include/x86/x86-linux.h
===================================================================
--- a/include/x86/x86-linux.h
+++ b/include/x86/x86-linux.h
@@ -148,14 +148,12 @@ struct x86_linux_param_header {
#endif
struct e820entry e820_map[E820MAX]; /* 0x2d0 */
/* 0x550 */
-#define COMMAND_LINE_SIZE 256
+#define COMMAND_LINE_SIZE 2048
};
struct x86_linux_faked_param_header {
- struct x86_linux_param_header hdr; /* 0x00 */
- uint8_t reserved16[688]; /* 0x550 */
- uint8_t command_line[COMMAND_LINE_SIZE]; /* 0x800 */
- uint8_t reserved17[1792]; /* 0x900 - 0x1000 */
+ struct x86_linux_param_header hdr;
+ uint8_t command_line[COMMAND_LINE_SIZE];
};
struct x86_linux_header {
Index: b/kexec/arch/i386/crashdump-x86.c
===================================================================
--- a/kexec/arch/i386/crashdump-x86.c
+++ b/kexec/arch/i386/crashdump-x86.c
@@ -46,6 +46,36 @@ static struct memory_range crash_memory_
/* Memory region reserved for storing panic kernel and other data. */
static struct memory_range crash_reserved_mem;
+/* real length of the command line from the kernel image, needed because
+ * command line size on x86-64 was increased recently in -mm tree */
+int real_command_line_size = COMMAND_LINE_SIZE;
+
+
+/* Tries to read the kernel command line size from the symbol table
+ * of the ELF kernel binary. */
+void set_command_line_size(struct mem_ehdr *ehdr)
+{
+ int ret;
+ struct mem_sym mem_sym;
+
+ /* > 2.6.20-rc6-mm */
+ ret = elf_rel_find_symbol(ehdr, "saved_command_line", &mem_sym);
+ if (ret != 0) {
+ /* older kernel */
+ ret = elf_rel_find_symbol(ehdr, "boot_command_line", &mem_sym);
+ if (ret != 0) {
+ return;
+ }
+ }
+
+ /* current -mm kernel */
+ if (mem_sym.st_size >= 256 && mem_sym.st_size < COMMAND_LINE_SIZE) {
+ real_command_line_size = mem_sym.st_size;
+ return;
+ }
+}
+
+
/* Reads the appropriate file and retrieves the SYSTEM RAM regions for whom to
* create Elf headers. Keeping it separate from get_memory_ranges() as
* requirements are different in the case of normal kexec and crashdumps.
@@ -363,7 +393,7 @@ static int cmdline_add_memmap(char *cmdl
strcpy(str_mmap, " memmap=exactmap");
len = strlen(str_mmap);
cmdlen = strlen(cmdline) + len;
- if (cmdlen > (COMMAND_LINE_SIZE - 1))
+ if (cmdlen > (real_command_line_size - 1))
die("Command line overflow\n");
strcat(cmdline, str_mmap);
@@ -388,7 +418,7 @@ static int cmdline_add_memmap(char *cmdl
strcat (str_mmap, "K");
len = strlen(str_mmap);
cmdlen = strlen(cmdline) + len;
- if (cmdlen > (COMMAND_LINE_SIZE - 1))
+ if (cmdlen > (real_command_line_size - 1))
die("Command line overflow\n");
strcat(cmdline, str_mmap);
}
@@ -418,7 +448,7 @@ static int cmdline_add_elfcorehdr(char *
strcat(str, "K");
len = strlen(str);
cmdlen = strlen(cmdline) + len;
- if (cmdlen > (COMMAND_LINE_SIZE - 1))
+ if (cmdlen > (real_command_line_size - 1))
die("Command line overflow\n");
strcat(cmdline, str);
#if 0
Index: b/kexec/arch/i386/crashdump-x86.h
===================================================================
--- a/kexec/arch/i386/crashdump-x86.h
+++ b/kexec/arch/i386/crashdump-x86.h
@@ -2,8 +2,11 @@
#define CRASHDUMP_X86_H
struct kexec_info;
+struct mem_ehdr;
int load_crashdump_segments(struct kexec_info *info, char *mod_cmdline,
unsigned long max_addr, unsigned long min_base);
+void set_command_line_size(struct mem_ehdr *ehdr);
+
#define PAGE_OFFSET 0xc0000000
#define __pa(x) ((unsigned long)(x)-PAGE_OFFSET)
@@ -19,4 +22,6 @@ int load_crashdump_segments(struct kexec
#define BACKUP_SRC_END 0x0009ffff
#define BACKUP_SRC_SIZE (BACKUP_SRC_END - BACKUP_SRC_START + 1)
+extern int real_command_line_size;
+
#endif /* CRASHDUMP_X86_H */
Index: b/kexec/arch/x86_64/crashdump-x86_64.c
===================================================================
--- a/kexec/arch/x86_64/crashdump-x86_64.c
+++ b/kexec/arch/x86_64/crashdump-x86_64.c
@@ -50,6 +50,35 @@ static struct crash_elf_info elf_info =
/* Forward Declaration. */
static int exclude_crash_reserve_region(int *nr_ranges);
+/* real length of the command line from the kernel image, needed because
+ * command line size on x86-64 was increased recently in -mm tree */
+int real_command_line_size = COMMAND_LINE_SIZE;
+
+
+/* Tries to read the kernel command line size from the symbol table
+ * of the ELF kernel binary. */
+void set_command_line_size(struct mem_ehdr *ehdr)
+{
+ int ret;
+ struct mem_sym mem_sym;
+
+ /* > 2.6.20-rc6-mm */
+ ret = elf_rel_find_symbol(ehdr, "saved_command_line", &mem_sym);
+ if (ret != 0) {
+ /* older kernel */
+ ret = elf_rel_find_symbol(ehdr, "boot_command_line", &mem_sym);
+ if (ret != 0) {
+ return;
+ }
+ }
+
+ /* current -mm kernel */
+ if (mem_sym.st_size >= 256 && mem_sym.st_size < COMMAND_LINE_SIZE) {
+ real_command_line_size = mem_sym.st_size;
+ return;
+ }
+}
+
#define KERN_VADDR_ALIGN 0x100000 /* 1MB */
/* Read kernel physical load addr from /proc/iomem (Kernel Code) and
@@ -494,7 +523,7 @@ static int cmdline_add_memmap(char *cmdl
strcat (str_mmap, "K");
len = strlen(str_mmap);
cmdlen = strlen(cmdline) + len;
- if (cmdlen > (COMMAND_LINE_SIZE - 1))
+ if (cmdlen > (real_command_line_size - 1))
die("Command line overflow\n");
strcat(cmdline, str_mmap);
}
@@ -523,7 +552,7 @@ static int cmdline_add_elfcorehdr(char *
strcat(str, "K");
len = strlen(str);
cmdlen = strlen(cmdline) + len;
- if (cmdlen > (COMMAND_LINE_SIZE - 1))
+ if (cmdlen > (real_command_line_size - 1))
die("Command line overflow\n");
strcat(cmdline, str);
#ifdef DEBUG
@@ -555,7 +584,7 @@ static int cmdline_add_memmap_acpi(char
strcat (str_mmap, "K");
len = strlen(str_mmap);
cmdlen = strlen(cmdline) + len;
- if (cmdlen > (COMMAND_LINE_SIZE - 1))
+ if (cmdlen > (real_command_line_size - 1))
die("Command line overflow\n");
strcat(cmdline, str_mmap);
Index: b/kexec/arch/x86_64/crashdump-x86_64.h
===================================================================
--- a/kexec/arch/x86_64/crashdump-x86_64.h
+++ b/kexec/arch/x86_64/crashdump-x86_64.h
@@ -3,6 +3,7 @@
int load_crashdump_segments(struct kexec_info *info, char *mod_cmdline,
unsigned long max_addr, unsigned long min_base);
+void set_command_line_size(struct mem_ehdr *ehdr);
#define __START_KERNEL_map 0xffffffff80000000UL
#define PAGE_OFFSET 0xffff810000000000UL
@@ -21,4 +22,6 @@ int load_crashdump_segments(struct kexec
#define BACKUP_SRC_END 0x0009ffff
#define BACKUP_SRC_SIZE (BACKUP_SRC_END - BACKUP_SRC_START + 1)
+extern int real_command_line_size;
+
#endif /* CRASHDUMP_X86_64_H */
Index: b/kexec/arch/x86_64/kexec-elf-x86_64.c
===================================================================
--- a/kexec/arch/x86_64/kexec-elf-x86_64.c
+++ b/kexec/arch/x86_64/kexec-elf-x86_64.c
@@ -166,12 +166,12 @@ int elf_x86_64_load(int argc, char **arg
* taking crash dumps.
*/
if (info->kexec_flags & KEXEC_ON_CRASH) {
- modified_cmdline = xmalloc(COMMAND_LINE_SIZE);
- memset((void *)modified_cmdline, 0, COMMAND_LINE_SIZE);
+ modified_cmdline = xmalloc(real_command_line_size);
+ memset((void *)modified_cmdline, 0, real_command_line_size);
if (command_line) {
strncpy(modified_cmdline, command_line,
- COMMAND_LINE_SIZE);
- modified_cmdline[COMMAND_LINE_SIZE - 1] = '\0';
+ real_command_line_size);
+ modified_cmdline[real_command_line_size - 1] = '\0';
}
modified_cmdline_len = strlen(modified_cmdline);
}
@@ -182,6 +182,9 @@ int elf_x86_64_load(int argc, char **arg
entry = ehdr.e_entry;
max_addr = elf_max_addr(&ehdr);
+ /* try to set the command line size correctly */
+ set_command_line_size(&ehdr);
+
/* Do we want arguments? */
if (arg_style != ARG_STYLE_NONE) {
/* Load the setup code */
Index: b/kexec/arch/i386/kexec-bzImage.c
===================================================================
--- a/kexec/arch/i386/kexec-bzImage.c
+++ b/kexec/arch/i386/kexec-bzImage.c
@@ -156,12 +156,12 @@ int do_bzImage_load(struct kexec_info *i
* taking crash dumps.
*/
if (info->kexec_flags & KEXEC_ON_CRASH) {
- modified_cmdline = xmalloc(COMMAND_LINE_SIZE);
- memset((void *)modified_cmdline, 0, COMMAND_LINE_SIZE);
+ modified_cmdline = xmalloc(real_command_line_size);
+ memset((void *)modified_cmdline, 0, real_command_line_size);
if (command_line) {
strncpy(modified_cmdline, command_line,
- COMMAND_LINE_SIZE);
- modified_cmdline[COMMAND_LINE_SIZE - 1] = '\0';
+ real_command_line_size);
+ modified_cmdline[real_command_line_size - 1] = '\0';
}
/* If panic kernel is being loaded, additional segments need
Index: b/kexec/arch/i386/kexec-elf-x86.c
===================================================================
--- a/kexec/arch/i386/kexec-elf-x86.c
+++ b/kexec/arch/i386/kexec-elf-x86.c
@@ -166,12 +166,12 @@ int elf_x86_load(int argc, char **argv,
* taking crash dumps.
*/
if (info->kexec_flags & KEXEC_ON_CRASH) {
- modified_cmdline = xmalloc(COMMAND_LINE_SIZE);
- memset((void *)modified_cmdline, 0, COMMAND_LINE_SIZE);
+ modified_cmdline = xmalloc(real_command_line_size);
+ memset((void *)modified_cmdline, 0, real_command_line_size);
if (command_line) {
strncpy(modified_cmdline, command_line,
- COMMAND_LINE_SIZE);
- modified_cmdline[COMMAND_LINE_SIZE - 1] = '\0';
+ real_command_line_size);
+ modified_cmdline[real_command_line_size - 1] = '\0';
}
modified_cmdline_len = strlen(modified_cmdline);
}
Index: b/kexec/arch/i386/x86-linux-setup.c
===================================================================
--- a/kexec/arch/i386/x86-linux-setup.c
+++ b/kexec/arch/i386/x86-linux-setup.c
@@ -32,6 +32,8 @@
#include "kexec-x86.h"
#include "x86-linux-setup.h"
+extern int real_command_line_size;
+
void init_linux_parameters(struct x86_linux_param_header *real_mode)
{
/* Fill in the values that are usually provided by the kernel. */
@@ -91,8 +93,8 @@ void setup_linux_bootloader_parameters(
}
/* Fill in the command line */
- if (cmdline_len > COMMAND_LINE_SIZE) {
- cmdline_len = COMMAND_LINE_SIZE;
+ if (cmdline_len > real_command_line_size) {
+ cmdline_len = real_command_line_size;
}
cmdline_ptr = ((char *)real_mode) + cmdline_offset;
memcpy(cmdline_ptr, cmdline, cmdline_len);

View File

@ -1,101 +0,0 @@
* On ppc64 memory ranges in device-tree is denoted as start and size.
* While in case of other architectures like i386 it is represented as start and
* end. Because of this when loading the memory ranges in crashdump-elf.c the
* filesz calculation using start and end values of memory range goes for a toss.
*
* phdr->p_filesz = phdr->p_memsz = mend - mstart + 1;
*
* Because of the +1 in above statement the generated vmcore is not a valid
* dump file.
*
* There are different ways in which this problem can be fixed.
* A. Add a ifdef in crashdump-elf.c for elf machine type.
* if EM_PPC64 then
* filesz = end - start;
* else
* filesz = end - start + 1;
* fi
* B. Change the ppc64 specific code so as to follow the same convention when
* it comes to representing memory ranges.
* C. Create a PPC64 specific function to populate crash ranges and not use
* the generic function from crashdump-elf.c
*
* Of all these solutions B is the smallest and works well. Here is a patch
* to implement the same.
*
Signed-off-by : Sachin Sant <sachinp@in.ibm.com>
---
diff -Naurp gittree/kexec/arch/ppc64/crashdump-ppc64.c gittree-new/kexec/arch/ppc64/crashdump-ppc64.c
--- gittree/kexec/arch/ppc64/crashdump-ppc64.c 2006-12-26 14:56:01.000000000 +0530
+++ gittree-new/kexec/arch/ppc64/crashdump-ppc64.c 2007-01-23 19:38:31.000000000 +0530
@@ -120,7 +120,7 @@ static int get_crash_memory_ranges(struc
/* create a separate program header for the backup region */
crash_memory_range[0].start = BACKUP_SRC_START;
- crash_memory_range[0].end = BACKUP_SRC_END;
+ crash_memory_range[0].end = BACKUP_SRC_END + 1;
crash_memory_range[0].type = RANGE_RAM;
memory_ranges++;
@@ -165,8 +165,8 @@ static int get_crash_memory_ranges(struc
start = ((unsigned long long *)buf)[0];
end = start + ((unsigned long long *)buf)[1];
- if (start == 0 && end >= BACKUP_SRC_END)
- start = BACKUP_SRC_END;
+ if (start == 0 && end >= (BACKUP_SRC_END + 1))
+ start = BACKUP_SRC_END + 1;
cstart = crash_base;
cend = crash_base + crash_size;
@@ -309,7 +309,8 @@ int load_crashdump_segments(struct kexec
{
void *tmp;
unsigned long sz, elfcorehdr;
- int nr_ranges, align = 1024;
+ int nr_ranges, align = 1024, i;
+ unsigned long long end;
struct memory_range *mem_range;
if (get_crash_memory_ranges(&mem_range, &nr_ranges) < 0)
@@ -323,6 +324,22 @@ int load_crashdump_segments(struct kexec
0, max_addr, 1);
reserve(info->backup_start, sz);
+ /* On ppc64 memory ranges in device-tree is denoted as start
+ * and size rather than start and end, as is the case with
+ * other architectures like i386 . Because of this when loading
+ * the memory ranges in crashdump-elf.c the filesz calculation
+ * [ end - start + 1 ] goes for a toss.
+ *
+ * To be in sync with other archs adjust the end value for
+ * every crash memory range before calling the generic function
+ */
+
+ for (i = 0; i < nr_ranges; i++) {
+ end = crash_memory_range[i].end - 1;
+ crash_memory_range[i].end = end;
+ }
+
+
/* Create elf header segment and store crash image data. */
if (arch_options.core_header_type == CORE_TYPE_ELF64) {
if (crash_create_elf64_headers(info, &elf_info64,
diff -Naurp gittree/kexec/arch/ppc64/crashdump-ppc64.h gittree-new/kexec/arch/ppc64/crashdump-ppc64.h
--- gittree/kexec/arch/ppc64/crashdump-ppc64.h 2006-12-26 14:56:01.000000000 +0530
+++ gittree-new/kexec/arch/ppc64/crashdump-ppc64.h 2007-01-23 19:09:54.000000000 +0530
@@ -16,10 +16,10 @@ void add_usable_mem_rgns(unsigned long l
#define COMMAND_LINE_SIZE 512 /* from kernel */
/* Backup Region, First 64K of System RAM. */
#define BACKUP_SRC_START 0x0000
-#define BACKUP_SRC_END 0x10000
+#define BACKUP_SRC_END 0xffff
#define BACKUP_SRC_SIZE (BACKUP_SRC_END - BACKUP_SRC_START + 1)
-#define KDUMP_BACKUP_LIMIT BACKUP_SRC_END
+#define KDUMP_BACKUP_LIMIT BACKUP_SRC_SIZE
#define _ALIGN_UP(addr,size) (((addr)+((size)-1))&(~((size)-1)))
#define _ALIGN_DOWN(addr,size) ((addr)&(~((size)-1)))

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:bdf67b1ccb092c5ed806728707bebabb28448561c552ea0d1c96d151b422b87c
size 176790

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4a6db77bc82e051ee0a77d5152124402d279f41e0f4bb98cdd5c54ee7d912e6b
size 179664

View File

@ -1,3 +1,17 @@
-------------------------------------------------------------------
Mon Feb 5 12:38:11 CET 2007 - tiwai@suse.de
- updated to kexec-tools 2007.02.05:
* including last fixes
* fix for ppc64 dynamic memory range allocation (#242075)
-------------------------------------------------------------------
Fri Feb 2 16:46:35 CET 2007 - bwalle@suse.de
- fixes overflow on large IA64 systems (#241544)
- added KDUMP_COMMANDLINE_APPEND variable (#241607)
- increase the command line size (#236828)
-------------------------------------------------------------------
Mon Jan 29 15:41:43 CET 2007 - olh@suse.de

View File

@ -12,14 +12,14 @@
Name: kexec-tools
%define helperversion 0.1.0
%define package_version testing-20061219
%define package_version testing-20070205
License: GNU General Public License (GPL)
Group: System/Kernel
Requires: %insserv_prereq %fillup_prereq
Autoreqprov: on
Summary: Tools for fast kernel loading
Version: 1.101
Release: 67
Release: 68
Source: %{name}-%{package_version}.tar.bz2
Source1: kdump
Source2: sysconfig.kdump
@ -27,7 +27,7 @@ Source3: gdbinit.kdump
Source4: gdb-kdump
Source5: README.SUSE
Source6: kdump-helper-%{helperversion}.tar.bz2
Patch: kexec-tools-ppc64-range-fix.diff
Patch1: kexec-longer-cmdline.diff
URL: http://www.xmission.com/~ebiederm/files/kexec/
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: libelf
@ -52,7 +52,7 @@ Authors:
%prep
%setup -b 6 -q -n kdump-helper-%{helperversion}
%setup -q -n kexec-tools
%patch -p1
%patch1 -p1
%{?suse_update_config -f}
cp %{SOURCE5} .
@ -120,6 +120,14 @@ cd -
%{_sbindir}/kdump-helper
%changelog -n kexec-tools
* Mon Feb 05 2007 - tiwai@suse.de
- updated to kexec-tools 2007.02.05:
* including last fixes
* fix for ppc64 dynamic memory range allocation (#242075)
* Fri Feb 02 2007 - bwalle@suse.de
- fixes overflow on large IA64 systems (#241544)
- added KDUMP_COMMANDLINE_APPEND variable (#241607)
- increase the command line size (#236828)
* Mon Jan 29 2007 - olh@suse.de
- do not unload kdump kernel during runlevel changes (#238733)
* Thu Jan 25 2007 - bwalle@suse.de

View File

@ -27,6 +27,16 @@ KDUMP_KERNELVER="kdump"
#
KDUMP_COMMANDLINE=""
## Type: string
## Default: ""
## ServiceRestart: kdump
#
# Set this variable if you only want to _append_ values to the default
# command line string. The string gets also appended if KDUMP_COMMANDLINE
# is set.
#
KDUMP_COMMANDLINE_APPEND=""
## Type: string
## Default: ""
## ServiceRestart: kdump