|
@@ -126,9 +126,11 @@ void __init setup_node_zones(int nodeid)
|
|
{
|
|
{
|
|
unsigned long start_pfn, end_pfn;
|
|
unsigned long start_pfn, end_pfn;
|
|
unsigned long zones[MAX_NR_ZONES];
|
|
unsigned long zones[MAX_NR_ZONES];
|
|
|
|
+ unsigned long holes[MAX_NR_ZONES];
|
|
unsigned long dma_end_pfn;
|
|
unsigned long dma_end_pfn;
|
|
|
|
|
|
memset(zones, 0, sizeof(unsigned long) * MAX_NR_ZONES);
|
|
memset(zones, 0, sizeof(unsigned long) * MAX_NR_ZONES);
|
|
|
|
+ memset(holes, 0, sizeof(unsigned long) * MAX_NR_ZONES);
|
|
|
|
|
|
start_pfn = node_start_pfn(nodeid);
|
|
start_pfn = node_start_pfn(nodeid);
|
|
end_pfn = node_end_pfn(nodeid);
|
|
end_pfn = node_end_pfn(nodeid);
|
|
@@ -139,13 +141,17 @@ void __init setup_node_zones(int nodeid)
|
|
dma_end_pfn = __pa(MAX_DMA_ADDRESS) >> PAGE_SHIFT;
|
|
dma_end_pfn = __pa(MAX_DMA_ADDRESS) >> PAGE_SHIFT;
|
|
if (start_pfn < dma_end_pfn) {
|
|
if (start_pfn < dma_end_pfn) {
|
|
zones[ZONE_DMA] = dma_end_pfn - start_pfn;
|
|
zones[ZONE_DMA] = dma_end_pfn - start_pfn;
|
|
|
|
+ holes[ZONE_DMA] = e820_hole_size(start_pfn, dma_end_pfn);
|
|
zones[ZONE_NORMAL] = end_pfn - dma_end_pfn;
|
|
zones[ZONE_NORMAL] = end_pfn - dma_end_pfn;
|
|
|
|
+ holes[ZONE_NORMAL] = e820_hole_size(dma_end_pfn, end_pfn);
|
|
|
|
+
|
|
} else {
|
|
} else {
|
|
zones[ZONE_NORMAL] = end_pfn - start_pfn;
|
|
zones[ZONE_NORMAL] = end_pfn - start_pfn;
|
|
|
|
+ holes[ZONE_NORMAL] = e820_hole_size(start_pfn, end_pfn);
|
|
}
|
|
}
|
|
|
|
|
|
free_area_init_node(nodeid, NODE_DATA(nodeid), zones,
|
|
free_area_init_node(nodeid, NODE_DATA(nodeid), zones,
|
|
- start_pfn, NULL);
|
|
|
|
|
|
+ start_pfn, holes);
|
|
}
|
|
}
|
|
|
|
|
|
void __init numa_init_array(void)
|
|
void __init numa_init_array(void)
|