public inbox for linux-s390@vger.kernel.org
 help / color / mirror / Atom feed
From: Michael Holzheu <holzheu@linux.vnet.ibm.com>
To: ebiederm@xmission.com, vgoyal@redhat.com, hbabu@us.ibm.com,
	mahesh@linux.vnet.ibm.com
Cc: oomichi@mxs.nes.nec.co.jp, horms@verge.net.au,
	schwidefsky@de.ibm.com, heiko.carstens@de.ibm.com,
	kexec@lists.infradead.org, linux-kernel@vger.kernel.org,
	linux-s390@vger.kernel.org
Subject: [patch 9/9] kexec-tools: Add s390 kdump support
Date: Mon, 04 Jul 2011 19:09:31 +0200	[thread overview]
Message-ID: <20110704171000.123254263@linux.vnet.ibm.com> (raw)
In-Reply-To: 20110704170922.976299676@linux.vnet.ibm.com

[-- Attachment #1: kexec-tools-s390-kdump.patch --]
[-- Type: text/plain, Size: 3963 bytes --]

From: Michael Holzheu <holzheu@linux.vnet.ibm.com>

This patch adds kdump support for s390 to the kexec tool and enables the
"--load-panic" option. When loading the kdump kernel and ramdisk we add the
address of the crashkernel memory to the normal load address.

Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
---
 kexec/arch/s390/kexec-image.c |   16 +++++++++++++---
 kexec/arch/s390/kexec-s390.c  |   24 +++++++++++++++++++++---
 2 files changed, 34 insertions(+), 6 deletions(-)

--- a/kexec/arch/s390/kexec-image.c
+++ b/kexec/arch/s390/kexec-image.c
@@ -18,6 +18,7 @@
 #include <unistd.h>
 #include <getopt.h>
 #include "../../kexec.h"
+#include "../../kexec-syscall.h"
 #include "kexec-s390.h"
 #include <arch/options.h>
 
@@ -32,6 +33,7 @@ image_s390_load(int argc, char **argv, c
 	int command_line_len;
 	off_t ramdisk_len;
 	unsigned int ramdisk_origin;
+	uint64_t crash_base, crash_end;
 	int opt;
 
 	static const struct option options[] =
@@ -47,6 +49,7 @@ image_s390_load(int argc, char **argv, c
 	command_line = NULL;
 	ramdisk_len = 0;
 	ramdisk_origin = 0;
+	crash_base = 0;
 
 	while ((opt = getopt_long(argc,argv,short_options,options,0)) != -1) {
 		switch(opt) {
@@ -71,10 +74,16 @@ image_s390_load(int argc, char **argv, c
 			return -1;
 		}
 	}
+	if (info->kexec_flags & KEXEC_ON_CRASH) {
+		if (parse_iomem_single("Crash kernel\n", &crash_base,
+				       &crash_end))
+			return -1;
+	}
 
 	/* Add kernel segment */
 	add_segment(info, kernel_buf + IMAGE_READ_OFFSET,
-		    kernel_size - IMAGE_READ_OFFSET, IMAGE_READ_OFFSET,
+		    kernel_size - IMAGE_READ_OFFSET,
+		    crash_base + IMAGE_READ_OFFSET,
 		    kernel_size - IMAGE_READ_OFFSET);
 
 	/* We do want to change the kernel image */
@@ -88,7 +97,8 @@ image_s390_load(int argc, char **argv, c
 			return -1;
 		}
 		ramdisk_origin = RAMDISK_ORIGIN_ADDR;
-		add_segment(info, rd_buffer, ramdisk_len, RAMDISK_ORIGIN_ADDR, ramdisk_len);
+		add_segment(info, rd_buffer, ramdisk_len,
+			    crash_base + RAMDISK_ORIGIN_ADDR, ramdisk_len);
 	}
 	
 	/* Register the ramdisk in the kernel. */
@@ -111,7 +121,7 @@ image_s390_load(int argc, char **argv, c
 		memcpy(krnl_buffer + COMMAND_LINE_OFFS, command_line, strlen(command_line));
 	}
 
-	info->entry = (void *) IMAGE_READ_OFFSET;
+	info->entry = (void *) crash_base + IMAGE_READ_OFFSET;
 
 	return 0;
 }
--- a/kexec/arch/s390/kexec-s390.c
+++ b/kexec/arch/s390/kexec-s390.c
@@ -37,8 +37,9 @@ static struct memory_range memory_range[
  */
 
 int get_memory_ranges(struct memory_range **range, int *ranges,
-		      unsigned long UNUSED(flags))
+		      unsigned long flags)
 {
+	char crash_kernel[] = "Crash kernel\n";
 	char sys_ram[] = "System RAM\n";
 	const char *iomem = proc_iomem();
 	FILE *fp;
@@ -62,7 +63,9 @@ int get_memory_ranges(struct memory_rang
 
 		sscanf(line,"%Lx-%Lx : %n", &start, &end, &cons);
 		str = line+cons;
-		if(memcmp(str,sys_ram,strlen(sys_ram)) == 0) {
+		if((memcmp(str,sys_ram,strlen(sys_ram)) == 0) ||
+		   ((flags & KEXEC_ON_CRASH) &&
+		   memcmp(str,crash_kernel,strlen(crash_kernel)) == 0)) {
 			memory_range[current_range].start = start;
 			memory_range[current_range].end = end;
 			memory_range[current_range].type = RANGE_RAM;
@@ -76,6 +79,18 @@ int get_memory_ranges(struct memory_rang
 	*range = memory_range;
 	*ranges = current_range;
 
+	if ((flags & KEXEC_ON_CRASH) && !(flags & KEXEC_PRESERVE_CONTEXT)) {
+		uint64_t start, end;
+
+		if (parse_iomem_single("Crash kernel\n", &start, &end)) {
+			fprintf(stderr, "parse_iomem_single failed.\n");
+			return -1;
+		}
+		if (start > mem_min)
+			mem_min = start;
+		if (end < mem_max)
+			mem_max = end;
+	}
 	return 0;
 }
 
@@ -112,5 +127,8 @@ void arch_update_purgatory(struct kexec_
 
 int is_crashkernel_mem_reserved(void)
 {
-	return 0; /* kdump is not supported on this platform (yet) */
+	uint64_t start, end;
+
+	return parse_iomem_single("Crash kernel\n", &start, &end) == 0 ?
+		(start != end) : 0;
 }

  parent reply	other threads:[~2011-07-04 17:09 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-04 17:09 [patch 0/9] kdump: Patch series for s390 support Michael Holzheu
2011-07-04 17:09 ` [patch 1/9] kdump: Add KEXEC_CRASH_CONTROL_MEMORY_LIMIT Michael Holzheu
2011-07-04 17:09 ` [patch 2/9] kdump: Add machine_kexec_finish() Michael Holzheu
2011-07-04 17:09 ` [patch 3/9] kdump: Make kimage_load_crash_segment() weak Michael Holzheu
2011-07-04 17:09 ` [patch 4/9] kdump: Initialize vmcoreinfo note at startup Michael Holzheu
2011-07-04 17:09 ` [patch 5/9] kdump: Allow vmcore ELF header to be created in new kernel Michael Holzheu
2011-07-04 17:09 ` [patch 6/9] kdump: Merge set_vmcore_list_offsets_elf_32/64() Michael Holzheu
2011-07-04 17:09 ` [patch 7/9] kdump: Trigger kdump via panic notifier chain on s390 Michael Holzheu
2011-07-04 17:09 ` [patch 8/9] s390: kdump backend code Michael Holzheu
2011-07-04 17:09 ` Michael Holzheu [this message]
2011-07-05 20:26 ` [patch 0/9] kdump: Patch series for s390 support Vivek Goyal
2011-07-06  9:24   ` Michael Holzheu
2011-07-07 19:33     ` Vivek Goyal
2011-07-08  9:01       ` Martin Schwidefsky
2011-07-11 14:42         ` Vivek Goyal
2011-07-11 15:56           ` Martin Schwidefsky
2011-07-13 16:02             ` Vivek Goyal
2011-07-13 16:46               ` Martin Schwidefsky
2011-07-13 16:59                 ` Michael Holzheu
2011-07-13 17:19                   ` Vivek Goyal
2011-07-13 20:00                 ` Vivek Goyal
2011-07-14  7:18                   ` Martin Schwidefsky
2011-07-14 17:55                     ` Vivek Goyal
2011-07-14 18:05                       ` Vivek Goyal
2011-07-15 14:21                         ` Michael Holzheu
2011-07-15 14:38                           ` Vivek Goyal
2011-07-15 15:43                             ` Michael Holzheu
2011-07-18 12:31                               ` Vivek Goyal
2011-07-18 14:00                                 ` Michael Holzheu
2011-07-18 14:19                                   ` Vivek Goyal
2011-07-18 14:44                                     ` Michael Holzheu
2011-07-18 15:25                                       ` Vivek Goyal
2011-07-18 18:03                                         ` Michael Holzheu
2011-07-19 15:04                                           ` Vivek Goyal
2011-07-20  8:00                                             ` Martin Schwidefsky
2011-07-20  9:28                                             ` Michael Holzheu
2011-07-20 20:24                                               ` Vivek Goyal
2011-07-20 19:25                                           ` Vivek Goyal
2011-07-21 14:58                                             ` Michael Holzheu
2011-07-21 21:22                                               ` Vivek Goyal
2011-07-22  9:33                                                 ` Michael Holzheu
2011-07-25 16:02                                                   ` Vivek Goyal
2011-07-26  9:44                                                     ` Michael Holzheu
2011-07-22 15:26                                         ` Michael Holzheu
2011-07-25 18:07                                           ` Vivek Goyal
2011-07-26  9:32                                             ` Michael Holzheu
2011-07-15 13:56                       ` Michael Holzheu
2011-07-15 14:18                         ` Vivek Goyal
2011-07-18 13:57                       ` Martin Schwidefsky
2011-07-08 13:04       ` Michael Holzheu
2011-07-11 15:36         ` Vivek Goyal
2011-07-12 17:29           ` Michael Holzheu
2011-07-08 14:02       ` Michael Holzheu
2011-07-11 14:07         ` Vivek Goyal
2011-07-11 15:06           ` Michael Holzheu
2011-07-09 17:58       ` Valdis.Kletnieks
2011-07-12 13:52         ` Vivek Goyal

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110704171000.123254263@linux.vnet.ibm.com \
    --to=holzheu@linux.vnet.ibm.com \
    --cc=ebiederm@xmission.com \
    --cc=hbabu@us.ibm.com \
    --cc=heiko.carstens@de.ibm.com \
    --cc=horms@verge.net.au \
    --cc=kexec@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=mahesh@linux.vnet.ibm.com \
    --cc=oomichi@mxs.nes.nec.co.jp \
    --cc=schwidefsky@de.ibm.com \
    --cc=vgoyal@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox