[PATCH v4 2/4] x86: Store memory ranges globally used for crash kernel to boot into
WANG Chao
chaowang at redhat.com
Fri Mar 28 01:36:54 EDT 2014
On 03/28/14 at 10:19am, Dave Young wrote:
> On 03/19/14 at 04:03pm, WANG Chao wrote:
> > Use these two variables to store the memory ranges and the number of
> > memory ranges for crash kernel to boot into:
> >
> > struct memory_range crash_memory_range;
> > int crash_memory_range;
> >
> > These two variables are not static now, so can be used in other file
> > later.
> >
> > Signed-off-by: WANG Chao <chaowang at redhat.com>
> > Tested-by: Linn Crosetto <linn at hp.com>
> > ---
> > kexec/arch/i386/crashdump-x86.c | 134 ++++++++++++++++++++++------------------
> > kexec/arch/i386/crashdump-x86.h | 5 +-
> > 2 files changed, 77 insertions(+), 62 deletions(-)
> >
> > diff --git a/kexec/arch/i386/crashdump-x86.c b/kexec/arch/i386/crashdump-x86.c
> > index 979c2bd..c55a6b1 100644
> > --- a/kexec/arch/i386/crashdump-x86.c
> > +++ b/kexec/arch/i386/crashdump-x86.c
> > @@ -179,7 +179,8 @@ static int exclude_region(int *nr_ranges, uint64_t start, uint64_t end);
> >
> > /* Stores a sorted list of RAM memory ranges for which to create elf headers.
> > * A separate program header is created for backup region */
> > -static struct memory_range crash_memory_range[CRASH_MAX_MEMORY_RANGES];
> > +struct memory_range crash_memory_range[CRASH_MAX_MEMORY_RANGES];
> > +int crash_memory_ranges;
> >
> > /* Memory region reserved for storing panic kernel and other data. */
> > #define CRASH_RESERVED_MEM_NR 8
> > @@ -201,7 +202,7 @@ static int get_crash_memory_ranges(struct memory_range **range, int *ranges,
> > int kexec_flags, unsigned long lowmem_limit)
>
> It's not necessary to replace every static vars in the function, since there's param
> *ranges and **range, so how about just replace them in caller function.
OK. Will do.
>
> > {
> > const char *iomem = proc_iomem();
> > - int memory_ranges = 0, gart = 0, i;
> > + int gart = 0, i;
> > char line[MAX_LINE];
> > FILE *fp;
> > unsigned long long start, end;
> > @@ -218,7 +219,7 @@ static int get_crash_memory_ranges(struct memory_range **range, int *ranges,
> > char *str;
> > int type, consumed, count;
> >
> > - if (memory_ranges >= CRASH_MAX_MEMORY_RANGES)
> > + if (crash_memory_ranges >= CRASH_MAX_MEMORY_RANGES)
> > break;
> > count = sscanf(line, "%Lx-%Lx : %n",
> > &start, &end, &consumed);
> > @@ -250,17 +251,17 @@ static int get_crash_memory_ranges(struct memory_range **range, int *ranges,
> > continue;
> > }
> >
> > - crash_memory_range[memory_ranges].start = start;
> > - crash_memory_range[memory_ranges].end = end;
> > - crash_memory_range[memory_ranges].type = type;
> > + crash_memory_range[crash_memory_ranges].start = start;
> > + crash_memory_range[crash_memory_ranges].end = end;
> > + crash_memory_range[crash_memory_ranges].type = type;
> >
> > - segregate_lowmem_region(&memory_ranges, lowmem_limit);
> > + segregate_lowmem_region(&crash_memory_ranges, lowmem_limit);
> >
> > - memory_ranges++;
> > + crash_memory_ranges++;
> > }
> > fclose(fp);
> > if (kexec_flags & KEXEC_PRESERVE_CONTEXT) {
> > - for (i = 0; i < memory_ranges; i++) {
> > + for (i = 0; i < crash_memory_ranges; i++) {
> > if (crash_memory_range[i].end > 0x0009ffff) {
> > crash_reserved_mem[0].start = \
> > crash_memory_range[i].start;
> > @@ -278,17 +279,17 @@ static int get_crash_memory_ranges(struct memory_range **range, int *ranges,
> > }
> >
> > for (i = 0; i < crash_reserved_mem_nr; i++)
> > - if (exclude_region(&memory_ranges, crash_reserved_mem[i].start,
> > + if (exclude_region(&crash_memory_ranges, crash_reserved_mem[i].start,
> > crash_reserved_mem[i].end) < 0)
> > return -1;
> >
> > if (gart) {
> > /* exclude GART region if the system has one */
> > - if (exclude_region(&memory_ranges, gart_start, gart_end) < 0)
> > + if (exclude_region(&crash_memory_ranges, gart_start, gart_end) < 0)
> > return -1;
> > }
> > *range = crash_memory_range;
> > - *ranges = memory_ranges;
> > + *ranges = crash_memory_ranges;
> >
> > return 0;
> > }
> > @@ -324,7 +325,7 @@ static int get_crash_memory_ranges_xen(struct memory_range **range,
>
> Ditto for get_crash_memory_ranges_xen, just fix the caller function instead of use
> global variable in this function.
Will do.
More information about the kexec
mailing list