From: Michal Hocko <mhocko@kernel.org> To: linux-mm@kvack.org Cc: Andrew Morton <akpm@linux-foundation.org>, Mel Gorman <mgorman@suse.de>, Vlastimil Babka <vbabka@suse.cz>, Andrea Arcangeli <aarcange@redhat.com>, Reza Arbab <arbab@linux.vnet.ibm.com>, Yasuaki Ishimatsu <yasu.isimatu@gmail.com>, Tang Chen <tangchen@cn.fujitsu.com>, qiuxishi@huawei.com, Kani Toshimitsu <toshi.kani@hpe.com>, slaoub@gmail.com, Joonsoo Kim <js1304@gmail.com>, Andi Kleen <ak@linux.intel.com>, Zhang Zhen <zhenzhang.zhang@huawei.com>, David Rientjes <rientjes@google.com>, Daniel Kiper <daniel.kiper@oracle.com>, Igor Mammedov <imammedo@redhat.com>, Vitaly Kuznetsov <vkuznets@redhat.com>, LKML <linux-kernel@vger.kernel.org>, Dan Williams <dan.j.williams@gmail.com>, Heiko Carstens <heiko.carstens@de.ibm.com>, Lai Jiangshan <laijs@cn.fujitsu.com>, Martin Schwidefsky <schwidefsky@de.ibm.com> Subject: Re: [PATCH 5/6] mm, memory_hotplug: do not associate hotadded memory to zones until online Date: Thu, 6 Apr 2017 14:46:00 +0200 [thread overview] Message-ID: <20170406124600.GK5497@dhcp22.suse.cz> (raw) In-Reply-To: <20170330115454.32154-6-mhocko@kernel.org> On Thu 30-03-17 13:54:53, Michal Hocko wrote: [...] > +static struct zone * __meminit move_pfn_range(int online_type, int nid, > + unsigned long start_pfn, unsigned long nr_pages) > +{ > + struct pglist_data *pgdat = NODE_DATA(nid); > + struct zone *zone = &pgdat->node_zones[ZONE_NORMAL]; > + > + if (online_type == MMOP_ONLINE_KEEP) { > + /* > + * MMOP_ONLINE_KEEP inherits the current zone which is > + * ZONE_NORMAL by default but we might be within ZONE_MOVABLE > + * already. > + */ > + if (allow_online_pfn_range(nid, start_pfn, nr_pages, MMOP_ONLINE_MOVABLE)) > + zone = &pgdat->node_zones[ZONE_MOVABLE]; > + } else if (online_type == MMOP_ONLINE_MOVABLE) { > + zone = &pgdat->node_zones[ZONE_MOVABLE]; > } > > - *zone_shift = target - idx; > - return true; > + move_pfn_range_to_zone(zone, start_pfn, nr_pages); > + return zone; > } I got the MMOP_ONLINE_KEEP wrong here. Relying on allow_online_pfn_range is wrong because that would lead to MMOP_ONLINE_MOVABLE by when there is no ZONE_NORMAL while I believe we should online_kernel in that case. Well the semantic of MMOP_ONLINE_KEEP is rathe fuzzy to me but I guess it make some sense to online movable only when explicitly state or _within_ and existing ZONE_MOVABLE. The following will fix this. I will fold it into this patch. --- diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 7c4fef1aba84..0f8816fd0b52 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -531,6 +531,20 @@ static inline bool zone_is_empty(struct zone *zone) } /* + * Return true if [start_pfn, start_pfn + nr_pages) range has a non-mpty + * intersection with the given zone + */ +static inline bool zone_intersects(struct zone *zone, + unsigned long start_pfn, unsigned long nr_pages) +{ + if (zone->zone_start_pfn <= start_pfn && start_pfn < zone_end_pfn(zone)) + return true; + if (start_pfn + nr_pages > start_pfn && !zone_is_empty(zone)) + return true; + return false; +} + +/* * The "priority" of VM scanning is how much of the queues we will scan in one * go. A value of 12 for DEF_PRIORITY implies that we will scan 1/4096th of the * queues ("queue_length >> 12") during an aging round. diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 4f80abdc2047..2ff988f42377 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -934,13 +934,14 @@ static struct zone * __meminit move_pfn_range(int online_type, int nid, struct zone *zone = &pgdat->node_zones[ZONE_NORMAL]; if (online_type == MMOP_ONLINE_KEEP) { + struct zone *movable_zone = &pgdat->node_zones[ZONE_MOVABLE]; /* * MMOP_ONLINE_KEEP inherits the current zone which is * ZONE_NORMAL by default but we might be within ZONE_MOVABLE * already. */ - if (allow_online_pfn_range(nid, start_pfn, nr_pages, MMOP_ONLINE_MOVABLE)) - zone = &pgdat->node_zones[ZONE_MOVABLE]; + if (zone_intersects(movable_zone, start_pfn, nr_pages)) + zone = movable_zone; } else if (online_type == MMOP_ONLINE_MOVABLE) { zone = &pgdat->node_zones[ZONE_MOVABLE]; } -- Michal Hocko SUSE Labs
WARNING: multiple messages have this Message-ID (diff)
From: Michal Hocko <mhocko@kernel.org> To: linux-mm@kvack.org Cc: Andrew Morton <akpm@linux-foundation.org>, Mel Gorman <mgorman@suse.de>, Vlastimil Babka <vbabka@suse.cz>, Andrea Arcangeli <aarcange@redhat.com>, Reza Arbab <arbab@linux.vnet.ibm.com>, Yasuaki Ishimatsu <yasu.isimatu@gmail.com>, Tang Chen <tangchen@cn.fujitsu.com>, qiuxishi@huawei.com, Kani Toshimitsu <toshi.kani@hpe.com>, slaoub@gmail.com, Joonsoo Kim <js1304@gmail.com>, Andi Kleen <ak@linux.intel.com>, Zhang Zhen <zhenzhang.zhang@huawei.com>, David Rientjes <rientjes@google.com>, Daniel Kiper <daniel.kiper@oracle.com>, Igor Mammedov <imammedo@redhat.com>, Vitaly Kuznetsov <vkuznets@redhat.com>, LKML <linux-kernel@vger.kernel.org>, Dan Williams <dan.j.williams@gmail.com>, Heiko Carstens <heiko.carstens@de.ibm.com>, Lai Jiangshan <laijs@cn.fujitsu.com>, Martin Schwidefsky <schwidefsky@de.ibm.com> Subject: Re: [PATCH 5/6] mm, memory_hotplug: do not associate hotadded memory to zones until online Date: Thu, 6 Apr 2017 14:46:00 +0200 [thread overview] Message-ID: <20170406124600.GK5497@dhcp22.suse.cz> (raw) In-Reply-To: <20170330115454.32154-6-mhocko@kernel.org> On Thu 30-03-17 13:54:53, Michal Hocko wrote: [...] > +static struct zone * __meminit move_pfn_range(int online_type, int nid, > + unsigned long start_pfn, unsigned long nr_pages) > +{ > + struct pglist_data *pgdat = NODE_DATA(nid); > + struct zone *zone = &pgdat->node_zones[ZONE_NORMAL]; > + > + if (online_type == MMOP_ONLINE_KEEP) { > + /* > + * MMOP_ONLINE_KEEP inherits the current zone which is > + * ZONE_NORMAL by default but we might be within ZONE_MOVABLE > + * already. > + */ > + if (allow_online_pfn_range(nid, start_pfn, nr_pages, MMOP_ONLINE_MOVABLE)) > + zone = &pgdat->node_zones[ZONE_MOVABLE]; > + } else if (online_type == MMOP_ONLINE_MOVABLE) { > + zone = &pgdat->node_zones[ZONE_MOVABLE]; > } > > - *zone_shift = target - idx; > - return true; > + move_pfn_range_to_zone(zone, start_pfn, nr_pages); > + return zone; > } I got the MMOP_ONLINE_KEEP wrong here. Relying on allow_online_pfn_range is wrong because that would lead to MMOP_ONLINE_MOVABLE by when there is no ZONE_NORMAL while I believe we should online_kernel in that case. Well the semantic of MMOP_ONLINE_KEEP is rathe fuzzy to me but I guess it make some sense to online movable only when explicitly state or _within_ and existing ZONE_MOVABLE. The following will fix this. I will fold it into this patch. --- diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 7c4fef1aba84..0f8816fd0b52 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -531,6 +531,20 @@ static inline bool zone_is_empty(struct zone *zone) } /* + * Return true if [start_pfn, start_pfn + nr_pages) range has a non-mpty + * intersection with the given zone + */ +static inline bool zone_intersects(struct zone *zone, + unsigned long start_pfn, unsigned long nr_pages) +{ + if (zone->zone_start_pfn <= start_pfn && start_pfn < zone_end_pfn(zone)) + return true; + if (start_pfn + nr_pages > start_pfn && !zone_is_empty(zone)) + return true; + return false; +} + +/* * The "priority" of VM scanning is how much of the queues we will scan in one * go. A value of 12 for DEF_PRIORITY implies that we will scan 1/4096th of the * queues ("queue_length >> 12") during an aging round. diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 4f80abdc2047..2ff988f42377 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -934,13 +934,14 @@ static struct zone * __meminit move_pfn_range(int online_type, int nid, struct zone *zone = &pgdat->node_zones[ZONE_NORMAL]; if (online_type == MMOP_ONLINE_KEEP) { + struct zone *movable_zone = &pgdat->node_zones[ZONE_MOVABLE]; /* * MMOP_ONLINE_KEEP inherits the current zone which is * ZONE_NORMAL by default but we might be within ZONE_MOVABLE * already. */ - if (allow_online_pfn_range(nid, start_pfn, nr_pages, MMOP_ONLINE_MOVABLE)) - zone = &pgdat->node_zones[ZONE_MOVABLE]; + if (zone_intersects(movable_zone, start_pfn, nr_pages)) + zone = movable_zone; } else if (online_type == MMOP_ONLINE_MOVABLE) { zone = &pgdat->node_zones[ZONE_MOVABLE]; } -- Michal Hocko SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2017-04-06 12:46 UTC|newest] Thread overview: 140+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-03-30 11:54 [PATCH 0/6] mm: make movable onlining suck less Michal Hocko 2017-03-30 11:54 ` Michal Hocko 2017-03-30 11:54 ` [PATCH 1/6] mm: get rid of zone_is_initialized Michal Hocko 2017-03-30 11:54 ` Michal Hocko 2017-03-31 3:39 ` Hillf Danton 2017-03-31 3:39 ` Hillf Danton 2017-03-31 6:43 ` Michal Hocko 2017-03-31 6:43 ` Michal Hocko 2017-03-31 6:48 ` Michal Hocko 2017-03-31 6:48 ` Michal Hocko 2017-03-31 7:39 ` [PATCH v1 " Michal Hocko 2017-03-31 7:39 ` Michal Hocko 2017-04-05 8:14 ` Michal Hocko 2017-04-05 8:14 ` Michal Hocko 2017-04-05 9:06 ` Igor Mammedov 2017-04-05 9:06 ` Igor Mammedov 2017-04-05 9:23 ` Michal Hocko 2017-04-05 9:23 ` Michal Hocko 2017-03-30 11:54 ` [PATCH 2/6] mm, tile: drop arch_{add,remove}_memory Michal Hocko 2017-03-30 11:54 ` Michal Hocko 2017-03-30 15:41 ` Chris Metcalf 2017-03-30 15:41 ` Chris Metcalf 2017-03-30 11:54 ` [PATCH 3/6] mm: remove return value from init_currently_empty_zone Michal Hocko 2017-03-30 11:54 ` Michal Hocko 2017-03-31 3:49 ` Hillf Danton 2017-03-31 3:49 ` Hillf Danton 2017-03-31 6:49 ` Michal Hocko 2017-03-31 6:49 ` Michal Hocko 2017-03-31 7:06 ` Hillf Danton 2017-03-31 7:06 ` Hillf Danton 2017-03-31 7:18 ` Michal Hocko 2017-03-31 7:18 ` Michal Hocko 2017-03-31 7:43 ` Michal Hocko 2017-03-31 7:43 ` Michal Hocko 2017-04-03 21:22 ` Reza Arbab 2017-04-03 21:22 ` Reza Arbab 2017-04-04 7:30 ` Michal Hocko 2017-04-04 7:30 ` Michal Hocko 2017-03-30 11:54 ` [PATCH 4/6] mm, memory_hotplug: use node instead of zone in can_online_high_movable Michal Hocko 2017-03-30 11:54 ` Michal Hocko 2017-03-30 11:54 ` [PATCH 5/6] mm, memory_hotplug: do not associate hotadded memory to zones until online Michal Hocko 2017-03-30 11:54 ` Michal Hocko 2017-03-31 6:18 ` Hillf Danton 2017-03-31 6:18 ` Hillf Danton 2017-03-31 6:50 ` Michal Hocko 2017-03-31 6:50 ` Michal Hocko 2017-04-04 12:21 ` Tobias Regnery 2017-04-04 12:21 ` Tobias Regnery 2017-04-04 12:45 ` Michal Hocko 2017-04-04 12:45 ` Michal Hocko 2017-04-06 8:14 ` Michal Hocko 2017-04-06 8:14 ` Michal Hocko 2017-04-06 12:46 ` Michal Hocko [this message] 2017-04-06 12:46 ` Michal Hocko 2017-03-30 11:54 ` [PATCH 6/6] mm, memory_hotplug: remove unused cruft after memory hotplug rework Michal Hocko 2017-03-30 11:54 ` Michal Hocko 2017-03-31 7:46 ` Michal Hocko 2017-03-31 7:46 ` Michal Hocko 2017-03-31 19:19 ` [PATCH 0/6] mm: make movable onlining suck less Heiko Carstens 2017-03-31 19:19 ` Heiko Carstens 2017-04-03 7:34 ` Michal Hocko 2017-04-03 7:34 ` Michal Hocko 2017-04-03 11:55 ` Michal Hocko 2017-04-03 11:55 ` Michal Hocko 2017-04-03 12:20 ` Igor Mammedov 2017-04-03 12:20 ` Igor Mammedov 2017-04-03 19:58 ` Reza Arbab 2017-04-03 19:58 ` Reza Arbab 2017-04-03 20:23 ` Michal Hocko 2017-04-03 20:23 ` Michal Hocko 2017-04-03 20:42 ` Reza Arbab 2017-04-03 20:42 ` Reza Arbab 2017-04-04 7:23 ` Michal Hocko 2017-04-04 7:23 ` Michal Hocko 2017-04-04 7:34 ` Michal Hocko 2017-04-04 7:34 ` Michal Hocko 2017-04-04 8:23 ` Michal Hocko 2017-04-04 8:23 ` Michal Hocko 2017-04-04 15:59 ` Reza Arbab 2017-04-04 15:59 ` Reza Arbab 2017-04-04 16:02 ` Reza Arbab 2017-04-04 16:02 ` Reza Arbab 2017-04-04 16:44 ` Michal Hocko 2017-04-04 16:44 ` Michal Hocko 2017-04-04 18:30 ` Reza Arbab 2017-04-04 18:30 ` Reza Arbab 2017-04-04 19:41 ` Michal Hocko 2017-04-04 19:41 ` Michal Hocko 2017-04-04 21:43 ` Reza Arbab 2017-04-04 21:43 ` Reza Arbab 2017-04-05 6:42 ` Michal Hocko 2017-04-05 6:42 ` Michal Hocko 2017-04-05 9:24 ` Michal Hocko 2017-04-05 9:24 ` Michal Hocko 2017-04-05 14:53 ` Reza Arbab 2017-04-05 14:53 ` Reza Arbab 2017-04-05 15:42 ` Michal Hocko 2017-04-05 15:42 ` Michal Hocko 2017-04-05 17:32 ` Reza Arbab 2017-04-05 17:32 ` Reza Arbab 2017-04-05 18:15 ` Michal Hocko 2017-04-05 18:15 ` Michal Hocko 2017-04-05 19:39 ` Michal Hocko 2017-04-05 19:39 ` Michal Hocko 2017-04-05 21:02 ` Michal Hocko 2017-04-05 21:02 ` Michal Hocko 2017-04-06 11:07 ` Michal Hocko 2017-04-06 11:07 ` Michal Hocko 2017-04-05 15:48 ` Reza Arbab 2017-04-05 15:48 ` Reza Arbab 2017-04-05 16:34 ` Michal Hocko 2017-04-05 16:34 ` Michal Hocko 2017-04-05 20:55 ` Reza Arbab 2017-04-05 20:55 ` Reza Arbab 2017-04-06 9:25 ` Michal Hocko 2017-04-06 9:25 ` Michal Hocko 2017-04-05 13:52 ` Michal Hocko 2017-04-05 13:52 ` Michal Hocko 2017-04-05 15:23 ` Reza Arbab 2017-04-05 15:23 ` Reza Arbab 2017-04-05 6:36 ` Michal Hocko 2017-04-05 6:36 ` Michal Hocko 2017-04-06 13:08 ` Michal Hocko 2017-04-06 13:08 ` Michal Hocko 2017-04-06 15:24 ` Reza Arbab 2017-04-06 15:24 ` Reza Arbab 2017-04-06 15:41 ` Michal Hocko 2017-04-06 15:41 ` Michal Hocko 2017-04-06 15:46 ` Reza Arbab 2017-04-06 15:46 ` Reza Arbab 2017-04-06 16:21 ` Michal Hocko 2017-04-06 16:21 ` Michal Hocko 2017-04-06 16:24 ` Mel Gorman 2017-04-06 16:24 ` Mel Gorman 2017-04-06 16:55 ` Mel Gorman 2017-04-06 16:55 ` Mel Gorman 2017-04-06 17:12 ` Michal Hocko 2017-04-06 17:12 ` Michal Hocko 2017-04-06 17:46 ` Mel Gorman 2017-04-06 17:46 ` Mel Gorman
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20170406124600.GK5497@dhcp22.suse.cz \ --to=mhocko@kernel.org \ --cc=aarcange@redhat.com \ --cc=ak@linux.intel.com \ --cc=akpm@linux-foundation.org \ --cc=arbab@linux.vnet.ibm.com \ --cc=dan.j.williams@gmail.com \ --cc=daniel.kiper@oracle.com \ --cc=heiko.carstens@de.ibm.com \ --cc=imammedo@redhat.com \ --cc=js1304@gmail.com \ --cc=laijs@cn.fujitsu.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=mgorman@suse.de \ --cc=qiuxishi@huawei.com \ --cc=rientjes@google.com \ --cc=schwidefsky@de.ibm.com \ --cc=slaoub@gmail.com \ --cc=tangchen@cn.fujitsu.com \ --cc=toshi.kani@hpe.com \ --cc=vbabka@suse.cz \ --cc=vkuznets@redhat.com \ --cc=yasu.isimatu@gmail.com \ --cc=zhenzhang.zhang@huawei.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.