All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiang Liu <liuj97@gmail.com>
To: Tang Chen <tangchen@cn.fujitsu.com>
Cc: hpa@zytor.com, akpm@linux-foundation.org, rob@landley.net,
	isimatu.yasuaki@jp.fujitsu.com, laijs@cn.fujitsu.com,
	wency@cn.fujitsu.com, linfeng@cn.fujitsu.com,
	jiang.liu@huawei.com, yinghai@kernel.org,
	kosaki.motohiro@jp.fujitsu.com, minchan.kim@gmail.com,
	mgorman@suse.de, rientjes@google.com, rusty@rustcorp.com.au,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	linux-doc@vger.kernel.org
Subject: Re: [PATCH v2 3/5] page_alloc: Introduce zone_movable_limit[] to keep movable limit for nodes
Date: Wed, 05 Dec 2012 23:46:31 +0800	[thread overview]
Message-ID: <50BF6C57.1050805@gmail.com> (raw)
In-Reply-To: <1353667445-7593-4-git-send-email-tangchen@cn.fujitsu.com>

On 11/23/2012 06:44 PM, Tang Chen wrote:
> This patch introduces a new array zone_movable_limit[] to store the
> ZONE_MOVABLE limit from movablecore_map boot option for all nodes.
> The function sanitize_zone_movable_limit() will find out to which
> node the ranges in movable_map.map[] belongs, and calculates the
> low boundary of ZONE_MOVABLE for each node.
> 
> Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
> Reviewed-by: Wen Congyang <wency@cn.fujitsu.com>
> Reviewed-by: Lai Jiangshan <laijs@cn.fujitsu.com>
> Tested-by: Lin Feng <linfeng@cn.fujitsu.com>
> ---
>  mm/page_alloc.c |   55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 55 insertions(+), 0 deletions(-)
> 
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index fb5cf12..f23d76a 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -206,6 +206,7 @@ static unsigned long __meminitdata arch_zone_highest_possible_pfn[MAX_NR_ZONES];
>  static unsigned long __initdata required_kernelcore;
>  static unsigned long __initdata required_movablecore;
>  static unsigned long __meminitdata zone_movable_pfn[MAX_NUMNODES];
> +static unsigned long __meminitdata zone_movable_limit[MAX_NUMNODES];
>  
>  /* movable_zone is the "real" zone pages in ZONE_MOVABLE are taken from */
>  int movable_zone;
> @@ -4323,6 +4324,55 @@ static unsigned long __meminit zone_absent_pages_in_node(int nid,
>  	return __absent_pages_in_range(nid, zone_start_pfn, zone_end_pfn);
>  }
>  
> +/**
> + * sanitize_zone_movable_limit - Sanitize the zone_movable_limit array.
> + *
> + * zone_movable_limit is initialized as 0. This function will try to get
> + * the first ZONE_MOVABLE pfn of each node from movablecore_map, and
> + * assigne them to zone_movable_limit.
> + * zone_movable_limit[nid] == 0 means no limit for the node.
> + *
> + * Note: Each range is represented as [start_pfn, end_pfn)
> + */
> +static void __meminit sanitize_zone_movable_limit(void)
> +{
> +	int map_pos = 0, i, nid;
> +	unsigned long start_pfn, end_pfn;
> +
> +	if (!movablecore_map.nr_map)
> +		return;
> +
> +	/* Iterate all ranges from minimum to maximum */
> +	for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, &nid) {
> +		/*
> +		 * If we have found lowest pfn of ZONE_MOVABLE of the node
> +		 * specified by user, just go on to check next range.
> +		 */
> +		if (zone_movable_limit[nid])
> +			continue;
Need special handling of low memory here on systems with highmem, otherwise
it will cause us to configure both lowmem and highmem as movable_zone.

> +
> +		while (map_pos < movablecore_map.nr_map) {
> +			if (end_pfn <= movablecore_map.map[map_pos].start)
> +				break;
> +
> +			if (start_pfn >= movablecore_map.map[map_pos].end) {
> +				map_pos++;
> +				continue;
> +			}
> +
> +			/*
> +			 * The start_pfn of ZONE_MOVABLE is either the minimum
> +			 * pfn specified by movablecore_map, or 0, which means
> +			 * the node has no ZONE_MOVABLE.
> +			 */
> +			zone_movable_limit[nid] = max(start_pfn,
> +					movablecore_map.map[map_pos].start);
> +
> +			break;
> +		}
> +	}
> +}
> +
>  #else /* CONFIG_HAVE_MEMBLOCK_NODE_MAP */
>  static inline unsigned long __meminit zone_spanned_pages_in_node(int nid,
>  					unsigned long zone_type,
> @@ -4341,6 +4391,10 @@ static inline unsigned long __meminit zone_absent_pages_in_node(int nid,
>  	return zholes_size[zone_type];
>  }
>  
> +static void __meminit sanitize_zone_movable_limit(void)
> +{
> +}
> +
>  #endif /* CONFIG_HAVE_MEMBLOCK_NODE_MAP */
>  
>  static void __meminit calculate_node_totalpages(struct pglist_data *pgdat,
> @@ -4906,6 +4960,7 @@ void __init free_area_init_nodes(unsigned long *max_zone_pfn)
>  
>  	/* Find the PFNs that ZONE_MOVABLE begins at in each node */
>  	memset(zone_movable_pfn, 0, sizeof(zone_movable_pfn));
> +	sanitize_zone_movable_limit();
>  	find_zone_movable_pfns_for_nodes();
>  
>  	/* Print out the zone ranges */
> 

--
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: Jiang Liu <liuj97@gmail.com>
To: Tang Chen <tangchen@cn.fujitsu.com>
Cc: hpa@zytor.com, akpm@linux-foundation.org, rob@landley.net,
	isimatu.yasuaki@jp.fujitsu.com, laijs@cn.fujitsu.com,
	wency@cn.fujitsu.com, linfeng@cn.fujitsu.com,
	jiang.liu@huawei.com, yinghai@kernel.org,
	kosaki.motohiro@jp.fujitsu.com, minchan.kim@gmail.com,
	mgorman@suse.de, rientjes@google.com, rusty@rustcorp.com.au,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	linux-doc@vger.kernel.org
Subject: Re: [PATCH v2 3/5] page_alloc: Introduce zone_movable_limit[] to keep movable limit for nodes
Date: Wed, 05 Dec 2012 23:46:31 +0800	[thread overview]
Message-ID: <50BF6C57.1050805@gmail.com> (raw)
In-Reply-To: <1353667445-7593-4-git-send-email-tangchen@cn.fujitsu.com>

On 11/23/2012 06:44 PM, Tang Chen wrote:
> This patch introduces a new array zone_movable_limit[] to store the
> ZONE_MOVABLE limit from movablecore_map boot option for all nodes.
> The function sanitize_zone_movable_limit() will find out to which
> node the ranges in movable_map.map[] belongs, and calculates the
> low boundary of ZONE_MOVABLE for each node.
> 
> Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
> Reviewed-by: Wen Congyang <wency@cn.fujitsu.com>
> Reviewed-by: Lai Jiangshan <laijs@cn.fujitsu.com>
> Tested-by: Lin Feng <linfeng@cn.fujitsu.com>
> ---
>  mm/page_alloc.c |   55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 55 insertions(+), 0 deletions(-)
> 
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index fb5cf12..f23d76a 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -206,6 +206,7 @@ static unsigned long __meminitdata arch_zone_highest_possible_pfn[MAX_NR_ZONES];
>  static unsigned long __initdata required_kernelcore;
>  static unsigned long __initdata required_movablecore;
>  static unsigned long __meminitdata zone_movable_pfn[MAX_NUMNODES];
> +static unsigned long __meminitdata zone_movable_limit[MAX_NUMNODES];
>  
>  /* movable_zone is the "real" zone pages in ZONE_MOVABLE are taken from */
>  int movable_zone;
> @@ -4323,6 +4324,55 @@ static unsigned long __meminit zone_absent_pages_in_node(int nid,
>  	return __absent_pages_in_range(nid, zone_start_pfn, zone_end_pfn);
>  }
>  
> +/**
> + * sanitize_zone_movable_limit - Sanitize the zone_movable_limit array.
> + *
> + * zone_movable_limit is initialized as 0. This function will try to get
> + * the first ZONE_MOVABLE pfn of each node from movablecore_map, and
> + * assigne them to zone_movable_limit.
> + * zone_movable_limit[nid] == 0 means no limit for the node.
> + *
> + * Note: Each range is represented as [start_pfn, end_pfn)
> + */
> +static void __meminit sanitize_zone_movable_limit(void)
> +{
> +	int map_pos = 0, i, nid;
> +	unsigned long start_pfn, end_pfn;
> +
> +	if (!movablecore_map.nr_map)
> +		return;
> +
> +	/* Iterate all ranges from minimum to maximum */
> +	for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, &nid) {
> +		/*
> +		 * If we have found lowest pfn of ZONE_MOVABLE of the node
> +		 * specified by user, just go on to check next range.
> +		 */
> +		if (zone_movable_limit[nid])
> +			continue;
Need special handling of low memory here on systems with highmem, otherwise
it will cause us to configure both lowmem and highmem as movable_zone.

> +
> +		while (map_pos < movablecore_map.nr_map) {
> +			if (end_pfn <= movablecore_map.map[map_pos].start)
> +				break;
> +
> +			if (start_pfn >= movablecore_map.map[map_pos].end) {
> +				map_pos++;
> +				continue;
> +			}
> +
> +			/*
> +			 * The start_pfn of ZONE_MOVABLE is either the minimum
> +			 * pfn specified by movablecore_map, or 0, which means
> +			 * the node has no ZONE_MOVABLE.
> +			 */
> +			zone_movable_limit[nid] = max(start_pfn,
> +					movablecore_map.map[map_pos].start);
> +
> +			break;
> +		}
> +	}
> +}
> +
>  #else /* CONFIG_HAVE_MEMBLOCK_NODE_MAP */
>  static inline unsigned long __meminit zone_spanned_pages_in_node(int nid,
>  					unsigned long zone_type,
> @@ -4341,6 +4391,10 @@ static inline unsigned long __meminit zone_absent_pages_in_node(int nid,
>  	return zholes_size[zone_type];
>  }
>  
> +static void __meminit sanitize_zone_movable_limit(void)
> +{
> +}
> +
>  #endif /* CONFIG_HAVE_MEMBLOCK_NODE_MAP */
>  
>  static void __meminit calculate_node_totalpages(struct pglist_data *pgdat,
> @@ -4906,6 +4960,7 @@ void __init free_area_init_nodes(unsigned long *max_zone_pfn)
>  
>  	/* Find the PFNs that ZONE_MOVABLE begins at in each node */
>  	memset(zone_movable_pfn, 0, sizeof(zone_movable_pfn));
> +	sanitize_zone_movable_limit();
>  	find_zone_movable_pfns_for_nodes();
>  
>  	/* Print out the zone ranges */
> 


  reply	other threads:[~2012-12-05 15:46 UTC|newest]

Thread overview: 170+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-23 10:44 [PATCH v2 0/5] Add movablecore_map boot option Tang Chen
2012-11-23 10:44 ` Tang Chen
2012-11-23 10:44 ` [PATCH v2 1/5] x86: get pg_data_t's memory from other node Tang Chen
2012-11-23 10:44   ` Tang Chen
2012-11-24  1:19   ` Jiang Liu
2012-11-24  1:19     ` Jiang Liu
2012-11-26  1:19     ` Tang Chen
2012-11-26  1:19       ` Tang Chen
2012-12-02 15:11   ` Jiang Liu
2012-12-02 15:11     ` Jiang Liu
2012-11-23 10:44 ` [PATCH v2 2/5] page_alloc: add movable_memmap kernel parameter Tang Chen
2012-11-23 10:44   ` Tang Chen
2012-11-23 10:44 ` [PATCH v2 3/5] page_alloc: Introduce zone_movable_limit[] to keep movable limit for nodes Tang Chen
2012-11-23 10:44   ` Tang Chen
2012-12-05 15:46   ` Jiang Liu [this message]
2012-12-05 15:46     ` Jiang Liu
2012-12-06  1:20     ` Tang Chen
2012-12-06  1:20       ` Tang Chen
2012-11-23 10:44 ` [PATCH v2 4/5] page_alloc: Make movablecore_map has higher priority Tang Chen
2012-11-23 10:44   ` Tang Chen
2012-12-05 15:43   ` Jiang Liu
2012-12-05 15:43     ` Jiang Liu
2012-12-06  1:26     ` Tang Chen
2012-12-06  1:26       ` Tang Chen
2012-12-06  2:26       ` Jiang Liu
2012-12-06  2:26         ` Jiang Liu
2012-12-06  2:51         ` Jianguo Wu
2012-12-06  2:51           ` Jianguo Wu
2012-12-06  2:57           ` Tang Chen
2012-12-06  2:57             ` Tang Chen
2012-12-09  8:10         ` Tang Chen
2012-12-09  8:10           ` Tang Chen
2012-12-10  2:15           ` Jiang Liu
2012-12-10  2:15             ` Jiang Liu
2012-11-23 10:44 ` [PATCH v2 5/5] page_alloc: Bootmem limit with movablecore_map Tang Chen
2012-11-23 10:44   ` Tang Chen
2012-11-26 12:22   ` wujianguo
2012-11-26 12:22     ` wujianguo
2012-11-26 12:53     ` Tang Chen
2012-11-26 12:53       ` Tang Chen
2012-11-26 12:40   ` wujianguo
2012-11-26 12:40     ` wujianguo
2012-11-26 13:15     ` Tang Chen
2012-11-26 13:15       ` Tang Chen
2012-11-26 15:48       ` H. Peter Anvin
2012-11-26 15:48         ` H. Peter Anvin
2012-11-27  0:58         ` Jianguo Wu
2012-11-27  0:58           ` Jianguo Wu
2012-11-27  3:19           ` Wen Congyang
2012-11-27  3:19             ` Wen Congyang
2012-11-27  3:22             ` Jianguo Wu
2012-11-27  3:22               ` Jianguo Wu
2012-11-27  3:34               ` Wen Congyang
2012-11-27  3:34                 ` Wen Congyang
2012-11-27  1:12         ` Jiang Liu
2012-11-27  1:12           ` Jiang Liu
2012-11-27  1:20           ` H. Peter Anvin
2012-11-27  1:20             ` H. Peter Anvin
2012-11-27  3:15         ` Wen Congyang
2012-11-27  3:15           ` Wen Congyang
2012-11-27  5:31           ` H. Peter Anvin
2012-11-27  5:31             ` H. Peter Anvin
2012-12-06 17:28             ` Jiang Liu
2012-12-06 17:28               ` Jiang Liu
2012-12-06 17:41               ` H. Peter Anvin
2012-12-06 17:41                 ` H. Peter Anvin
2012-12-07  0:18                 ` Jiang Liu
2012-12-07  0:18                   ` Jiang Liu
2012-12-19  9:17     ` Tang Chen
2012-12-19  9:17       ` Tang Chen
2012-11-27  3:10 ` [PATCH v2 0/5] Add movablecore_map boot option wujianguo
2012-11-27  3:10   ` wujianguo
2012-11-27  5:43   ` Tang Chen
2012-11-27  5:43     ` Tang Chen
2012-11-27  6:20     ` H. Peter Anvin
2012-11-27  6:20       ` H. Peter Anvin
2012-11-27  6:47     ` Jianguo Wu
2012-11-27  6:47       ` Jianguo Wu
2012-11-28  3:47   ` Tang Chen
2012-11-28  3:47     ` Tang Chen
2012-11-28  4:01     ` Jiang Liu
2012-11-28  4:01       ` Jiang Liu
2012-11-28  5:21       ` Wen Congyang
2012-11-28  5:21         ` Wen Congyang
2012-11-28  5:17         ` Jiang Liu
2012-11-28  5:17           ` Jiang Liu
2012-11-28  4:53     ` Jianguo Wu
2012-11-28  4:53       ` Jianguo Wu
2012-11-27  8:00 ` Bob Liu
2012-11-27  8:00   ` Bob Liu
2012-11-27  8:29   ` Tang Chen
2012-11-27  8:29     ` Tang Chen
2012-11-27  8:49     ` H. Peter Anvin
2012-11-27  8:49       ` H. Peter Anvin
2012-11-27  9:47       ` Wen Congyang
2012-11-27  9:47         ` Wen Congyang
2012-11-27  9:53         ` H. Peter Anvin
2012-11-27  9:53           ` H. Peter Anvin
2012-11-27  9:59       ` Yasuaki Ishimatsu
2012-11-27  9:59         ` Yasuaki Ishimatsu
2012-11-27 12:09     ` Bob Liu
2012-11-27 12:09       ` Bob Liu
2012-11-27 12:49       ` Tang Chen
2012-11-27 12:49         ` Tang Chen
2012-11-28  3:24         ` Bob Liu
2012-11-28  3:24           ` Bob Liu
2012-11-28  4:08           ` Jiang Liu
2012-11-28  4:08             ` Jiang Liu
2012-11-28  6:16             ` Tang Chen
2012-11-28  6:16               ` Tang Chen
2012-11-28  7:03               ` Jiang Liu
2012-11-28  7:03                 ` Jiang Liu
2012-11-28  8:29             ` Wen Congyang
2012-11-28  8:29               ` Wen Congyang
2012-11-28  8:28               ` Jiang Liu
2012-11-28  8:28                 ` Jiang Liu
2012-11-28  8:38                 ` Wen Congyang
2012-11-28  8:38                   ` Wen Congyang
2012-11-29  0:43               ` Jaegeuk Hanse
2012-11-29  0:43                 ` Jaegeuk Hanse
2012-11-29  1:24                 ` Tang Chen
2012-11-29  1:24                   ` Tang Chen
2012-11-30  9:20             ` Lai Jiangshan
2012-11-30  9:20               ` Lai Jiangshan
2012-11-28  8:47 ` Jiang Liu
2012-11-28  8:47   ` Jiang Liu
2012-11-28 21:34   ` Luck, Tony
2012-11-28 21:34     ` Luck, Tony
2012-11-28 21:38     ` H. Peter Anvin
2012-11-28 21:38       ` H. Peter Anvin
2012-11-29 11:00       ` Mel Gorman
2012-11-29 11:00         ` Mel Gorman
2012-11-29 16:07         ` H. Peter Anvin
2012-11-29 16:07           ` H. Peter Anvin
2012-11-29 22:41           ` Luck, Tony
2012-11-29 22:41             ` Luck, Tony
2012-11-29 22:45             ` H. Peter Anvin
2012-11-29 22:45               ` H. Peter Anvin
2012-11-30  2:56         ` Jiang Liu
2012-11-30  2:56           ` Jiang Liu
2012-11-30  3:15           ` Yasuaki Ishimatsu
2012-11-30  3:15             ` Yasuaki Ishimatsu
2012-11-30 15:36             ` Jiang Liu
2012-11-30 15:36               ` Jiang Liu
2012-11-30  2:58         ` Luck, Tony
2012-11-30  2:58           ` Luck, Tony
2012-11-30  3:28           ` H. Peter Anvin
2012-11-30  3:28             ` H. Peter Anvin
2012-11-30 10:19           ` Glauber Costa
2012-11-30 10:19             ` Glauber Costa
2012-11-30 10:52           ` Mel Gorman
2012-11-30 10:52             ` Mel Gorman
2012-11-29 10:38     ` Yasuaki Ishimatsu
2012-11-29 10:38       ` Yasuaki Ishimatsu
2012-11-29 11:05       ` Mel Gorman
2012-11-29 11:05         ` Mel Gorman
2012-11-29 15:47       ` Jiang Liu
2012-11-29 15:47         ` Jiang Liu
2012-11-29 15:53       ` Jiang Liu
2012-11-29 15:53         ` Jiang Liu
2012-11-29  1:42   ` Jaegeuk Hanse
2012-11-29  1:42     ` Jaegeuk Hanse
2012-11-29  2:25     ` Jiang Liu
2012-11-29  2:25       ` Jiang Liu
2012-11-29  2:49       ` Wanpeng Li
2012-11-29  2:59         ` Jiang Liu
2012-11-29  2:59           ` Jiang Liu
2012-11-29  2:49       ` Wanpeng Li
2012-11-30 22:27       ` Toshi Kani
2012-11-30 22:27         ` Toshi Kani

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=50BF6C57.1050805@gmail.com \
    --to=liuj97@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=hpa@zytor.com \
    --cc=isimatu.yasuaki@jp.fujitsu.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=mgorman@suse.de \
    --cc=minchan.kim@gmail.com \
    --cc=rientjes@google.com \
    --cc=rob@landley.net \
    --cc=rusty@rustcorp.com.au \
    --cc=tangchen@cn.fujitsu.com \
    --cc=wency@cn.fujitsu.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.