RE: [PATCH] mm/resource: Move child to new resource when release mem region.

From: Tianyu Lan
Date: Fri Oct 11 2019 - 10:53:37 EST


On 10/10/2019 10:29 PM, Dave Hansen wrote:> On 10/10/19 12:28 AM, lantianyu1986@xxxxxxxxx wrote:
>> When release mem region, old mem region may be splited to
>> two regions. Current allocate new struct resource for high
>> end mem region but not move child resources whose ranges are
>> in the high end range to new resource. When adjust old mem
>> region's range, adjust_resource() detects child region's range
>> is out of new range and return error. Move child resources to
>> high end resource before adjusting old mem range.
>
> From the comment, it appears the old code intended to have the behavior
> that you are changing. Could you explain _why_ this has become a
> problem for you?
Hi Dave:
Thanks for your review. current code assumes that all children remain in
the lower address entry for simplicity. For memory hot-remove, selecting
remove region via scanning system memory may hit case of child in the
higher address entry.

For example, the following output from /proc/iomem shows kernel code,
data and bss locate from 3a000000 to 3b5fffff and these resources are the
system ram resource's children. If the 39800000-39ffffff was selected as
remove range, the resource will be split into two ranges 00100000-397fffff
and 39800000-b87f1fff. Current code move kernel image related resources
under 00100000-397fffff resource. This will cause adjust_resource() return
error because children are not in the parent's range.

00100000-b87f1fff : System RAM
3a000000-3ac00e80 : Kernel code
3ac00e81-3b33883f : Kernel data
3b4d3000-3b5fffff : Kernel bss