Message ID | 1405914402-66212-2-git-send-email-wangnan0@huawei.com |
---|---|
State | Accepted |
Commit | 6326440077a48d2c3b2993f3b3f2d969f09b6917 |
Headers | show |
Hello. On 07/21/2014 07:46 AM, Wang Nan wrote: Some grammar nitpicking. > This patch introduces a zone_for_memory function in arch independent > code for arch_add_memory() using. s/ using/'s use/. > Many arch_add_memory() function simply selects ZONE_HIGHMEM or Plural needed with "many". > ZONE_NORMAL and add new memory into it. However, with the existance of > ZONE_MOVABLE, the selection method should be carefully considered: if > new, higher memory is added after ZONE_MOVABLE is setup, the default > zone and ZONE_MOVABLE may overlap each other. > should_add_memory_movable() checks the status of ZONE_MOVABLE. If it has > already contain memory, compare the address of new memory and movable > memory. If new memory is higher than movable, it should be added into > ZONE_MOVABLE instead of default zone. > Signed-off-by: Wang Nan <wangnan0@huawei.com> > Cc: Zhang Yanfei <zhangyanfei@cn.fujitsu.com> > Cc: Dave Hansen <dave.hansen@intel.com> [...] > diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c > index 469bbf5..348fda7 100644 > --- a/mm/memory_hotplug.c > +++ b/mm/memory_hotplug.c > @@ -1156,6 +1156,34 @@ static int check_hotplug_memory_range(u64 start, u64 size) > return 0; > } > > +/* > + * If movable zone has already been setup, newly added memory should be check. Checked. WBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h index 010d125..3de3d02 100644 --- a/include/linux/memory_hotplug.h +++ b/include/linux/memory_hotplug.h @@ -258,6 +258,7 @@ static inline void remove_memory(int nid, u64 start, u64 size) {} extern int walk_memory_range(unsigned long start_pfn, unsigned long end_pfn, void *arg, int (*func)(struct memory_block *, void *)); extern int add_memory(int nid, u64 start, u64 size); +extern int zone_for_memory(int nid, u64 start, u64 size, int zone_default); extern int arch_add_memory(int nid, u64 start, u64 size); extern int offline_pages(unsigned long start_pfn, unsigned long nr_pages); extern bool is_memblock_offlined(struct memory_block *mem); diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 469bbf5..348fda7 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -1156,6 +1156,34 @@ static int check_hotplug_memory_range(u64 start, u64 size) return 0; } +/* + * If movable zone has already been setup, newly added memory should be check. + * If its address is higher than movable zone, it should be added as movable. + * Without this check, movable zone may overlap with other zone. + */ +static int should_add_memory_movable(int nid, u64 start, u64 size) +{ + unsigned long start_pfn = start >> PAGE_SHIFT; + pg_data_t *pgdat = NODE_DATA(nid); + struct zone *movable_zone = pgdat->node_zones + ZONE_MOVABLE; + + if (zone_is_empty(movable_zone)) + return 0; + + if (movable_zone->zone_start_pfn <= start_pfn) + return 1; + + return 0; +} + +int zone_for_memory(int nid, u64 start, u64 size, int zone_default) +{ + if (should_add_memory_movable(nid, start, size)) + return ZONE_MOVABLE; + + return zone_default; +} + /* we are OK calling __meminit stuff here - we have CONFIG_MEMORY_HOTPLUG */ int __ref add_memory(int nid, u64 start, u64 size) {
This patch introduces a zone_for_memory function in arch independent code for arch_add_memory() using. Many arch_add_memory() function simply selects ZONE_HIGHMEM or ZONE_NORMAL and add new memory into it. However, with the existance of ZONE_MOVABLE, the selection method should be carefully considered: if new, higher memory is added after ZONE_MOVABLE is setup, the default zone and ZONE_MOVABLE may overlap each other. should_add_memory_movable() checks the status of ZONE_MOVABLE. If it has already contain memory, compare the address of new memory and movable memory. If new memory is higher than movable, it should be added into ZONE_MOVABLE instead of default zone. Signed-off-by: Wang Nan <wangnan0@huawei.com> Cc: Zhang Yanfei <zhangyanfei@cn.fujitsu.com> Cc: Dave Hansen <dave.hansen@intel.com> --- include/linux/memory_hotplug.h | 1 + mm/memory_hotplug.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+)