Hi Wanpeng,
Thank you for reviewing. See below, please.
On 09/05/2013 09:30 PM, Wanpeng Li wrote:
......
+#ifdef CONFIG_MOVABLE_NODE
+ unsigned long kernel_end;
+
+ if (movablenode_enable_srat&&
+ memblock.current_order == MEMBLOCK_ORDER_LOW_TO_HIGH) {
I think memblock.current_order == MEMBLOCK_ORDER_LOW_TO_HIGH is always
true if config MOVABLE_NODE and movablenode_enable_srat == true if PATCH
11/11 is applied.
memblock.current_order == MEMBLOCK_ORDER_LOW_TO_HIGH is true here if
MOVABLE_NODE
is configured, and it will be reset after SRAT is parsed. But
movablenode_enable_srat
could only be true when users specify movablenode boot option in the
kernel commandline.
Please refer to patch 9/11.
+ kernel_end = round_up(__pa_symbol(_end), PMD_SIZE);
+
+ memory_map_from_low(kernel_end, end);
+ memory_map_from_low(ISA_END_ADDRESS, kernel_end);
Why split ISA_END_ADDRESS ~ end?
The first 5 pages for the page tables are from brk, please refer to
alloc_low_pages().
They are able to map about 2MB memory. And this 2MB memory will be used
to store
page tables for the next mapped pages.
Here, we split [ISA_END_ADDRESS, end) into [ISA_END_ADDRESS, _end) and
[_end, end),
and map [_end, end) first. This is because memory in [ISA_END_ADDRESS,
_end) may be
used, then we have not enough memory for the next coming page tables. We
should map
[_end, end) first because this memory is highly likely unused.
......
I think the variables sorted by address is:
ISA_END_ADDRESS -> _end -> real_end -> end
Yes.
+ memory_map_from_high(ISA_END_ADDRESS, real_end);
If this is overlap with work done between #ifdef CONFIG_MOVABLE_NODE and
#endif?
I don't think so. Seeing from my code, if work between #ifdef
CONFIG_MOVABLE_NODE and
#endif is done, it will goto out, right ?
Thanks.
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html