All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric DeVolder <eric.devolder@oracle.com>
To: horms@verge.net.au, kexec@lists.infradead.org,
	andrew.cooper3@citrix.com, dyoung@redhat.com, panand@redhat.com
Cc: daniel.kiper@oracle.com, konrad.wilk@oracle.com
Subject: [PATCH v4 07/11] crashdump/ppc: Add get_crash_kernel_load_range() function
Date: Tue, 14 Feb 2017 15:09:19 -0600	[thread overview]
Message-ID: <1487106563-722-8-git-send-email-eric.devolder@oracle.com> (raw)
In-Reply-To: <1487106563-722-1-git-send-email-eric.devolder@oracle.com>

From: Daniel Kiper <daniel.kiper@oracle.com>

Implement get_crash_kernel_load_range() in support of
print crash kernel region size option.

Signed-off-by: Daniel Kiper <daniel.kiper@oracle.com>
Signed-off-by: Eric DeVolder <eric.devolder@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
---
v4: Incorporated feedback:
    - changes for coding convention and formatting
v3: Incorporated feedback:
    - changes for coding convention and formatting
    - restructured to introduce get_crash_kernel_load_range() for each
      architecture, and then a single function in kexec/kexec.c to call
      the per-architecture get_crash_kernel_load_range() and print the
      result.
    - changed print_crashkernel_region_size() to get_crash_kernel_load_range()
    - introduced get_devtree_value()
v2: Incorporated feedback:
    - utilize the is_crashkernel_mem_reserved() function common in all archs
    - utilize device-tree values to print size
v1: Posted to kexec-tools mailing list
---
 kexec/arch/ppc/crashdump-powerpc.c | 27 ++++++++++++++++++++++++++-
 kexec/arch/ppc/kexec-ppc.c         | 28 ++++++++++++++++++++++++++++
 kexec/arch/ppc/kexec-ppc.h         |  1 +
 3 files changed, 55 insertions(+), 1 deletion(-)

diff --git a/kexec/arch/ppc/crashdump-powerpc.c b/kexec/arch/ppc/crashdump-powerpc.c
index 3dc35eb..186005c 100644
--- a/kexec/arch/ppc/crashdump-powerpc.c
+++ b/kexec/arch/ppc/crashdump-powerpc.c
@@ -16,6 +16,9 @@
 #include "kexec-ppc.h"
 #include "crashdump-powerpc.h"
 
+#define DEVTREE_CRASHKERNEL_BASE "/proc/device-tree/chosen/linux,crashkernel-base"
+#define DEVTREE_CRASHKERNEL_SIZE "/proc/device-tree/chosen/linux,crashkernel-size"
+
 #ifdef CONFIG_PPC64
 static struct crash_elf_info elf_info64 = {
 class: ELFCLASS64,
@@ -397,11 +400,33 @@ void add_usable_mem_rgns(unsigned long long base, unsigned long long size)
 		usablemem_rgns.size, base, size);
 }
 
+int get_crash_kernel_load_range(uint64_t *start, uint64_t *end)
+{
+	unsigned long long value;
+	int ret = 0;
+
+	if (!get_devtree_value(DEVTREE_CRASHKERNEL_BASE, &value))
+		*start = value;
+	else {
+		*start = 0;
+		ret = -1;
+	}
+
+	if (!get_devtree_value(DEVTREE_CRASHKERNEL_SIZE, &value))
+		*end = *start + value - 1;
+	else {
+		*end = 0;
+		ret = -1;
+	}
+
+	return ret;
+}
+
 int is_crashkernel_mem_reserved(void)
 {
 	int fd;
 
-	fd = open("/proc/device-tree/chosen/linux,crashkernel-base", O_RDONLY);
+	fd = open(DEVTREE_CRASHKERNEL_BASE, O_RDONLY);
 	if (fd < 0)
 		return 0;
 	close(fd);
diff --git a/kexec/arch/ppc/kexec-ppc.c b/kexec/arch/ppc/kexec-ppc.c
index d046110..bea1bc2 100644
--- a/kexec/arch/ppc/kexec-ppc.c
+++ b/kexec/arch/ppc/kexec-ppc.c
@@ -423,6 +423,34 @@ err_out:
 	return -1;
 }
 
