From: Lai Jiangshan <laijs@cn.fujitsu.com>
To: Ni zhan Chen <nizhan.chen@gmail.com>
Cc: linux-kernel@vger.kernel.org, Mel Gorman <mel@csn.ul.ie>,
Andrew Morton <akpm@linux-foundation.org>,
Jiang Liu <jiang.liu@huawei.com>, Xishi Qiu <qiuxishi@huawei.com>,
Mel Gorman <mgorman@suse.de>, Minchan Kim <minchan@kernel.org>,
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
Michal Hocko <mhocko@suse.cz>,
linux-mm@kvack.org
Subject: Re: [PATCH 3/3] memory_hotplug: Don't modify the zone_start_pfn outside of zone_span_writelock()
Date: Fri, 28 Sep 2012 15:29:19 +0800 [thread overview]
Message-ID: <506551CF.9090009@cn.fujitsu.com> (raw)
In-Reply-To: <5064525E.5080901@gmail.com>
Hi, Chen,
On 09/27/2012 09:19 PM, Ni zhan Chen wrote:
> On 09/27/2012 02:47 PM, Lai Jiangshan wrote:
>> The __add_zone() maybe call sleep-able init_currently_empty_zone()
>> to init wait_table,
>>
>> But this function also modifies the zone_start_pfn without any lock.
>> It is bugy.
>>
>> So we move this modification out, and we ensure the modification
>> of zone_start_pfn is only done with zone_span_writelock() held or in booting.
>>
>> Since zone_start_pfn is not modified by init_currently_empty_zone()
>> grow_zone_span() needs to check zone_start_pfn before update it.
>>
>> CC: Mel Gorman <mel@csn.ul.ie>
>> Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
>> Reported-by: Yasuaki ISIMATU <isimatu.yasuaki@jp.fujitsu.com>
>> Tested-by: Wen Congyang <wency@cn.fujitsu.com>
>> ---
>> mm/memory_hotplug.c | 2 +-
>> mm/page_alloc.c | 3 +--
>> 2 files changed, 2 insertions(+), 3 deletions(-)
>>
>> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
>> index b62d429b..790561f 100644
>> --- a/mm/memory_hotplug.c
>> +++ b/mm/memory_hotplug.c
>> @@ -205,7 +205,7 @@ static void grow_zone_span(struct zone *zone, unsigned long start_pfn,
>> zone_span_writelock(zone);
>> old_zone_end_pfn = zone->zone_start_pfn + zone->spanned_pages;
>> - if (start_pfn < zone->zone_start_pfn)
>> + if (!zone->zone_start_pfn || start_pfn < zone->zone_start_pfn)
>> zone->zone_start_pfn = start_pfn;
>> zone->spanned_pages = max(old_zone_end_pfn, end_pfn) -
>> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
>> index c13ea75..2545013 100644
>> --- a/mm/page_alloc.c
>> +++ b/mm/page_alloc.c
>> @@ -3997,8 +3997,6 @@ int __meminit init_currently_empty_zone(struct zone *zone,
>> return ret;
>> pgdat->nr_zones = zone_idx(zone) + 1;
>> - zone->zone_start_pfn = zone_start_pfn;
>> -
>
> then how can mminit_dprintk print zone->zone_start_pfn ? always print 0 make no sense.
The full code here:
mminit_dprintk(MMINIT_TRACE, "memmap_init",
"Initialising map node %d zone %lu pfns %lu -> %lu\n",
pgdat->node_id,
(unsigned long)zone_idx(zone),
zone_start_pfn, (zone_start_pfn + size));
It doesn't always print 0, it still behaves as I expected.
Could you elaborate?
Thanks,
Lai
>
>> mminit_dprintk(MMINIT_TRACE, "memmap_init",
>> "Initialising map node %d zone %lu pfns %lu -> %lu\n",
>> pgdat->node_id,
>> @@ -4465,6 +4463,7 @@ static void __paginginit free_area_init_core(struct pglist_data *pgdat,
>> ret = init_currently_empty_zone(zone, zone_start_pfn,
>> size, MEMMAP_EARLY);
>> BUG_ON(ret);
>> + zone->zone_start_pfn = zone_start_pfn;
>> memmap_init(size, nid, j, zone_start_pfn);
>> zone_start_pfn += size;
>> }
>
>
--
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>
WARNING: multiple messages have this Message-ID (diff)
From: Lai Jiangshan <laijs@cn.fujitsu.com>
To: Ni zhan Chen <nizhan.chen@gmail.com>
Cc: linux-kernel@vger.kernel.org, Mel Gorman <mel@csn.ul.ie>,
Andrew Morton <akpm@linux-foundation.org>,
Jiang Liu <jiang.liu@huawei.com>, Xishi Qiu <qiuxishi@huawei.com>,
Mel Gorman <mgorman@suse.de>, Minchan Kim <minchan@kernel.org>,
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
Michal Hocko <mhocko@suse.cz>,
linux-mm@kvack.org
Subject: Re: [PATCH 3/3] memory_hotplug: Don't modify the zone_start_pfn outside of zone_span_writelock()
Date: Fri, 28 Sep 2012 15:29:19 +0800 [thread overview]
Message-ID: <506551CF.9090009@cn.fujitsu.com> (raw)
In-Reply-To: <5064525E.5080901@gmail.com>
Hi, Chen,
On 09/27/2012 09:19 PM, Ni zhan Chen wrote:
> On 09/27/2012 02:47 PM, Lai Jiangshan wrote:
>> The __add_zone() maybe call sleep-able init_currently_empty_zone()
>> to init wait_table,
>>
>> But this function also modifies the zone_start_pfn without any lock.
>> It is bugy.
>>
>> So we move this modification out, and we ensure the modification
>> of zone_start_pfn is only done with zone_span_writelock() held or in booting.
>>
>> Since zone_start_pfn is not modified by init_currently_empty_zone()
>> grow_zone_span() needs to check zone_start_pfn before update it.
>>
>> CC: Mel Gorman <mel@csn.ul.ie>
>> Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
>> Reported-by: Yasuaki ISIMATU <isimatu.yasuaki@jp.fujitsu.com>
>> Tested-by: Wen Congyang <wency@cn.fujitsu.com>
>> ---
>> mm/memory_hotplug.c | 2 +-
>> mm/page_alloc.c | 3 +--
>> 2 files changed, 2 insertions(+), 3 deletions(-)
>>
>> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
>> index b62d429b..790561f 100644
>> --- a/mm/memory_hotplug.c
>> +++ b/mm/memory_hotplug.c
>> @@ -205,7 +205,7 @@ static void grow_zone_span(struct zone *zone, unsigned long start_pfn,
>> zone_span_writelock(zone);
>> old_zone_end_pfn = zone->zone_start_pfn + zone->spanned_pages;
>> - if (start_pfn < zone->zone_start_pfn)
>> + if (!zone->zone_start_pfn || start_pfn < zone->zone_start_pfn)
>> zone->zone_start_pfn = start_pfn;
>> zone->spanned_pages = max(old_zone_end_pfn, end_pfn) -
>> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
>> index c13ea75..2545013 100644
>> --- a/mm/page_alloc.c
>> +++ b/mm/page_alloc.c
>> @@ -3997,8 +3997,6 @@ int __meminit init_currently_empty_zone(struct zone *zone,
>> return ret;
>> pgdat->nr_zones = zone_idx(zone) + 1;
>> - zone->zone_start_pfn = zone_start_pfn;
>> -
>
> then how can mminit_dprintk print zone->zone_start_pfn ? always print 0 make no sense.
The full code here:
mminit_dprintk(MMINIT_TRACE, "memmap_init",
"Initialising map node %d zone %lu pfns %lu -> %lu\n",
pgdat->node_id,
(unsigned long)zone_idx(zone),
zone_start_pfn, (zone_start_pfn + size));
It doesn't always print 0, it still behaves as I expected.
Could you elaborate?
Thanks,
Lai
>
>> mminit_dprintk(MMINIT_TRACE, "memmap_init",
>> "Initialising map node %d zone %lu pfns %lu -> %lu\n",
>> pgdat->node_id,
>> @@ -4465,6 +4463,7 @@ static void __paginginit free_area_init_core(struct pglist_data *pgdat,
>> ret = init_currently_empty_zone(zone, zone_start_pfn,
>> size, MEMMAP_EARLY);
>> BUG_ON(ret);
>> + zone->zone_start_pfn = zone_start_pfn;
>> memmap_init(size, nid, j, zone_start_pfn);
>> zone_start_pfn += size;
>> }
>
>
next prev parent reply other threads:[~2012-09-28 7:46 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-27 6:47 [PATCH 0/3] memory_hotplug: fix memory hotplug bug Lai Jiangshan
2012-09-27 6:47 ` Lai Jiangshan
2012-09-27 6:47 ` [PATCH 1/3] memory_hotplug: fix stale node_states[N_NORMAL_MEMORY] Lai Jiangshan
2012-09-27 6:47 ` Lai Jiangshan
2012-09-27 14:32 ` Ni zhan Chen
2012-09-27 14:32 ` Ni zhan Chen
2012-09-28 7:32 ` Lai Jiangshan
2012-09-28 7:32 ` Lai Jiangshan
2012-09-27 22:03 ` KOSAKI Motohiro
2012-09-27 22:03 ` KOSAKI Motohiro
2012-10-26 1:39 ` Lai Jiangshan
2012-10-26 1:39 ` Lai Jiangshan
2012-09-27 6:47 ` [PATCH 2/3] slub, hotplug: ignore unrelated node's hot-adding and hot-removing Lai Jiangshan
2012-09-27 6:47 ` Lai Jiangshan
2012-09-27 22:04 ` KOSAKI Motohiro
2012-09-27 22:04 ` KOSAKI Motohiro
2012-09-27 22:35 ` Christoph
2012-09-27 22:35 ` Christoph
2012-09-28 7:19 ` Lai Jiangshan
2012-09-28 7:19 ` Lai Jiangshan
2012-09-28 22:26 ` KOSAKI Motohiro
2012-09-28 22:26 ` KOSAKI Motohiro
2012-10-24 7:06 ` Lai Jiangshan
2012-10-24 7:06 ` Lai Jiangshan
2012-09-27 6:47 ` [PATCH 3/3] memory_hotplug: Don't modify the zone_start_pfn outside of zone_span_writelock() Lai Jiangshan
2012-09-27 6:47 ` Lai Jiangshan
2012-09-27 13:19 ` Ni zhan Chen
2012-09-27 13:19 ` Ni zhan Chen
2012-09-28 7:29 ` Lai Jiangshan [this message]
2012-09-28 7:29 ` Lai Jiangshan
2012-09-28 8:04 ` Ni zhan Chen
2012-09-28 8:04 ` Ni zhan Chen
2012-09-27 22:30 ` KOSAKI Motohiro
2012-09-27 22:30 ` KOSAKI Motohiro
2012-09-28 7:39 ` Lai Jiangshan
2012-09-28 7:39 ` Lai Jiangshan
2012-09-28 0:39 ` [PATCH 0/3] memory_hotplug: fix memory hotplug bug Ni zhan Chen
2012-09-28 0:39 ` Ni zhan Chen
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=506551CF.9090009@cn.fujitsu.com \
--to=laijs@cn.fujitsu.com \
--cc=akpm@linux-foundation.org \
--cc=jiang.liu@huawei.com \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mel@csn.ul.ie \
--cc=mgorman@suse.de \
--cc=mhocko@suse.cz \
--cc=minchan@kernel.org \
--cc=nizhan.chen@gmail.com \
--cc=qiuxishi@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: link
Be 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.