On Wed, 19 Aug 2015 04:18:26 -0400 Changsheng Liu <liuchangsheng@xxxxxxxxxx> wrote:
From: Changsheng Liu <liuchangcheng@xxxxxxxxxx>I cleaned this up a bit:
When memory hot added, the function should_add_memory_movable
always return 0,because the movable zone is empty,
so the memory that hot added will add to normal zone even if
we want to remove the memory.
So we change the function should_add_memory_movable,if the user
config CONFIG_MOVABLE_NODE it will return 1 when
movable zone is empty
: Subject: mm: memory hot-add: memory can not been added to movable zone
:
: When memory is hot added, should_add_memory_movable() always returns 0
: because the movable zone is empty, so the memory that was hot added will
: add to the normal zone even if we want to remove the memory.
:
: So we change should_add_memory_movable(): if the user config
: CONFIG_MOVABLE_NODE it will return 1 when the movable zone is empty.
But I don't understand the "even if we want to remove the memory".
This is hot-add, not hot-remove. What do you mean here?
--- a/mm/memory_hotplug.cCleaner:
+++ b/mm/memory_hotplug.c
@@ -1198,9 +1198,13 @@ static int should_add_memory_movable(int nid, u64 start, u64 size)
pg_data_t *pgdat = NODE_DATA(nid);
struct zone *movable_zone = pgdat->node_zones + ZONE_MOVABLE;
- if (zone_is_empty(movable_zone))
+ if (zone_is_empty(movable_zone)) {
+ #ifdef CONFIG_MOVABLE_NODE
+ return 1;
+ #else
return 0;
-
+ #endif
+ }
if (movable_zone->zone_start_pfn <= start_pfn)
return 1;
--- a/mm/memory_hotplug.c~memory-hot-addedthe-memory-can-not-been-added-to-movable-zone-fix
+++ a/mm/memory_hotplug.c
@@ -1181,13 +1181,9 @@ static int should_add_memory_movable(int
pg_data_t *pgdat = NODE_DATA(nid);
struct zone *movable_zone = pgdat->node_zones + ZONE_MOVABLE;
- if (zone_is_empty(movable_zone)) {
- #ifdef CONFIG_MOVABLE_NODE
- return 1;
- #else
- return 0;
- #endif
- }
+ if (zone_is_empty(movable_zone))
+ return IS_ENABLED(CONFIG_MOVABLE_NODE);
+
if (movable_zone->zone_start_pfn <= start_pfn)
return 1;
_
.