All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tang Chen <tangchen@cn.fujitsu.com>
To: Simon Jeons <simon.jeons@gmail.com>
Cc: jiang.liu@huawei.com, wujianguo@huawei.com, hpa@zytor.com,
	akpm@linux-foundation.org, wency@cn.fujitsu.com,
	laijs@cn.fujitsu.com, linfeng@cn.fujitsu.com, yinghai@kernel.org,
	isimatu.yasuaki@jp.fujitsu.com, rob@landley.net,
	kosaki.motohiro@jp.fujitsu.com, minchan.kim@gmail.com,
	mgorman@suse.de, rientjes@google.com, rusty@rustcorp.com.au,
	lliubbo@gmail.com, jaegeuk.hanse@gmail.com, tony.luck@intel.com,
	glommer@parallels.com, linux-kernel@vger.kernel.org,
	linux-mm@kvack.org, linux-doc@vger.kernel.org
Subject: Re: [PATCH v3 4/5][RESEND] page_alloc: Make movablecore_map has higher priority
Date: Wed, 12 Dec 2012 17:34:06 +0800	[thread overview]
Message-ID: <50C84F8E.5030805@cn.fujitsu.com> (raw)
In-Reply-To: <1355276008.1433.1.camel@kernel.cn.ibm.com>

Hi Simon,

Thanks for reviewing. This logic is aimed at make movablecore_map
coexist with kernelcore/movablecore.

Please see below. :)

On 12/12/2012 09:33 AM, Simon Jeons wrote:
>> @@ -4839,9 +4839,17 @@ static void __init find_zone_movable_pfns_for_nodes(void)
>>   		required_kernelcore = max(required_kernelcore, corepages);
>>   	}
>>
>> -	/* If kernelcore was not specified, there is no ZONE_MOVABLE */
>> -	if (!required_kernelcore)
>> +	/*
>> +	 * If neither kernelcore/movablecore nor movablecore_map is specified,
>> +	 * there is no ZONE_MOVABLE. But if movablecore_map is specified, the
>> +	 * start pfn of ZONE_MOVABLE has been stored in zone_movable_limit[].
>> +	 */
>> +	if (!required_kernelcore) {
>> +		if (movablecore_map.nr_map)
>> +			memcpy(zone_movable_pfn, zone_movable_limit,
>> +				sizeof(zone_movable_pfn));

If users didn't specified kernelcore option, then zone_movable_pfn[]
and zone_movable_limit[] are all the same. We skip the logic.

>>   		goto out;
>> +	}
>>
>>   	/* usable_startpfn is the lowest possible pfn ZONE_MOVABLE can be at */
>>   	usable_startpfn = arch_zone_lowest_possible_pfn[movable_zone];
>> @@ -4871,10 +4879,24 @@ restart:
>>   		for_each_mem_pfn_range(i, nid,&start_pfn,&end_pfn, NULL) {
>>   			unsigned long size_pages;
>>
>> +			/*
>> +			 * Find more memory for kernelcore in
>> +			 * [zone_movable_pfn[nid], zone_movable_limit[nid]).
>> +			 */
>>   			start_pfn = max(start_pfn, zone_movable_pfn[nid]);
>>   			if (start_pfn>= end_pfn)
>>   				continue;
>>
>
> Hi Chen,
>
>> +			if (zone_movable_limit[nid]) {

If users didn't give any limitation of ZONE_MOVABLE on node i, we could
skip the logic too.

>> +				end_pfn = min(end_pfn, zone_movable_limit[nid]);

In order to reuse the original kernelcore/movablecore logic, we keep
end_pfn <= zone_movable_limit[nid]. We device [start_pfn, end_pfn) into
two parts:
[start_pfn, zone_movable_limit[nid])
and
[zone_movable_limit[nid], end_pfn).

We just remove the second part, and go on to the original logic.

>> +				/* No range left for kernelcore in this node */
>> +				if (start_pfn>= end_pfn) {

Since we re-evaluated end_pfn, if we have crossed the limitation, we
should stop.

>> +					zone_movable_pfn[nid] =
>> +							zone_movable_limit[nid];

Here, we found the real limitation. That means, the lowest pfn of
ZONE_MOVABLE is either zone_movable_limit[nid] or the value the original
logic calculates out, which is below zone_movable_limit[nid].

>> +					break;

Then we break and go on to the next node.

>> +				}
>> +			}
>> +
>
> Could you explain this part of codes? hard to understand.
>
>>   			/* Account for what is only usable for kernelcore */
>>   			if (start_pfn<  usable_startpfn) {
>>   				unsigned long kernel_pages;
>> @@ -4934,12 +4956,12 @@ restart:
>>   	if (usable_nodes&&  required_kernelcore>  usable_nodes)
>>   		goto restart;
>>
>> +out:
>>   	/* Align start of ZONE_MOVABLE on all nids to MAX_ORDER_NR_PAGES */
>>   	for (nid = 0; nid<  MAX_NUMNODES; nid++)
>>   		zone_movable_pfn[nid] =
>>   			roundup(zone_movable_pfn[nid], MAX_ORDER_NR_PAGES);
>>
>> -out:
>>   	/* restore the node_state */
>>   	node_states[N_HIGH_MEMORY] = saved_node_state;
>>   }
>
>
>

--
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: Tang Chen <tangchen@cn.fujitsu.com>
To: Simon Jeons <simon.jeons@gmail.com>
Cc: jiang.liu@huawei.com, wujianguo@huawei.com, hpa@zytor.com,
	akpm@linux-foundation.org, wency@cn.fujitsu.com,
	laijs@cn.fujitsu.com, linfeng@cn.fujitsu.com, yinghai@kernel.org,
	isimatu.yasuaki@jp.fujitsu.com, rob@landley.net,
	kosaki.motohiro@jp.fujitsu.com, minchan.kim@gmail.com,
	mgorman@suse.de, rientjes@google.com, rusty@rustcorp.com.au,
	lliubbo@gmail.com, jaegeuk.hanse@gmail.com, tony.luck@intel.com,
	glommer@parallels.com, linux-kernel@vger.kernel.org,
	linux-mm@kvack.org, linux-doc@vger.kernel.org
Subject: Re: [PATCH v3 4/5][RESEND] page_alloc: Make movablecore_map has higher priority
Date: Wed, 12 Dec 2012 17:34:06 +0800	[thread overview]
Message-ID: <50C84F8E.5030805@cn.fujitsu.com> (raw)
In-Reply-To: <1355276008.1433.1.camel@kernel.cn.ibm.com>

Hi Simon,

Thanks for reviewing. This logic is aimed at make movablecore_map
coexist with kernelcore/movablecore.

Please see below. :)

