On Wed, Jul 18, 2012 at 02:38:10PM -0700, Andrew Morton wrote: > On Wed, 18 Jul 2012 10:22:00 +0900 > Minchan Kim <minchan@xxxxxxxxxx> wrote: > > > > > > > Is this really necessary? Does the zone start out all-zeroes? If not, can we > > > make it do so? > > > > Good point. > > It can remove zap_zone_vm_stats and zone->flags = 0, too. > > More important thing is that we could remove adding code to initialize > > zero whenever we add new field to zone. So I look at the code. > > > > In summary, IMHO, all is already initialie zero out but we need double > > check in mips. > > > > Well, this is hardly a performance-critical path. So rather than > groveling around ensuring that each and every architectures does the > right thing, would it not be better to put a single memset() into core > MM if there is an appropriate place? I think most good place is free_area_init_node but at a glance, bootmem_data is set up eariler than free_area_init_node so shouldn't we keep that pointer still? diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 32985dd..1e7ca80 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -4366,9 +4366,7 @@ static void __paginginit free_area_init_core(struct pglist_data *pgdat, int ret; pgdat_resize_init(pgdat); - pgdat->nr_zones = 0; init_waitqueue_head(&pgdat->kswapd_wait); - pgdat->kswapd_max_order = 0; pgdat_page_cgroup_init(pgdat); for (j = 0; j < MAX_NR_ZONES; j++) { @@ -4429,11 +4427,6 @@ static void __paginginit free_area_init_core(struct pglist_data *pgdat, zone_pcp_init(zone); lruvec_init(&zone->lruvec, zone); - zap_zone_vm_stats(zone); - zone->flags = 0; -#ifdef CONFIG_MEMORY_ISOLATION - zone->nr_pageblock_isolate = 0; -#endif if (!size) continue; @@ -4495,7 +4488,15 @@ void __paginginit free_area_init_node(int nid, unsigned long *zones_size, unsigned long node_start_pfn, unsigned long *zholes_size) { pg_data_t *pgdat = NODE_DATA(nid); - + /* We guarantees pg_data_t starts out all-zeroes except bdata */ +#ifndef CONFIG_NO_BOOTMEM + struct bootmem_data *bdata; + bdata = pgdat->bdata; +#endif + memset(pgdat, 0, sizeof(pg_data_t)); +#ifndef CONFIG_NO_BOOTMEM + pgdat->bdata = bdata; +#endif pgdat->node_id = nid; pgdat->node_start_pfn = node_start_pfn; calculate_node_totalpages(pgdat, zones_size, zholes_size); > > -- > To unsubscribe, send a message with 'unsubscribe linux-mm' in > the body to majordomo@xxxxxxxxx. For more info on Linux MM, > see: http://www.linux-mm.org/ . > Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a> -- Kind regards, Minchan Kim -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>