[PATCH] Load crash kernel high on x86
Minfei Huang
mhuang at redhat.com
Fri Sep 18 06:25:03 PDT 2015
On 09/18/15 at 03:11pm, Petr Tesarik wrote:
> On Fri, 18 Sep 2015 19:39:02 +0800
> Minfei Huang <mhuang at redhat.com> wrote:
>
> > On 09/18/15 at 08:03am, Petr Tesarik wrote:
> > > Hello,
> > >
> > > There may be more than one crash kernel regions on x86. However, the kexec
> > > syscall checks that target address is within crashk_res boundaries. Looking
> > > at the logic in arch/x86/kernel/setup.c, there are only two possible layouts:
> > >
> > > 1. crashk_res is below 4G, and there is only one region,
> > > 2. crashk_res is above 4G, and crashk_low_res is below 4G
> > >
> > > In either case, kexec-tools must pick the highest region.
> > >
> > > Currently, kexec-tools picks the largest region. If high reservation is
> > > smaller than low, kexec(2) returns -EADDRNOTAVAIL, and kexec prints out
> > > this error message:
> > >
> > > kexec_load failed: Cannot assign requested address
> > >
> > > Signed-off-by: Petr Tesarik <ptesarik at suse.com>
> > > ---
> > > kexec/arch/i386/crashdump-x86.c | 12 ++----------
> > > 1 file changed, 2 insertions(+), 10 deletions(-)
> > >
> > > diff --git a/kexec/arch/i386/crashdump-x86.c b/kexec/arch/i386/crashdump-x86.c
> > > index 63959b7..2710a9e 100644
> > > --- a/kexec/arch/i386/crashdump-x86.c
> > > +++ b/kexec/arch/i386/crashdump-x86.c
> > > @@ -1034,16 +1034,8 @@ int get_max_crash_kernel_limit(uint64_t *start, uint64_t *end)
> > > if (!crash_reserved_mem_nr)
> > > return -1;
> > >
> > > - for (i = crash_reserved_mem_nr - 1; i >= 0; i--) {
> > > - sz = crash_reserved_mem[i].end - crash_reserved_mem[i].start +1;
> > > - if (sz <= sz_max)
> > > - continue;
> > > - sz_max = sz;
> > > - idx = i;
> > > - }
> > > -
> > > - *start = crash_reserved_mem[idx].start;
> > > - *end = crash_reserved_mem[idx].end;
> > > + *start = crash_reserved_mem[crash_reserved_mem_nr - 1].start;
> > > + *end = crash_reserved_mem[crash_reserved_mem_nr - 1].end;
> > >
> > > return 0;
> >
> > It is not a proper function name for what it does in your patch. How
>
> True. It should be now called something like get_crashk_res_location().
> I'm going to change that.
>
> > about get_reserved_mem_limit()? Also it is appreciative, if you can
> > comment it more detail.
>
> I'm not sure what would be more detail. Regarding the motivation, I
> have already documented why it fails and what are the symptoms of
> failure. Regarding the implementation, the code speaks for itself, IMO.
>
> Can you explain what kind of detail you're missing, please?
Sorry, What I mean is to comment above the function why we choose the
region crash_reserved_mem[crash_reserved_mem_nr - 1].
Thanks
Minfei
More information about the kexec
mailing list