Re: [PATCH] Memory hot added,The memory can not been added to movable zone

From: Andrew Morton
Date: Wed Aug 19 2015 - 19:50:52 EST


On Wed, 19 Aug 2015 04:18:26 -0400 Changsheng Liu <liuchangsheng@xxxxxxxxxx> wrote:

> From: Changsheng Liu <liuchangcheng@xxxxxxxxxx>
>
> 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

I cleaned this up a bit:

: 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.c
> +++ 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;

Cleaner:

--- 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;

_

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/