Skip to content

Commit 4ed7e02

Browse files
Jiang Liutorvalds
authored andcommitted
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>
1 parent 340175b commit 4ed7e02

File tree

1 file changed

+34
-32
lines changed

1 file changed

+34
-32
lines changed

mm/page_alloc.c

Lines changed: 34 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3411,7 +3411,7 @@ static void setup_zone_pageset(struct zone *zone);
34113411
DEFINE_MUTEX(zonelists_mutex);
34123412

34133413
/* return values int ....just for stop_machine() */
3414-
static __init_refok int __build_all_zonelists(void *data)
3414+
static int __build_all_zonelists(void *data)
34153415
{
34163416
int nid;
34173417
int cpu;
@@ -3755,7 +3755,7 @@ static void __meminit zone_init_free_lists(struct zone *zone)
37553755
memmap_init_zone((size), (nid), (zone), (start_pfn), MEMMAP_EARLY)
37563756
#endif
37573757

3758-
static int zone_batchsize(struct zone *zone)
3758+
static int __meminit zone_batchsize(struct zone *zone)
37593759
{
37603760
#ifdef CONFIG_MMU
37613761
int batch;
@@ -3837,7 +3837,7 @@ static void setup_pagelist_highmark(struct per_cpu_pageset *p,
38373837
pcp->batch = PAGE_SHIFT * 8;
38383838
}
38393839

3840-
static void setup_zone_pageset(struct zone *zone)
3840+
static void __meminit setup_zone_pageset(struct zone *zone)
38413841
{
38423842
int cpu;
38433843

@@ -3910,33 +3910,6 @@ int zone_wait_table_init(struct zone *zone, unsigned long zone_size_pages)
39103910
return 0;
39113911
}
39123912

3913-
static int __zone_pcp_update(void *data)
3914-
{
3915-
struct zone *zone = data;
3916-
int cpu;
3917-
unsigned long batch = zone_batchsize(zone), flags;
3918-
3919-
for_each_possible_cpu(cpu) {
3920-
struct per_cpu_pageset *pset;
3921-
struct per_cpu_pages *pcp;
3922-
3923-
pset = per_cpu_ptr(zone->pageset, cpu);
3924-
pcp = &pset->pcp;
3925-
3926-
local_irq_save(flags);
3927-
if (pcp->count > 0)
3928-
free_pcppages_bulk(zone, pcp->count, pcp);
3929-
setup_pageset(pset, batch);
3930-
local_irq_restore(flags);
3931-
}
3932-
return 0;
3933-
}
3934-
3935-
void zone_pcp_update(struct zone *zone)
3936-
{
3937-
stop_machine(__zone_pcp_update, zone, NULL);
3938-
}
3939-
39403913
static __meminit void zone_pcp_init(struct zone *zone)
39413914
{
39423915
/*
@@ -3952,7 +3925,7 @@ static __meminit void zone_pcp_init(struct zone *zone)
39523925
zone_batchsize(zone));
39533926
}
39543927

3955-
__meminit int init_currently_empty_zone(struct zone *zone,
3928+
int __meminit init_currently_empty_zone(struct zone *zone,
39563929
unsigned long zone_start_pfn,
39573930
unsigned long size,
39583931
enum memmap_context context)
@@ -4765,7 +4738,7 @@ static void __init find_zone_movable_pfns_for_nodes(void)
47654738
}
47664739

47674740
/* Any regular memory on that node ? */
4768-
static void check_for_regular_memory(pg_data_t *pgdat)
4741+
static void __init check_for_regular_memory(pg_data_t *pgdat)
47694742
{
47704743
#ifdef CONFIG_HIGHMEM
47714744
enum zone_type zone_type;
@@ -5893,6 +5866,35 @@ void free_contig_range(unsigned long pfn, unsigned nr_pages)
58935866
}
58945867
#endif
58955868

5869+
#ifdef CONFIG_MEMORY_HOTPLUG
5870+
static int __meminit __zone_pcp_update(void *data)
5871+
{
5872+
struct zone *zone = data;
5873+
int cpu;
5874+
unsigned long batch = zone_batchsize(zone), flags;
5875+
5876+
for_each_possible_cpu(cpu) {
5877+
struct per_cpu_pageset *pset;
5878+
struct per_cpu_pages *pcp;
5879+
5880+
pset = per_cpu_ptr(zone->pageset, cpu);
5881+
pcp = &pset->pcp;
5882+
5883+
local_irq_save(flags);
5884+
if (pcp->count > 0)
5885+
free_pcppages_bulk(zone, pcp->count, pcp);
5886+
setup_pageset(pset, batch);
5887+
local_irq_restore(flags);
5888+
}
5889+
return 0;
5890+
}
5891+
5892+
void __meminit zone_pcp_update(struct zone *zone)
5893+
{
5894+
stop_machine(__zone_pcp_update, zone, NULL);
5895+
}
5896+
#endif
5897+
58965898
#ifdef CONFIG_MEMORY_HOTREMOVE
58975899
void zone_pcp_reset(struct zone *zone)
58985900
{

0 commit comments

Comments
 (0)