summaryrefslogtreecommitdiff
path: root/kexec/arch/i386/kexec-x86.c
diff options
context:
space:
mode:
Diffstat (limited to 'kexec/arch/i386/kexec-x86.c')
-rw-r--r--kexec/arch/i386/kexec-x86.c175
1 files changed, 0 insertions, 175 deletions
diff --git a/kexec/arch/i386/kexec-x86.c b/kexec/arch/i386/kexec-x86.c
index d5b6737..d33a14b 100644
--- a/kexec/arch/i386/kexec-x86.c
+++ b/kexec/arch/i386/kexec-x86.c
@@ -33,181 +33,6 @@
#include "crashdump-x86.h"
#include <arch/options.h>
-static struct memory_range memory_range[MAX_MEMORY_RANGES];
-
-/**
- * The old /proc/iomem parsing code.
- *
- * @param[out] range pointer that will be set to an array that holds the
- * memory ranges
- * @param[out] ranges number of ranges valid in @p range
- *
- * @return 0 on success, any other value on failure.
- */
-static int get_memory_ranges_proc_iomem(struct memory_range **range, int *ranges)
-{
- const char *iomem= proc_iomem();
- int memory_ranges = 0;
- char line[MAX_LINE];
- FILE *fp;
- fp = fopen(iomem, "r");
- if (!fp) {
- fprintf(stderr, "Cannot open %s: %s\n",
- iomem, strerror(errno));
- return -1;
- }
- while(fgets(line, sizeof(line), fp) != 0) {
- unsigned long long start, end;
- char *str;
- int type;
- int consumed;
- int count;
- if (memory_ranges >= MAX_MEMORY_RANGES)
- break;
- count = sscanf(line, "%Lx-%Lx : %n",
- &start, &end, &consumed);
- if (count != 2)
- continue;
- str = line + consumed;
- end = end + 1;
-#if 0
- printf("%016Lx-%016Lx : %s",
- start, end, str);
-#endif
- if (memcmp(str, "System RAM\n", 11) == 0) {
- type = RANGE_RAM;
- }
- else if (memcmp(str, "reserved\n", 9) == 0) {
- type = RANGE_RESERVED;
- }
- else if (memcmp(str, "ACPI Tables\n", 12) == 0) {
- type = RANGE_ACPI;
- }
- else if (memcmp(str, "ACPI Non-volatile Storage\n", 26) == 0) {
- type = RANGE_ACPI_NVS;
- }
- else {
- continue;
- }
- memory_range[memory_ranges].start = start;
- memory_range[memory_ranges].end = end;
- memory_range[memory_ranges].type = type;
-#if 0
- printf("%016Lx-%016Lx : %x\n",
- start, end, type);
-#endif
- memory_ranges++;
- }
- fclose(fp);
- *range = memory_range;
- *ranges = memory_ranges;
- return 0;
-}
-
-/**
- * Calls the architecture independent get_firmware_memmap_ranges() to parse
- * /sys/firmware/memmap and then do some x86 only modifications.
- *
- * @param[out] range pointer that will be set to an array that holds the
- * memory ranges
- * @param[out] ranges number of ranges valid in @p range
- *
- * @return 0 on success, any other value on failure.
- */
-static int get_memory_ranges_sysfs(struct memory_range **range, int *ranges)
-{
- int ret;
- size_t range_number = MAX_MEMORY_RANGES;
-
- ret = get_firmware_memmap_ranges(memory_range, &range_number);
- if (ret != 0) {
- fprintf(stderr, "Parsing the /sys/firmware memory map failed. "
- "Falling back to /proc/iomem.\n");
- return get_memory_ranges_proc_iomem(range, ranges);
- }
-
- *range = memory_range;
- *ranges = range_number;
-
- return 0;
-}
-
-/**
- * Return a sorted list of memory ranges.
- *
- * If we have the /sys/firmware/memmap interface, then use that. If not,
- * or if parsing of that fails, use /proc/iomem as fallback.
- *
- * @param[out] range pointer that will be set to an array that holds the
- * memory ranges
- * @param[out] ranges number of ranges valid in @p range
- * @param[in] kexec_flags the kexec_flags to determine if we load a normal
- * or a crashdump kernel
- *
- * @return 0 on success, any other value on failure.
- */
-int get_memory_ranges(struct memory_range **range, int *ranges,
- unsigned long kexec_flags)
-{
- int ret, i;
-
- if (have_sys_firmware_memmap())
- ret = get_memory_ranges_sysfs(range, ranges);
- else
- ret = get_memory_ranges_proc_iomem(range, ranges);
-
- /*
- * both get_memory_ranges_sysfs() and get_memory_ranges_proc_iomem()
- * have already printed an error message, so fail silently here
- */
- if (ret != 0)
- return ret;
-
- /* Don't report the interrupt table as ram */
- for (i = 0; i < *ranges; i++) {
- if ((*range)[i].type == RANGE_RAM &&
- ((*range)[i].start < 0x100)) {
- (*range)[i].start = 0x100;
- break;
- }
- }
-
- /*
- * Redefine the memory region boundaries if kernel
- * exports the limits and if it is panic kernel.
- * Override user values only if kernel exported values are
- * subset of user defined values.
- */
- if (kexec_flags & KEXEC_ON_CRASH) {
- unsigned long long start, end;
-
- ret = parse_iomem_single("Crash kernel\n", &start, &end);
- if (ret != 0) {
- fprintf(stderr, "parse_iomem_single failed.\n");
- return -1;
- }
-
- if (start > mem_min)
- mem_min = start;
- if (end < mem_max)
- mem_max = end;
- }
-
- /* just set 0 to 1 to enable printing for debugging */
-#if 0
- {
- int i;
- printf("MEMORY RANGES\n");
- for (i = 0; i < *ranges; i++) {
- printf("%016Lx-%016Lx (%d)\n", (*range)[i].start,
- (*range)[i].end, (*range)[i].type);
- }
- }
-#endif
-
- return ret;
-}
-
struct file_type file_type[] = {
{ "multiboot-x86", multiboot_x86_probe, multiboot_x86_load,
multiboot_x86_usage },