Re: [Patch] kexec: increase max of kexec segments and use dynamic allocation

Eric W. Biederman
2010-07-25T02:54:31Z

huang ying <huang.ying.caritas@gmail.com> writes:

> On Thu, Jul 22, 2010 at 3:08 PM, Eric W. Biederman
> <ebiederm@xmission.com> wrote:
>> Cong Wang <amwang@redhat.com> writes:
>>
>>> On 07/22/10 14:28, Eric W. Biederman wrote:
>>>> Amerigo Wang<amwang@redhat.com>  writes:
>>>>
>>>>> Currently KEXEC_SEGMENT_MAX is only 16 which is too small for machine with
>>>>> many memory ranges. Increase this hard limit to 1024 which is reasonably large,
>>>>> and change ->segment from a static array to a dynamically allocated memory.
>>>>
>>>> ???
>>>>
>>>> This should be about segments in the executable being loaded.  What
>>>> executable has one segment for each range of physical memory?
>>>>
>>>> Not that generalizing this is a bad idea but with a comment that
>>>> seems entirely wrong I am wondering what the problem really is.
>>>>
>>>
>>> Ah, I think Neil should explain this.
>>>
>>> He made a patch which includes many memory ranges, caused kexec
>>> fails to load the kernel. Increasing this limit and the corresponding
>>> one in kexec-tools fixes the problem. His patch is not in upstream
>>> kexec-tools, AFAIK.
>>>
>>> However, even if we don't consider that patch, isn't 16 too small too?
>>
>> Generally you just need one physical hunk for the code, maybe a second
>> for the initrd.
>>
>> It is perfectly fine to raise the number of segments as it doesn't
>> affect the ABI, but it wants a good explanation of what kind of weird
>> application wants to write to all over memory when it is loaded.
>
> kexec can be used to load not only the kernel images, but also more
> complex images such as hibernation image. So I think it is good to
> raise the number of segments.

Totally reasonable.

And in all fairness the patch does a good job of raising the limit.

However if that is the goal 1024 is probably a bit low as I believe
SGI has built machines with that many nodes. Still after the patch
under discussion 1024 was only a limit in a header file so it can
be trivially changed.

Eric