On 10/10/2019 10:29 PM, Dave Hansen wrote:> On 10/10/19 12:28 AM, 
lantianyu1...@gmail.com 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



Reply via email to