[PATCH 02/06] sh: Get system memory ranges from /proc/iomem
Magnus Damm
magnus.damm at gmail.com
Tue Aug 26 07:12:04 EDT 2008
From: Magnus Damm <damm at igel.co.jp>
Parse contents of /proc/iomem instead of hardcoding RAM ranges.
Signed-off-by: Magnus Damm <damm at igel.co.jp>
---
kexec/arch/sh/kexec-sh.c | 26 +++++++++++++++++++-------
1 file changed, 19 insertions(+), 7 deletions(-)
--- 0002/kexec/arch/sh/kexec-sh.c
+++ work/kexec/arch/sh/kexec-sh.c 2008-08-22 10:53:15.000000000 +0900
@@ -22,19 +22,31 @@
#define MAX_MEMORY_RANGES 64
static struct memory_range memory_range[MAX_MEMORY_RANGES];
+static int kexec_sh_memory_range_callback(void *data, int nr,
+ char *str,
+ unsigned long base,
+ unsigned long length)
+{
+ if (nr < MAX_MEMORY_RANGES) {
+ memory_range[nr].start = base;
+ memory_range[nr].end = base + length - 1;
+ memory_range[nr].type = RANGE_RAM;
+ return 0;
+ }
+
+ return 1;
+}
+
/* Return a sorted list of available memory ranges. */
int get_memory_ranges(struct memory_range **range, int *ranges,
unsigned long kexec_flags)
{
- int memory_ranges;
+ int nr;
- memory_ranges = 0;
- memory_range[memory_ranges].start = 0x08000000;
- memory_range[memory_ranges].end = 0x10000000;
- memory_range[memory_ranges].type = RANGE_RAM;
- memory_ranges++;
+ nr = kexec_iomem_for_each_line("System RAM\n",
+ kexec_sh_memory_range_callback, NULL);
*range = memory_range;
- *ranges = memory_ranges;
+ *ranges = nr;
return 0;
}
More information about the kexec
mailing list