On 12/12/2012 09:33 AM, Simon Jeons wrote:
>> @@ -4839,9 +4839,17 @@ static void __init find_zone_movable_pfns_for_nodes(void)
>>   		required_kernelcore = max(required_kernelcore, corepages);
>>   	}
>>
>> -	/* If kernelcore was not specified, there is no ZONE_MOVABLE */
>> -	if (!required_kernelcore)
>> +	/*
>> +	 * If neither kernelcore/movablecore nor movablecore_map is specified,
>> +	 * there is no ZONE_MOVABLE. But if movablecore_map is specified, the
>> +	 * start pfn of ZONE_MOVABLE has been stored in zone_movable_limit[].
>> +	 */
>> +	if (!required_kernelcore) {
>> +		if (movablecore_map.nr_map)
>> +			memcpy(zone_movable_pfn, zone_movable_limit,
>> +				sizeof(zone_movable_pfn));

If users didn't specified kernelcore option, then zone_movable_pfn[]
and zone_movable_limit[] are all the same. We skip the logic.

>>   		goto out;
>> +	}
>>
>>   	/* usable_startpfn is the lowest possible pfn ZONE_MOVABLE can be at */
>>   	usable_startpfn = arch_zone_lowest_possible_pfn[movable_zone];
>> @@ -4871,10 +4879,24 @@ restart:
>>   		for_each_mem_pfn_range(i, nid,&start_pfn,&end_pfn, NULL) {
>>   			unsigned long size_pages;
>>
>> +			/*
>> +			 * Find more memory for kernelcore in
>> +			 * [zone_movable_pfn[nid], zone_movable_limit[nid]).
>> +			 */
>>   			start_pfn = max(start_pfn, zone_movable_pfn[nid]);
>>   			if (start_pfn>= end_pfn)
>>   				continue;
>>
>
> Hi Chen,
>
>> +			if (zone_movable_limit[nid]) {

If users didn't give any limitation of ZONE_MOVABLE on node i, we could
skip the logic too.

>> +				end_pfn = min(end_pfn, zone_movable_limit[nid]);

In order to reuse the original kernelcore/movablecore logic, we keep
end_pfn <= zone_movable_limit[nid]. We device [start_pfn, end_pfn) into
two parts:
[start_pfn, zone_movable_limit[nid])
and
[zone_movable_limit[nid], end_pfn).

We just remove the second part, and go on to the original logic.

>> +				/* No range left for kernelcore in this node */
>> +				if (start_pfn>= end_pfn) {

Since we re-evaluated end_pfn, if we have crossed the limitation, we
should stop.

>> +					zone_movable_pfn[nid] =
>> +							zone_movable_limit[nid];

Here, we found the real limitation. That means, the lowest pfn of
ZONE_MOVABLE is either zone_movable_limit[nid] or the value the original
logic calculates out, which is below zone_movable_limit[nid].

>> +					break;

Then we break and go on to the next node.

>> +				}
>> +			}
>> +
>
> Could you explain this part of codes? hard to understand.
>
>>   			/* Account for what is only usable for kernelcore */
>>   			if (start_pfn<  usable_startpfn) {
>>   				unsigned long kernel_pages;
>> @@ -4934,12 +4956,12 @@ restart:
>>   	if (usable_nodes&&  required_kernelcore>  usable_nodes)
>>   		goto restart;
>>
>> +out:
>>   	/* Align start of ZONE_MOVABLE on all nids to MAX_ORDER_NR_PAGES */
>>   	for (nid = 0; nid<  MAX_NUMNODES; nid++)
>>   		zone_movable_pfn[nid] =
>>   			roundup(zone_movable_pfn[nid], MAX_ORDER_NR_PAGES);
>>
>> -out:
>>   	/* restore the node_state */
>>   	node_states[N_HIGH_MEMORY] = saved_node_state;
>>   }
>
>
>


  reply	other threads:[~2012-12-12  9:35 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-11  2:33 [PATCH v3 0/5] Add movablecore_map boot option Tang Chen
2012-12-11  2:33 ` Tang Chen
2012-12-11  2:33 ` [PATCH v3 1/5] x86: get pg_data_t's memory from other node Tang Chen
2012-12-11  2:33   ` Tang Chen
2012-12-11  2:33 ` [PATCH v3 2/5] page_alloc: add movable_memmap kernel parameter Tang Chen
2012-12-11  2:33   ` Tang Chen
2012-12-11  2:33 ` [PATCH v3 3/5] page_alloc: Introduce zone_movable_limit[] to keep movable limit for nodes Tang Chen
2012-12-11  2:33   ` Tang Chen
2012-12-11  3:07   ` Jianguo Wu
2012-12-11  3:07     ` Jianguo Wu
2012-12-11  3:32     ` Tang Chen
2012-12-11  3:32       ` Tang Chen
2012-12-11 11:28       ` Simon Jeons
2012-12-11 11:28         ` Simon Jeons
2012-12-12  0:49         ` Jiang Liu
2012-12-12  0:49           ` Jiang Liu
2012-12-12  9:09           ` Tang Chen
2012-12-12  9:09             ` Tang Chen
2012-12-12  9:29             ` Simon Jeons
2012-12-12  9:29               ` Simon Jeons
2012-12-12 10:32               ` Tang Chen
2012-12-12 10:32                 ` Tang Chen
2012-12-13  0:28                 ` Simon Jeons
2012-12-13  0:28                   ` Simon Jeons
2012-12-13  1:48                   ` Tang Chen
2012-12-13  1:48                     ` Tang Chen
2012-12-13  3:09                     ` Simon Jeons
2012-12-13  3:09                       ` Simon Jeons
2012-12-11 12:24     ` Simon Jeons
2012-12-11 12:24       ` Simon Jeons
2012-12-11 12:41       ` Jianguo Wu
2012-12-11 12:41         ` Jianguo Wu
2012-12-11 13:20         ` Simon Jeons
2012-12-11 13:20           ` Simon Jeons
2012-12-12  1:57           ` Jianguo Wu
2012-12-12  1:57             ` Jianguo Wu
2012-12-12  2:03             ` Simon Jeons
2012-12-12  2:03               ` Simon Jeons
2012-12-12  1:58           ` Lin Feng
2012-12-12  1:58             ` Lin Feng
2012-12-11  4:55   ` [PATCH v3 3/5][RESEND] " Tang Chen
2012-12-11  4:55     ` Tang Chen
2012-12-11  2:33 ` [PATCH v3 4/5] page_alloc: Make movablecore_map has higher priority Tang Chen
2012-12-11  2:33   ` Tang Chen
2012-12-11  4:56   ` [PATCH v3 4/5][RESEND] " Tang Chen
2012-12-11  4:56     ` Tang Chen
2012-12-12  1:33     ` Simon Jeons
2012-12-12  1:33       ` Simon Jeons
2012-12-12  9:34       ` Tang Chen [this message]
2012-12-12  9:34         ` Tang Chen
2012-12-13  1:56         ` Simon Jeons
2012-12-13  1:56           ` Simon Jeons
2012-12-11  2:33 ` [PATCH v3 5/5] page_alloc: Bootmem limit with movablecore_map Tang Chen
2012-12-11  2:33   ` Tang Chen
2012-12-11 11:33 ` [PATCH v3 0/5] Add movablecore_map boot option Simon Jeons
2012-12-11 11:33   ` Simon Jeons

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=50C84F8E.5030805@cn.fujitsu.com \
    --to=tangchen@cn.fujitsu.com \
    --cc=akpm@linux-foundation.org \
    --cc=glommer@parallels.com \
    --cc=hpa@zytor.com \
    --cc=isimatu.yasuaki@jp.fujitsu.com \
    --cc=jaegeuk.hanse@gmail.com \
    --cc=jiang.liu@huawei.com \
    --cc=kosaki.motohiro@jp.fujitsu.com \
    --cc=laijs@cn.fujitsu.com \
    --cc=linfeng@cn.fujitsu.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=lliubbo@gmail.com \
    --cc=mgorman@suse.de \
    --cc=minchan.kim@gmail.com \
    --cc=rientjes@google.com \
    --cc=rob@landley.net \
    --cc=rusty@rustcorp.com.au \
    --cc=simon.jeons@gmail.com \
    --cc=tony.luck@intel.com \
    --cc=wency@cn.fujitsu.com \
    --cc=wujianguo@huawei.com \
    --cc=yinghai@kernel.org \
    /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.