Index: linux-2.6/mm/page_alloc.c =================================================================== --- linux-2.6.orig/mm/page_alloc.c 2005-04-09 22:35:44.000000000 +1000 +++ linux-2.6/mm/page_alloc.c 2005-04-09 22:43:58.000000000 +1000 @@ -70,7 +70,7 @@ struct zone *zone_table[1 << (ZONES_SHIF EXPORT_SYMBOL(zone_table); struct zone_pagesets { - struct per_cpu_pageset p[TOTAL_ZONES]; + struct per_cpu_pageset *p[TOTAL_ZONES]; }; #define this_zone_pagesets() (&__get_cpu_var(zone_pagesets)) @@ -80,7 +80,7 @@ struct zone_pagesets { (NODEZONE((zone)->zone_pgdat->node_id, zone_idx(zone))) #define zone_pageset(zp, zone) \ - (&zp->p[zone_pagesets_idx(zone)]) + (zp->p[zone_pagesets_idx(zone)]) /* * List of pointers to per_cpu_pagesets for each zone. @@ -1579,7 +1579,8 @@ void __init build_percpu_pagelists(void) struct per_cpu_pages *pcp; zp = cpu_zone_pagesets(cpu); - pageset = &zp->p[NODEZONE(nid, j)]; + pageset = alloc_bootmem_node(pgdat, sizeof(*pageset)); + zp->p[NODEZONE(nid, j)] = pageset; pcp = &pageset->pcp[0]; /* hot */ pcp->count = 0;