When use the crashkernel=size parameter without specifying a "@xM" suffix, the crashkernel will be reserved at the highest suitable address of memory, this will make the kexec-tools fail to work. The current kexec-tools have a limitation that it can only work with crashkernel reserved under 896 MiB. we can increase this limit once kexec-tools are fixed. Linux kernel itself have this code for kexec-tools limitation, so I think Xen code should also have it. Signed-off-by: Warner Wang <warner.wang@hp.com> --- xen/arch/x86/setup.c | 7 +++++++ 1 files changed, 7 insertions(+), 0 deletions(-) diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index 43301a5..ae4c947 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -943,6 +943,13 @@ void __init __start_xen(unsigned long mbi_p) } } + /* + * Keep the crash kernel below this limit. On 64 bits, kexec-tools + * currently limits us to 896 MiB; increase this limit once kexec-tools + * are fixed. + */ + e = min_t(uint64_t, e, 896 << 20); + /* Don''t overlap with modules. */ e = consider_modules(s, e, PAGE_ALIGN(kexec_crash_area.size), mod, mbi->mods_count, -1); -- 1.7.1
>>> On 25.04.13 at 10:57, Warner Wang <warner.wang@hp.com> wrote: > When use the crashkernel=size parameter without specifying a "@xM" > suffix, the crashkernel will be reserved at the highest suitable > address of memory, this will make the kexec-tools fail to work. > The current kexec-tools have a limitation that it can only work > with crashkernel reserved under 896 MiB. we can increase this > limit once kexec-tools are fixed. > Linux kernel itself have this code for kexec-tools limitation, > so I think Xen code should also have it.Andrew, didn''t you post something along those lines at some point too, yet there was a reason it never got applied? Jan> --- a/xen/arch/x86/setup.c > +++ b/xen/arch/x86/setup.c > @@ -943,6 +943,13 @@ void __init __start_xen(unsigned long mbi_p) > } > } > > + /* > + * Keep the crash kernel below this limit. On 64 bits, kexec-tools > + * currently limits us to 896 MiB; increase this limit once kexec-tools > + * are fixed. > + */ > + e = min_t(uint64_t, e, 896 << 20); > + > /* Don''t overlap with modules. */ > e = consider_modules(s, e, PAGE_ALIGN(kexec_crash_area.size), > mod, mbi->mods_count, -1); > -- > 1.7.1
On 25/04/13 10:51, Jan Beulich wrote:>>>> On 25.04.13 at 10:57, Warner Wang <warner.wang@hp.com> wrote: >> When use the crashkernel=size parameter without specifying a "@xM" >> suffix, the crashkernel will be reserved at the highest suitable >> address of memory, this will make the kexec-tools fail to work. >> The current kexec-tools have a limitation that it can only work >> with crashkernel reserved under 896 MiB. we can increase this >> limit once kexec-tools are fixed. >> Linux kernel itself have this code for kexec-tools limitation, >> so I think Xen code should also have it. > Andrew, > > didn''t you post something along those lines at some point too, > yet there was a reason it never got applied? > > JanJan: I have some low crashinfo patches but they are in. It was for positioning of the Xen per-cpu crash notes and the console ring. Warner: I am curious to know what this magic 896MiB limit is. Do you have a reference to the problem. ~Andrew> >> --- a/xen/arch/x86/setup.c >> +++ b/xen/arch/x86/setup.c >> @@ -943,6 +943,13 @@ void __init __start_xen(unsigned long mbi_p) >> } >> } >> >> + /* >> + * Keep the crash kernel below this limit. On 64 bits, kexec-tools >> + * currently limits us to 896 MiB; increase this limit once kexec-tools >> + * are fixed. >> + */ >> + e = min_t(uint64_t, e, 896 << 20); >> + >> /* Don''t overlap with modules. */ >> e = consider_modules(s, e, PAGE_ALIGN(kexec_crash_area.size), >> mod, mbi->mods_count, -1); >> -- >> 1.7.1 > >
On 25/04/13 09:57, Warner Wang wrote:> When use the crashkernel=size parameter without specifying a "@xM" > suffix, the crashkernel will be reserved at the highest suitable > address of memory, this will make the kexec-tools fail to work. > The current kexec-tools have a limitation that it can only work > with crashkernel reserved under 896 MiB. we can increase this > limit once kexec-tools are fixed. > Linux kernel itself have this code for kexec-tools limitation, > so I think Xen code should also have it.I don''t think we should limit Xen in this way for any particular tool. It''s trivial to specify a location in the crashkernel parameter to work around this particular tool limitation. I also think that this limitation may well be fixed as of kexec-tools 2.0.4. 64-bit kernels are now loaded above 4 GiB. David> Signed-off-by: Warner Wang <warner.wang@hp.com> > --- > xen/arch/x86/setup.c | 7 +++++++ > 1 files changed, 7 insertions(+), 0 deletions(-) > > diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c > index 43301a5..ae4c947 100644 > --- a/xen/arch/x86/setup.c > +++ b/xen/arch/x86/setup.c > @@ -943,6 +943,13 @@ void __init __start_xen(unsigned long mbi_p) > } > } > > + /* > + * Keep the crash kernel below this limit. On 64 bits, kexec-tools > + * currently limits us to 896 MiB; increase this limit once kexec-tools > + * are fixed. > + */ > + e = min_t(uint64_t, e, 896 << 20); > + > /* Don''t overlap with modules. */ > e = consider_modules(s, e, PAGE_ALIGN(kexec_crash_area.size), > mod, mbi->mods_count, -1);