diff options
| author | Jiang Liu <jiang.liu@huawei.com> | 2012-07-31 16:43:35 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-07-31 18:42:44 -0700 | 
| commit | 4ed7e02222aba062bd0ed3ab12dfc8e9fc0467b5 (patch) | |
| tree | 82e6c1c3bc30cab1220c97797bd68a60bd98cab2 | |
| parent | 340175b7d14d5617559d0c1a54fa0ea204d9edcd (diff) | |
| download | olio-linux-3.10-4ed7e02222aba062bd0ed3ab12dfc8e9fc0467b5.tar.xz olio-linux-3.10-4ed7e02222aba062bd0ed3ab12dfc8e9fc0467b5.zip  | |
mm/hotplug: mark memory hotplug code in page_alloc.c as __meminit
Mark functions used by both boot and memory hotplug as __meminit to reduce
memory footprint when memory hotplug is disabled.
Alos guard zone_pcp_update() with CONFIG_MEMORY_HOTPLUG because it's only
used by memory hotplug code.
Signed-off-by: Jiang Liu <liuj97@gmail.com>
Cc: Wei Wang <Bessel.Wang@huawei.com>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Michal Hocko <mhocko@suse.cz>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Yinghai Lu <yinghai@kernel.org>
Cc: Tony Luck <tony.luck@intel.com>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Keping Chen <chenkeping@huawei.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
| -rw-r--r-- | mm/page_alloc.c | 66 | 
1 files changed, 34 insertions, 32 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 9c9a31665a7..667338e80e9 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -3411,7 +3411,7 @@ static void setup_zone_pageset(struct zone *zone);  DEFINE_MUTEX(zonelists_mutex);  /* return values int ....just for stop_machine() */ -static __init_refok int __build_all_zonelists(void *data) +static int __build_all_zonelists(void *data)  {  	int nid;  	int cpu; @@ -3755,7 +3755,7 @@ static void __meminit zone_init_free_lists(struct zone *zone)  	memmap_init_zone((size), (nid), (zone), (start_pfn), MEMMAP_EARLY)  #endif -static int zone_batchsize(struct zone *zone) +static int __meminit zone_batchsize(struct zone *zone)  {  #ifdef CONFIG_MMU  	int batch; @@ -3837,7 +3837,7 @@ static void setup_pagelist_highmark(struct per_cpu_pageset *p,  		pcp->batch = PAGE_SHIFT * 8;  } -static void setup_zone_pageset(struct zone *zone) +static void __meminit setup_zone_pageset(struct zone *zone)  {  	int cpu; @@ -3910,33 +3910,6 @@ int zone_wait_table_init(struct zone *zone, unsigned long zone_size_pages)  	return 0;  } -static int __zone_pcp_update(void *data) -{ -	struct zone *zone = data; -	int cpu; -	unsigned long batch = zone_batchsize(zone), flags; - -	for_each_possible_cpu(cpu) { -		struct per_cpu_pageset *pset; -		struct per_cpu_pages *pcp; - -		pset = per_cpu_ptr(zone->pageset, cpu); -		pcp = &pset->pcp; - -		local_irq_save(flags); -		if (pcp->count > 0) -			free_pcppages_bulk(zone, pcp->count, pcp); -		setup_pageset(pset, batch); -		local_irq_restore(flags); -	} -	return 0; -} - -void zone_pcp_update(struct zone *zone) -{ -	stop_machine(__zone_pcp_update, zone, NULL); -} -  static __meminit void zone_pcp_init(struct zone *zone)  {  	/* @@ -3952,7 +3925,7 @@ static __meminit void zone_pcp_init(struct zone *zone)  					 zone_batchsize(zone));  } -__meminit int init_currently_empty_zone(struct zone *zone, +int __meminit init_currently_empty_zone(struct zone *zone,  					unsigned long zone_start_pfn,  					unsigned long size,  					enum memmap_context context) @@ -4765,7 +4738,7 @@ out:  }  /* Any regular memory on that node ? */ -static void check_for_regular_memory(pg_data_t *pgdat) +static void __init check_for_regular_memory(pg_data_t *pgdat)  {  #ifdef CONFIG_HIGHMEM  	enum zone_type zone_type; @@ -5893,6 +5866,35 @@ void free_contig_range(unsigned long pfn, unsigned nr_pages)  }  #endif +#ifdef CONFIG_MEMORY_HOTPLUG +static int __meminit __zone_pcp_update(void *data) +{ +	struct zone *zone = data; +	int cpu; +	unsigned long batch = zone_batchsize(zone), flags; + +	for_each_possible_cpu(cpu) { +		struct per_cpu_pageset *pset; +		struct per_cpu_pages *pcp; + +		pset = per_cpu_ptr(zone->pageset, cpu); +		pcp = &pset->pcp; + +		local_irq_save(flags); +		if (pcp->count > 0) +			free_pcppages_bulk(zone, pcp->count, pcp); +		setup_pageset(pset, batch); +		local_irq_restore(flags); +	} +	return 0; +} + +void __meminit zone_pcp_update(struct zone *zone) +{ +	stop_machine(__zone_pcp_update, zone, NULL); +} +#endif +  #ifdef CONFIG_MEMORY_HOTREMOVE  void zone_pcp_reset(struct zone *zone)  {  |