From: Tang Chen <tangchen@cn.fujitsu.com>
To: Xishi Qiu <qiuxishi@huawei.com>,
Andrew Morton <akpm@linux-foundation.org>,
Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>,
Kamezawa Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
izumi.taku@jp.fujitsu.com
Cc: tangchen@cn.fujitsu.com, Linux MM <linux-mm@kvack.org>,
LKML <linux-kernel@vger.kernel.org>,
Yasuaki Ishimatsu <yasu.isimatu@gmail.com>
Subject: Re: [PATCH 2/2] memory-hotplug: remove reset_node_managed_pages() and reset_node_managed_pages() in hotadd_new_pgdat()
Date: Sun, 23 Aug 2015 18:28:06 +0800 [thread overview]
Message-ID: <55D9A036.7060506@cn.fujitsu.com> (raw)
In-Reply-To: <55C9A554.4090509@huawei.com>
Hi Shi,
Sorry for the late reply. I hope it won't be too late.
NON-ACK by me, I think.
I noticed that your first has been merged. But it won't fix the problem
these code intended to fix.
After your patch 1, zone's spanned/present won't be set to 0 because:
free_area_init_node()
|--> get_pfn_range_for_nid(&start_pfn, &end_pfn)
|--> calculate_node_totalpages(pgdat, start_pfn, end_pfn, ...)
| --> zone_spanned_pages_in_node()
| --> if (!node_start_pfn && !node_end_pfn) return
0; -------- false, won't return 0
| --> zone_absent_pages_in_node()
| --> if (!node_start_pfn && !node_end_pfn) return
0; -------- false, won't return 0
This is caused by a little bug in your patch 1.
You should put memblock_add_node(start, size, nid) before
hotadd_new_pgdat()
because:
hotadd_new_pgdat()
| --> free_area_init_node()
| --> get_pfn_range_for_nid()
| --> find memory ranges in memblock.
| --> memblock_add_node(start, size, nid) ------------------- if you
add it here, it doesn't work.
The result will be like below if we hotadd node 5.
[ 2007.577000] Initmem setup node 5 [mem
0x0000000000000000-0xffffffffffffffff]
[ 2007.584000] On node 5 totalpages: 0
[ 2007.585000] Built 5 zonelists in Node order, mobility grouping on.
Total pages: 32588823
[ 2007.594000] Policy zone: Normal
[ 2007.598000] init_memory_mapping: [mem 0x60000000000-0x607ffffffff]
And also, if we merge this patch, /sys/devices/system/node/nodeX/meminfo
will break.
Since this patch is not merged, I think let's just drop it.
And about the little bug in your patch 1, since I'm in a hurry, I have
already send a patch to fix it.
Thanks. :)
On 08/11/2015 03:33 PM, Xishi Qiu wrote:
> After hotadd_new_pgdat()->free_area_init_node(), the pgdat and zone's spanned/present
> are both 0, so remove reset_node_managed_pages() and reset_node_managed_pages().
>
> Signed-off-by: Xishi Qiu <qiuxishi@huawei.com>
> ---
> mm/memory_hotplug.c | 25 -------------------------
> 1 file changed, 25 deletions(-)
>
> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
> index 11f26cc..997dfad 100644
> --- a/mm/memory_hotplug.c
> +++ b/mm/memory_hotplug.c
> @@ -1065,16 +1065,6 @@ int __ref online_pages(unsigned long pfn, unsigned long nr_pages, int online_typ
> }
> #endif /* CONFIG_MEMORY_HOTPLUG_SPARSE */
>
> -static void reset_node_present_pages(pg_data_t *pgdat)
> -{
> - struct zone *z;
> -
> - for (z = pgdat->node_zones; z < pgdat->node_zones + MAX_NR_ZONES; z++)
> - z->present_pages = 0;
> -
> - pgdat->node_present_pages = 0;
> -}
> -
> /* we are OK calling __meminit stuff here - we have CONFIG_MEMORY_HOTPLUG */
> static pg_data_t __ref *hotadd_new_pgdat(int nid, u64 start)
> {
> @@ -1109,21 +1099,6 @@ static pg_data_t __ref *hotadd_new_pgdat(int nid, u64 start)
> build_all_zonelists(pgdat, NULL);
> mutex_unlock(&zonelists_mutex);
>
> - /*
> - * zone->managed_pages is set to an approximate value in
> - * free_area_init_core(), which will cause
> - * /sys/device/system/node/nodeX/meminfo has wrong data.
> - * So reset it to 0 before any memory is onlined.
> - */
> - reset_node_managed_pages(pgdat);
> -
> - /*
> - * When memory is hot-added, all the memory is in offline state. So
> - * clear all zones' present_pages because they will be updated in
> - * online_pages() and offline_pages().
> - */
> - reset_node_present_pages(pgdat);
> -
> return pgdat;
> }
>
--
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:[~2015-08-23 10:29 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-11 7:26 [PATCH 1/2] memory-hotplug: fix wrong edge when hot add a new node Xishi Qiu
2015-08-11 7:33 ` [PATCH 2/2] memory-hotplug: remove reset_node_managed_pages() and reset_node_managed_pages() in hotadd_new_pgdat() Xishi Qiu
2015-08-23 10:28 ` Tang Chen [this message]
2015-08-24 9:17 ` Xishi Qiu
2015-08-24 9:39 ` Tang Chen
2015-08-24 11:24 ` Xishi Qiu
2015-08-26 7:19 ` Tang Chen
-- strict thread matches above, loose matches on Subject: below --
2015-04-17 7:14 Xishi Qiu
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=55D9A036.7060506@cn.fujitsu.com \
--to=tangchen@cn.fujitsu.com \
--cc=akpm@linux-foundation.org \
--cc=isimatu.yasuaki@jp.fujitsu.com \
--cc=izumi.taku@jp.fujitsu.com \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=qiuxishi@huawei.com \
--cc=yasu.isimatu@gmail.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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).