Release 2.0.10-1
Rebase kexec-tools to 2.0.10 Drop unused 2.0.7 patches in git tree
This commit is contained in:
parent
2b76613fc9
commit
35dd19e611
1
.gitignore
vendored
1
.gitignore
vendored
@ -8,3 +8,4 @@
|
|||||||
/kexec-tools-2.0.9.tar.xz
|
/kexec-tools-2.0.9.tar.xz
|
||||||
/makedumpfile-1.5.8.tar.gz
|
/makedumpfile-1.5.8.tar.gz
|
||||||
/eppic_050615.tar.gz
|
/eppic_050615.tar.gz
|
||||||
|
/kexec-tools-2.0.10.tar.xz
|
||||||
|
@ -1,443 +0,0 @@
|
|||||||
From 046d1755d2bd723a11a180c265e61a884990712e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Vivek Goyal <vgoyal@redhat.com>
|
|
||||||
Date: Mon, 18 Aug 2014 11:22:32 -0400
|
|
||||||
Subject: [PATCH] kexec: Provide an option to use new kexec system call
|
|
||||||
|
|
||||||
Hi,
|
|
||||||
|
|
||||||
This is v2 of the patch. Since v1, I moved syscall implemented check littler
|
|
||||||
earlier in the function as per the feedback.
|
|
||||||
|
|
||||||
Now a new kexec syscall (kexec_file_load()) has been merged in upstream
|
|
||||||
kernel. This system call takes file descriptors of kernel and initramfs
|
|
||||||
as input (as opposed to list of segments to be loaded). This new system
|
|
||||||
call allows for signature verification of the kernel being loaded.
|
|
||||||
|
|
||||||
One use of signature verification of kernel is secureboot systems where
|
|
||||||
we want to allow kexec into a kernel only if it is validly signed by
|
|
||||||
a key system trusts.
|
|
||||||
|
|
||||||
This patch provides and option --kexec-file-syscall (-s), to force use of
|
|
||||||
new system call for kexec. Default is to continue to use old syscall.
|
|
||||||
|
|
||||||
Currently only bzImage64 on x86_64 can be loaded using this system call.
|
|
||||||
As kernel adds support for more arches and for more image types, kexec-tools
|
|
||||||
can be modified accordingly.
|
|
||||||
|
|
||||||
Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
|
|
||||||
Acked-by: Baoquan He <bhe@redhat.com>
|
|
||||||
Signed-off-by: Simon Horman <horms@verge.net.au>
|
|
||||||
---
|
|
||||||
kexec/arch/x86_64/kexec-bzImage64.c | 86 +++++++++++++++++++++++
|
|
||||||
kexec/kexec-syscall.h | 32 +++++++++
|
|
||||||
kexec/kexec.c | 132 +++++++++++++++++++++++++++++++++++-
|
|
||||||
kexec/kexec.h | 11 ++-
|
|
||||||
4 files changed, 257 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/kexec/arch/x86_64/kexec-bzImage64.c b/kexec/arch/x86_64/kexec-bzImage64.c
|
|
||||||
index 1983bcf..8edb3e4 100644
|
|
||||||
--- a/kexec/arch/x86_64/kexec-bzImage64.c
|
|
||||||
+++ b/kexec/arch/x86_64/kexec-bzImage64.c
|
|
||||||
@@ -235,6 +235,89 @@ static int do_bzImage64_load(struct kexec_info *info,
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* This assumes file is being loaded using file based kexec syscall */
|
|
||||||
+int bzImage64_load_file(int argc, char **argv, struct kexec_info *info)
|
|
||||||
+{
|
|
||||||
+ int ret = 0;
|
|
||||||
+ char *command_line = NULL, *tmp_cmdline = NULL;
|
|
||||||
+ const char *ramdisk = NULL, *append = NULL;
|
|
||||||
+ int entry_16bit = 0, entry_32bit = 0;
|
|
||||||
+ int opt;
|
|
||||||
+ int command_line_len;
|
|
||||||
+
|
|
||||||
+ /* See options.h -- add any more there, too. */
|
|
||||||
+ static const struct option options[] = {
|
|
||||||
+ KEXEC_ARCH_OPTIONS
|
|
||||||
+ { "command-line", 1, 0, OPT_APPEND },
|
|
||||||
+ { "append", 1, 0, OPT_APPEND },
|
|
||||||
+ { "reuse-cmdline", 0, 0, OPT_REUSE_CMDLINE },
|
|
||||||
+ { "initrd", 1, 0, OPT_RAMDISK },
|
|
||||||
+ { "ramdisk", 1, 0, OPT_RAMDISK },
|
|
||||||
+ { "real-mode", 0, 0, OPT_REAL_MODE },
|
|
||||||
+ { "entry-32bit", 0, 0, OPT_ENTRY_32BIT },
|
|
||||||
+ { 0, 0, 0, 0 },
|
|
||||||
+ };
|
|
||||||
+ static const char short_options[] = KEXEC_ARCH_OPT_STR "d";
|
|
||||||
+
|
|
||||||
+ while ((opt = getopt_long(argc, argv, short_options, options, 0)) != -1) {
|
|
||||||
+ switch (opt) {
|
|
||||||
+ default:
|
|
||||||
+ /* Ignore core options */
|
|
||||||
+ if (opt < OPT_ARCH_MAX)
|
|
||||||
+ break;
|
|
||||||
+ case OPT_APPEND:
|
|
||||||
+ append = optarg;
|
|
||||||
+ break;
|
|
||||||
+ case OPT_REUSE_CMDLINE:
|
|
||||||
+ tmp_cmdline = get_command_line();
|
|
||||||
+ break;
|
|
||||||
+ case OPT_RAMDISK:
|
|
||||||
+ ramdisk = optarg;
|
|
||||||
+ break;
|
|
||||||
+ case OPT_REAL_MODE:
|
|
||||||
+ entry_16bit = 1;
|
|
||||||
+ break;
|
|
||||||
+ case OPT_ENTRY_32BIT:
|
|
||||||
+ entry_32bit = 1;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ command_line = concat_cmdline(tmp_cmdline, append);
|
|
||||||
+ if (tmp_cmdline)
|
|
||||||
+ free(tmp_cmdline);
|
|
||||||
+ command_line_len = 0;
|
|
||||||
+ if (command_line) {
|
|
||||||
+ command_line_len = strlen(command_line) + 1;
|
|
||||||
+ } else {
|
|
||||||
+ command_line = strdup("\0");
|
|
||||||
+ command_line_len = 1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (entry_16bit || entry_32bit) {
|
|
||||||
+ fprintf(stderr, "Kexec2 syscall does not support 16bit"
|
|
||||||
+ " or 32bit entry yet\n");
|
|
||||||
+ ret = -1;
|
|
||||||
+ goto out;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (ramdisk) {
|
|
||||||
+ info->initrd_fd = open(ramdisk, O_RDONLY);
|
|
||||||
+ if (info->initrd_fd == -1) {
|
|
||||||
+ fprintf(stderr, "Could not open initrd file %s:%s\n",
|
|
||||||
+ ramdisk, strerror(errno));
|
|
||||||
+ ret = -1;
|
|
||||||
+ goto out;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ info->command_line = command_line;
|
|
||||||
+ info->command_line_len = command_line_len;
|
|
||||||
+ return ret;
|
|
||||||
+out:
|
|
||||||
+ free(command_line);
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
int bzImage64_load(int argc, char **argv, const char *buf, off_t len,
|
|
||||||
struct kexec_info *info)
|
|
||||||
{
|
|
||||||
@@ -247,6 +330,9 @@ int bzImage64_load(int argc, char **argv, const char *buf, off_t len,
|
|
||||||
int opt;
|
|
||||||
int result;
|
|
||||||
|
|
||||||
+ if (info->file_mode)
|
|
||||||
+ return bzImage64_load_file(argc, argv, info);
|
|
||||||
+
|
|
||||||
/* See options.h -- add any more there, too. */
|
|
||||||
static const struct option options[] = {
|
|
||||||
KEXEC_ARCH_OPTIONS
|
|
||||||
diff --git a/kexec/kexec-syscall.h b/kexec/kexec-syscall.h
|
|
||||||
index 6238044..ce2e20b 100644
|
|
||||||
--- a/kexec/kexec-syscall.h
|
|
||||||
+++ b/kexec/kexec-syscall.h
|
|
||||||
@@ -53,6 +53,19 @@
|
|
||||||
#endif
|
|
||||||
#endif /*ifndef __NR_kexec_load*/
|
|
||||||
|
|
||||||
+#ifndef __NR_kexec_file_load
|
|
||||||
+
|
|
||||||
+#ifdef __x86_64__
|
|
||||||
+#define __NR_kexec_file_load 320
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#ifndef __NR_kexec_file_load
|
|
||||||
+/* system call not available for the arch */
|
|
||||||
+#define __NR_kexec_file_load 0xffffffff /* system call not available */
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#endif /*ifndef __NR_kexec_file_load*/
|
|
||||||
+
|
|
||||||
struct kexec_segment;
|
|
||||||
|
|
||||||
static inline long kexec_load(void *entry, unsigned long nr_segments,
|
|
||||||
@@ -61,10 +74,29 @@ static inline long kexec_load(void *entry, unsigned long nr_segments,
|
|
||||||
return (long) syscall(__NR_kexec_load, entry, nr_segments, segments, flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static inline int is_kexec_file_load_implemented(void) {
|
|
||||||
+ if (__NR_kexec_file_load != 0xffffffff)
|
|
||||||
+ return 1;
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static inline long kexec_file_load(int kernel_fd, int initrd_fd,
|
|
||||||
+ unsigned long cmdline_len, const char *cmdline_ptr,
|
|
||||||
+ unsigned long flags)
|
|
||||||
+{
|
|
||||||
+ return (long) syscall(__NR_kexec_file_load, kernel_fd, initrd_fd,
|
|
||||||
+ cmdline_len, cmdline_ptr, flags);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
#define KEXEC_ON_CRASH 0x00000001
|
|
||||||
#define KEXEC_PRESERVE_CONTEXT 0x00000002
|
|
||||||
#define KEXEC_ARCH_MASK 0xffff0000
|
|
||||||
|
|
||||||
+/* Flags for kexec file based system call */
|
|
||||||
+#define KEXEC_FILE_UNLOAD 0x00000001
|
|
||||||
+#define KEXEC_FILE_ON_CRASH 0x00000002
|
|
||||||
+#define KEXEC_FILE_NO_INITRAMFS 0x00000004
|
|
||||||
+
|
|
||||||
/* These values match the ELF architecture values.
|
|
||||||
* Unless there is a good reason that should continue to be the case.
|
|
||||||
*/
|
|
||||||
diff --git a/kexec/kexec.c b/kexec/kexec.c
|
|
||||||
index 133e622..7e7b604 100644
|
|
||||||
--- a/kexec/kexec.c
|
|
||||||
+++ b/kexec/kexec.c
|
|
||||||
@@ -51,6 +51,8 @@
|
|
||||||
unsigned long long mem_min = 0;
|
|
||||||
unsigned long long mem_max = ULONG_MAX;
|
|
||||||
static unsigned long kexec_flags = 0;
|
|
||||||
+/* Flags for kexec file (fd) based syscall */
|
|
||||||
+static unsigned long kexec_file_flags = 0;
|
|
||||||
int kexec_debug = 0;
|
|
||||||
|
|
||||||
void dbgprint_mem_range(const char *prefix, struct memory_range *mr, int nr_mr)
|
|
||||||
@@ -787,6 +789,19 @@ static int my_load(const char *type, int fileind, int argc, char **argv,
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static int kexec_file_unload(unsigned long kexec_file_flags)
|
|
||||||
+{
|
|
||||||
+ int ret = 0;
|
|
||||||
+
|
|
||||||
+ ret = kexec_file_load(-1, -1, 0, NULL, kexec_file_flags);
|
|
||||||
+ if (ret != 0) {
|
|
||||||
+ /* The unload failed, print some debugging information */
|
|
||||||
+ fprintf(stderr, "kexec_file_load(unload) failed\n: %s\n",
|
|
||||||
+ strerror(errno));
|
|
||||||
+ }
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int k_unload (unsigned long kexec_flags)
|
|
||||||
{
|
|
||||||
int result;
|
|
||||||
@@ -925,6 +940,7 @@ void usage(void)
|
|
||||||
" (0 means it's not jump back or\n"
|
|
||||||
" preserve context)\n"
|
|
||||||
" to original kernel.\n"
|
|
||||||
+ " -s, --kexec-file-syscall Use file based syscall for kexec operation\n"
|
|
||||||
" -d, --debug Enable debugging to help spot a failure.\n"
|
|
||||||
"\n"
|
|
||||||
"Supported kernel file types and options: \n");
|
|
||||||
@@ -1072,6 +1088,82 @@ char *concat_cmdline(const char *base, const char *append)
|
|
||||||
return cmdline;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* New file based kexec system call related code */
|
|
||||||
+static int do_kexec_file_load(int fileind, int argc, char **argv,
|
|
||||||
+ unsigned long flags) {
|
|
||||||
+
|
|
||||||
+ char *kernel;
|
|
||||||
+ int kernel_fd, i;
|
|
||||||
+ struct kexec_info info;
|
|
||||||
+ int ret = 0;
|
|
||||||
+ char *kernel_buf;
|
|
||||||
+ off_t kernel_size;
|
|
||||||
+
|
|
||||||
+ memset(&info, 0, sizeof(info));
|
|
||||||
+ info.segment = NULL;
|
|
||||||
+ info.nr_segments = 0;
|
|
||||||
+ info.entry = NULL;
|
|
||||||
+ info.backup_start = 0;
|
|
||||||
+ info.kexec_flags = flags;
|
|
||||||
+
|
|
||||||
+ info.file_mode = 1;
|
|
||||||
+ info.initrd_fd = -1;
|
|
||||||
+
|
|
||||||
+ if (!is_kexec_file_load_implemented()) {
|
|
||||||
+ fprintf(stderr, "syscall kexec_file_load not available.\n");
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (argc - fileind <= 0) {
|
|
||||||
+ fprintf(stderr, "No kernel specified\n");
|
|
||||||
+ usage();
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ kernel = argv[fileind];
|
|
||||||
+
|
|
||||||
+ kernel_fd = open(kernel, O_RDONLY);
|
|
||||||
+ if (kernel_fd == -1) {
|
|
||||||
+ fprintf(stderr, "Failed to open file %s:%s\n", kernel,
|
|
||||||
+ strerror(errno));
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* slurp in the input kernel */
|
|
||||||
+ kernel_buf = slurp_decompress_file(kernel, &kernel_size);
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < file_types; i++) {
|
|
||||||
+ if (file_type[i].probe(kernel_buf, kernel_size) >= 0)
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (i == file_types) {
|
|
||||||
+ fprintf(stderr, "Cannot determine the file type " "of %s\n",
|
|
||||||
+ kernel);
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ ret = file_type[i].load(argc, argv, kernel_buf, kernel_size, &info);
|
|
||||||
+ if (ret < 0) {
|
|
||||||
+ fprintf(stderr, "Cannot load %s\n", kernel);
|
|
||||||
+ return ret;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * If there is no initramfs, set KEXEC_FILE_NO_INITRAMFS flag so that
|
|
||||||
+ * kernel does not return error with negative initrd_fd.
|
|
||||||
+ */
|
|
||||||
+ if (info.initrd_fd == -1)
|
|
||||||
+ info.kexec_flags |= KEXEC_FILE_NO_INITRAMFS;
|
|
||||||
+
|
|
||||||
+ ret = kexec_file_load(kernel_fd, info.initrd_fd, info.command_line_len,
|
|
||||||
+ info.command_line, info.kexec_flags);
|
|
||||||
+ if (ret != 0)
|
|
||||||
+ fprintf(stderr, "kexec_file_load failed: %s\n",
|
|
||||||
+ strerror(errno));
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
@@ -1083,6 +1175,7 @@ int main(int argc, char *argv[])
|
|
||||||
int do_ifdown = 0;
|
|
||||||
int do_unload = 0;
|
|
||||||
int do_reuse_initrd = 0;
|
|
||||||
+ int do_kexec_file_syscall = 0;
|
|
||||||
void *entry = 0;
|
|
||||||
char *type = 0;
|
|
||||||
char *endptr;
|
|
||||||
@@ -1095,6 +1188,23 @@ int main(int argc, char *argv[])
|
|
||||||
};
|
|
||||||
static const char short_options[] = KEXEC_ALL_OPT_STR;
|
|
||||||
|
|
||||||
+ /*
|
|
||||||
+ * First check if --use-kexec-file-syscall is set. That changes lot of
|
|
||||||
+ * things
|
|
||||||
+ */
|
|
||||||
+ while ((opt = getopt_long(argc, argv, short_options,
|
|
||||||
+ options, 0)) != -1) {
|
|
||||||
+ switch(opt) {
|
|
||||||
+ case OPT_KEXEC_FILE_SYSCALL:
|
|
||||||
+ do_kexec_file_syscall = 1;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Reset getopt for the next pass. */
|
|
||||||
+ opterr = 1;
|
|
||||||
+ optind = 1;
|
|
||||||
+
|
|
||||||
while ((opt = getopt_long(argc, argv, short_options,
|
|
||||||
options, 0)) != -1) {
|
|
||||||
switch(opt) {
|
|
||||||
@@ -1127,6 +1237,8 @@ int main(int argc, char *argv[])
|
|
||||||
do_shutdown = 0;
|
|
||||||
do_sync = 0;
|
|
||||||
do_unload = 1;
|
|
||||||
+ if (do_kexec_file_syscall)
|
|
||||||
+ kexec_file_flags |= KEXEC_FILE_UNLOAD;
|
|
||||||
break;
|
|
||||||
case OPT_EXEC:
|
|
||||||
do_load = 0;
|
|
||||||
@@ -1169,7 +1281,10 @@ int main(int argc, char *argv[])
|
|
||||||
do_exec = 0;
|
|
||||||
do_shutdown = 0;
|
|
||||||
do_sync = 0;
|
|
||||||
- kexec_flags = KEXEC_ON_CRASH;
|
|
||||||
+ if (do_kexec_file_syscall)
|
|
||||||
+ kexec_file_flags |= KEXEC_FILE_ON_CRASH;
|
|
||||||
+ else
|
|
||||||
+ kexec_flags = KEXEC_ON_CRASH;
|
|
||||||
break;
|
|
||||||
case OPT_MEM_MIN:
|
|
||||||
mem_min = strtoul(optarg, &endptr, 0);
|
|
||||||
@@ -1194,6 +1309,9 @@ int main(int argc, char *argv[])
|
|
||||||
case OPT_REUSE_INITRD:
|
|
||||||
do_reuse_initrd = 1;
|
|
||||||
break;
|
|
||||||
+ case OPT_KEXEC_FILE_SYSCALL:
|
|
||||||
+ /* We already parsed it. Nothing to do. */
|
|
||||||
+ break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
@@ -1238,10 +1356,18 @@ int main(int argc, char *argv[])
|
|
||||||
}
|
|
||||||
|
|
||||||
if (do_unload) {
|
|
||||||
- result = k_unload(kexec_flags);
|
|
||||||
+ if (do_kexec_file_syscall)
|
|
||||||
+ result = kexec_file_unload(kexec_file_flags);
|
|
||||||
+ else
|
|
||||||
+ result = k_unload(kexec_flags);
|
|
||||||
}
|
|
||||||
if (do_load && (result == 0)) {
|
|
||||||
- result = my_load(type, fileind, argc, argv, kexec_flags, entry);
|
|
||||||
+ if (do_kexec_file_syscall)
|
|
||||||
+ result = do_kexec_file_load(fileind, argc, argv,
|
|
||||||
+ kexec_file_flags);
|
|
||||||
+ else
|
|
||||||
+ result = my_load(type, fileind, argc, argv,
|
|
||||||
+ kexec_flags, entry);
|
|
||||||
}
|
|
||||||
/* Don't shutdown unless there is something to reboot to! */
|
|
||||||
if ((result == 0) && (do_shutdown || do_exec) && !kexec_loaded()) {
|
|
||||||
diff --git a/kexec/kexec.h b/kexec/kexec.h
|
|
||||||
index 2fad7dc..4be2b2f 100644
|
|
||||||
--- a/kexec/kexec.h
|
|
||||||
+++ b/kexec/kexec.h
|
|
||||||
@@ -156,6 +156,13 @@ struct kexec_info {
|
|
||||||
unsigned long kexec_flags;
|
|
||||||
unsigned long backup_src_start;
|
|
||||||
unsigned long backup_src_size;
|
|
||||||
+ /* Set to 1 if we are using kexec file syscall */
|
|
||||||
+ unsigned long file_mode :1;
|
|
||||||
+
|
|
||||||
+ /* Filled by kernel image processing code */
|
|
||||||
+ int initrd_fd;
|
|
||||||
+ char *command_line;
|
|
||||||
+ int command_line_len;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct arch_map_entry {
|
|
||||||
@@ -207,6 +214,7 @@ extern int file_types;
|
|
||||||
#define OPT_UNLOAD 'u'
|
|
||||||
#define OPT_TYPE 't'
|
|
||||||
#define OPT_PANIC 'p'
|
|
||||||
+#define OPT_KEXEC_FILE_SYSCALL 's'
|
|
||||||
#define OPT_MEM_MIN 256
|
|
||||||
#define OPT_MEM_MAX 257
|
|
||||||
#define OPT_REUSE_INITRD 258
|
|
||||||
@@ -230,9 +238,10 @@ extern int file_types;
|
|
||||||
{ "mem-min", 1, 0, OPT_MEM_MIN }, \
|
|
||||||
{ "mem-max", 1, 0, OPT_MEM_MAX }, \
|
|
||||||
{ "reuseinitrd", 0, 0, OPT_REUSE_INITRD }, \
|
|
||||||
+ { "kexec-file-syscall", 0, 0, OPT_KEXEC_FILE_SYSCALL }, \
|
|
||||||
{ "debug", 0, 0, OPT_DEBUG }, \
|
|
||||||
|
|
||||||
-#define KEXEC_OPT_STR "h?vdfxluet:p"
|
|
||||||
+#define KEXEC_OPT_STR "h?vdfxluet:ps"
|
|
||||||
|
|
||||||
extern void dbgprint_mem_range(const char *prefix, struct memory_range *mr, int nr_mr);
|
|
||||||
extern void die(const char *fmt, ...)
|
|
||||||
--
|
|
||||||
1.9.0
|
|
||||||
|
|
@ -1,37 +0,0 @@
|
|||||||
From 335bad77fb0750f3961aa8df47c83a522d212b08 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Laurent Dufour <ldufour@linux.vnet.ibm.com>
|
|
||||||
Date: Tue, 22 Jul 2014 18:22:28 +0200
|
|
||||||
Subject: [PATCH] kexec/ppc64: disabling exception handling when building the
|
|
||||||
purgatory
|
|
||||||
|
|
||||||
Some Linux distributions would like to turn on the GCC exception handling
|
|
||||||
by default. As this option introduces symbols in the built code that are
|
|
||||||
defined in a separate shared library, this is not a good idea to have such
|
|
||||||
an option activated when building the purgatory.
|
|
||||||
|
|
||||||
This patch forces the exception handling to be turned off when building the
|
|
||||||
purgatory on ppc64 BE and LE.
|
|
||||||
|
|
||||||
Signed-off-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>
|
|
||||||
Signed-off-by: Simon Horman <horms@verge.net.au>
|
|
||||||
---
|
|
||||||
purgatory/arch/ppc64/Makefile | 3 ++-
|
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/purgatory/arch/ppc64/Makefile b/purgatory/arch/ppc64/Makefile
|
|
||||||
index 712e2b1..6c58fa2 100644
|
|
||||||
--- a/purgatory/arch/ppc64/Makefile
|
|
||||||
+++ b/purgatory/arch/ppc64/Makefile
|
|
||||||
@@ -9,7 +9,8 @@ ppc64_PURGATORY_SRCS += purgatory/arch/ppc64/console-ppc64.c
|
|
||||||
ppc64_PURGATORY_SRCS += purgatory/arch/ppc64/crashdump_backup.c
|
|
||||||
ppc64_PURGATORY_SRCS += purgatory/arch/ppc64/misc.S
|
|
||||||
|
|
||||||
-ppc64_PURGATORY_EXTRA_CFLAGS += -m64 -msoft-float -fno-stack-protector
|
|
||||||
+ppc64_PURGATORY_EXTRA_CFLAGS += -m64 -msoft-float -fno-stack-protector \
|
|
||||||
+ -fno-exceptions
|
|
||||||
ppc64_PURGATORY_EXTRA_ASFLAGS += -m64
|
|
||||||
ifeq ($(SUBARCH),BE)
|
|
||||||
ppc64_PURGATORY_EXTRA_LDFLAGS += -melf64ppc
|
|
||||||
--
|
|
||||||
1.9.3
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
|||||||
From 2ca220389d212249cc842d49084c95e524fb299b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Laurent Dufour <ldufour@linux.vnet.ibm.com>
|
|
||||||
Date: Mon, 16 Jun 2014 14:42:43 +0200
|
|
||||||
Subject: [PATCH] kexec/ppc64: move to device tree version 17
|
|
||||||
|
|
||||||
Kernel commit e6a6928c3ea1d0195ed75a091e345696b916c09b changed the way the
|
|
||||||
device tree is processed in the kernel. Now version 2 is no more supported.
|
|
||||||
|
|
||||||
This patch move the version of the device tree generated in ppc64
|
|
||||||
environment from 2 to 17, allowing to kexec kernel 3.16.
|
|
||||||
|
|
||||||
In addition, automates the define of NEED_STRUCTURE_BLOCK_EXTRA_PAD which
|
|
||||||
should not be set for DT version 16 and above.
|
|
||||||
|
|
||||||
Signed-off-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>
|
|
||||||
Signed-off-by: Simon Horman <horms@verge.net.au>
|
|
||||||
---
|
|
||||||
kexec/arch/ppc64/kexec-ppc64.h | 8 +++++---
|
|
||||||
1 file changed, 5 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/kexec/arch/ppc64/kexec-ppc64.h b/kexec/arch/ppc64/kexec-ppc64.h
|
|
||||||
index 9a0aecf..89ee942 100644
|
|
||||||
--- a/kexec/arch/ppc64/kexec-ppc64.h
|
|
||||||
+++ b/kexec/arch/ppc64/kexec-ppc64.h
|
|
||||||
@@ -6,9 +6,11 @@
|
|
||||||
#define CORE_TYPE_ELF32 1
|
|
||||||
#define CORE_TYPE_ELF64 2
|
|
||||||
|
|
||||||
-#define BOOT_BLOCK_VERSION 2
|
|
||||||
-#define BOOT_BLOCK_LAST_COMP_VERSION 2
|
|
||||||
-#define NEED_STRUCTURE_BLOCK_EXTRA_PAD
|
|
||||||
+#define BOOT_BLOCK_VERSION 17
|
|
||||||
+#define BOOT_BLOCK_LAST_COMP_VERSION 17
|
|
||||||
+#if (BOOT_BLOCK_VERSION < 16)
|
|
||||||
+# define NEED_STRUCTURE_BLOCK_EXTRA_PAD
|
|
||||||
+#endif
|
|
||||||
#define HAVE_DYNAMIC_MEMORY
|
|
||||||
#define NEED_RESERVE_DTB
|
|
||||||
|
|
||||||
--
|
|
||||||
1.9.3
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
|||||||
From 45b33eb2e70cd44f41abf1058a92659cb4315011 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Laurent Dufour <ldufour@linux.vnet.ibm.com>
|
|
||||||
Date: Fri, 25 Jul 2014 17:07:49 +0200
|
|
||||||
Subject: [PATCH] ppc64/kdump: Fix ELF header endianess
|
|
||||||
|
|
||||||
The ELF header created among the loading of the kdump kernel should be
|
|
||||||
flagged using the current endianess and not always as big endian.
|
|
||||||
|
|
||||||
Without this patch the data exposed in /proc/vmcore are not readable when
|
|
||||||
running in LE mode.
|
|
||||||
|
|
||||||
Signed-off-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>
|
|
||||||
Signed-off-by: Simon Horman <horms@verge.net.au>
|
|
||||||
---
|
|
||||||
kexec/arch/ppc64/crashdump-ppc64.c | 4 ++++
|
|
||||||
1 file changed, 4 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/kexec/arch/ppc64/crashdump-ppc64.c b/kexec/arch/ppc64/crashdump-ppc64.c
|
|
||||||
index 00a0e63..6214b83 100644
|
|
||||||
--- a/kexec/arch/ppc64/crashdump-ppc64.c
|
|
||||||
+++ b/kexec/arch/ppc64/crashdump-ppc64.c
|
|
||||||
@@ -38,7 +38,11 @@
|
|
||||||
static struct crash_elf_info elf_info64 =
|
|
||||||
{
|
|
||||||
class: ELFCLASS64,
|
|
||||||
+#if BYTE_ORDER == LITTLE_ENDIAN
|
|
||||||
+ data: ELFDATA2LSB,
|
|
||||||
+#else
|
|
||||||
data: ELFDATA2MSB,
|
|
||||||
+#endif
|
|
||||||
machine: EM_PPC64,
|
|
||||||
page_offset: PAGE_OFFSET,
|
|
||||||
lowmem_limit: MAXMEM,
|
|
||||||
--
|
|
||||||
1.9.3
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
Name: kexec-tools
|
Name: kexec-tools
|
||||||
Version: 2.0.9
|
Version: 2.0.10
|
||||||
Release: 2%{?dist}
|
Release: 1%{?dist}
|
||||||
License: GPLv2
|
License: GPLv2
|
||||||
Group: Applications/System
|
Group: Applications/System
|
||||||
Summary: The kexec/kdump userspace component
|
Summary: The kexec/kdump userspace component
|
||||||
@ -308,6 +308,11 @@ done
|
|||||||
%doc
|
%doc
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Jul 9 2015 Dave Young <dyoung@redhat.com> - 2.0.10-1
|
||||||
|
- Rebase kexec-tools 2.0.10
|
||||||
|
- Rebase eppic git tree 050615
|
||||||
|
- Enhance kdump.conf "default" parameters check
|
||||||
|
|
||||||
* Thu Jul 2 2015 Dave Young <dyoung@redhat.com> - 2.0.9-2
|
* Thu Jul 2 2015 Dave Young <dyoung@redhat.com> - 2.0.9-2
|
||||||
- Resolve bug 1236456, kexec load fail because koji add extra gcc flags.
|
- Resolve bug 1236456, kexec load fail because koji add extra gcc flags.
|
||||||
- Remove -FPIC for makedumpfile since it is not necessary without harden build
|
- Remove -FPIC for makedumpfile since it is not necessary without harden build
|
||||||
|
2
sources
2
sources
@ -1,6 +1,6 @@
|
|||||||
31668a6dfb8823dd0b7ac09d06fb902e makedumpfile-1.5.7.tar.gz
|
31668a6dfb8823dd0b7ac09d06fb902e makedumpfile-1.5.7.tar.gz
|
||||||
2c4dec4e857e84ca530478bac0ec114b kexec-tools-2.0.8.tar.xz
|
|
||||||
b05ad86688ed7f1a4fb6fbb6323b4aee kdump-anaconda-addon-005-9-g6115ca7.tar.gz
|
b05ad86688ed7f1a4fb6fbb6323b4aee kdump-anaconda-addon-005-9-g6115ca7.tar.gz
|
||||||
6681319934e22e74c532bd392ccb1bbb kexec-tools-2.0.9.tar.xz
|
6681319934e22e74c532bd392ccb1bbb kexec-tools-2.0.9.tar.xz
|
||||||
642d975349dff744c6027d4486499258 makedumpfile-1.5.8.tar.gz
|
642d975349dff744c6027d4486499258 makedumpfile-1.5.8.tar.gz
|
||||||
43e84f9d3e5b7ba939cc05035a6fb78a eppic_050615.tar.gz
|
43e84f9d3e5b7ba939cc05035a6fb78a eppic_050615.tar.gz
|
||||||
|
70c7e63af2274e040812b243c26ccac8 kexec-tools-2.0.10.tar.xz
|
||||||
|
Loading…
Reference in New Issue
Block a user