+int get_devtree_value(const char *fname, unsigned long long *pvalue)
+{
+	/* Return 0 if fname/value valid, -1 otherwise */
+	FILE *file;
+	char buf[MAXBYTES];
+	int ret = 0, n = -1;
+	unsigned long long value = 0;
+
+	if ((file = fopen(fname, "r"))) {
+		n = fread(buf, 1, MAXBYTES, file);
+		fclose(file);
+	}
+
+	if (n == sizeof(uint32_t))
+		value = ((uint32_t *)buf)[0];
+	else if (n == sizeof(uint64_t))
+		value = ((uint64_t *)buf)[0];
+	else {
+		fprintf(stderr, "%s node has invalid size: %d\n", fname, n);
+		ret = -1;
+	}
+
+	if (pvalue)
+		*pvalue = value;
+
+	return ret;
+}
+
 /* Get devtree details and create exclude_range array
  * Also create usablemem_ranges for KEXEC_ON_CRASH
  */
diff --git a/kexec/arch/ppc/kexec-ppc.h b/kexec/arch/ppc/kexec-ppc.h
index 904cf48..f8fd678 100644
--- a/kexec/arch/ppc/kexec-ppc.h
+++ b/kexec/arch/ppc/kexec-ppc.h
@@ -75,6 +75,7 @@ extern unsigned long dt_address_cells, dt_size_cells;
 extern int init_memory_region_info(void);
 extern int read_memory_region_limits(int fd, unsigned long long *start,
 					unsigned long long *end);
+extern int get_devtree_value(const char *fname, unsigned long long *pvalue);
 #define COMMAND_LINE_SIZE	512 /* from kernel */
 /*fs2dt*/
 void reserve(unsigned long long where, unsigned long long length);
-- 
2.7.4


_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

  parent reply	other threads:[~2017-02-14 21:10 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-14 21:09 [PATCH v4 0/11] kexec: Add option to get crash kernel region size Eric DeVolder
2017-02-14 21:09 ` [PATCH v4 01/11] crashdump/arm: Add get_crash_kernel_load_range() function Eric DeVolder
2017-02-14 21:09 ` [PATCH v4 02/11] crashdump/arm64: " Eric DeVolder
2017-02-14 21:09 ` [PATCH v4 03/11] crashdump/cris: " Eric DeVolder
2017-02-14 21:09 ` [PATCH v4 04/11] crashdump/ia64: " Eric DeVolder
2017-02-14 21:09 ` [PATCH v4 05/11] crashdump/m68k: " Eric DeVolder
2017-02-14 21:09 ` [PATCH v4 06/11] crashdump/mips: " Eric DeVolder
2017-02-14 21:09 ` Eric DeVolder [this message]
2017-02-14 22:29   ` [PATCH v4 07/11] crashdump/ppc: " Daniel Kiper
2017-02-14 21:09 ` [PATCH v4 08/11] crashdump/ppc64: " Eric DeVolder
2017-02-14 21:09 ` [PATCH v4 09/11] crashdump/s390: " Eric DeVolder
2017-02-14 21:09 ` [PATCH v4 10/11] crashdump/sh: " Eric DeVolder
2017-02-14 21:09 ` [PATCH v4 11/11] kexec: Add option to get crash kernel region size Eric DeVolder
2017-02-14 22:34   ` Daniel Kiper

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=1487106563-722-8-git-send-email-eric.devolder@oracle.com \
    --to=eric.devolder@oracle.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=daniel.kiper@oracle.com \
    --cc=dyoung@redhat.com \
    --cc=horms@verge.net.au \
    --cc=kexec@lists.infradead.org \
    --cc=konrad.wilk@oracle.com \
    --cc=panand@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.