|
@@ -60,8 +60,11 @@ long nr_swap_pages;
|
|
* NORMAL allocation will leave 784M/256 of ram reserved in the ZONE_DMA
|
|
* NORMAL allocation will leave 784M/256 of ram reserved in the ZONE_DMA
|
|
* HIGHMEM allocation will leave 224M/32 of ram reserved in ZONE_NORMAL
|
|
* HIGHMEM allocation will leave 224M/32 of ram reserved in ZONE_NORMAL
|
|
* HIGHMEM allocation will (224M+784M)/256 of ram reserved in ZONE_DMA
|
|
* HIGHMEM allocation will (224M+784M)/256 of ram reserved in ZONE_DMA
|
|
|
|
+ *
|
|
|
|
+ * TBD: should special case ZONE_DMA32 machines here - in those we normally
|
|
|
|
+ * don't need any ZONE_NORMAL reservation
|
|
*/
|
|
*/
|
|
-int sysctl_lowmem_reserve_ratio[MAX_NR_ZONES-1] = { 256, 32 };
|
|
|
|
|
|
+int sysctl_lowmem_reserve_ratio[MAX_NR_ZONES-1] = { 256, 256, 32 };
|
|
|
|
|
|
EXPORT_SYMBOL(totalram_pages);
|
|
EXPORT_SYMBOL(totalram_pages);
|
|
EXPORT_SYMBOL(nr_swap_pages);
|
|
EXPORT_SYMBOL(nr_swap_pages);
|
|
@@ -73,7 +76,7 @@ EXPORT_SYMBOL(nr_swap_pages);
|
|
struct zone *zone_table[1 << ZONETABLE_SHIFT] __read_mostly;
|
|
struct zone *zone_table[1 << ZONETABLE_SHIFT] __read_mostly;
|
|
EXPORT_SYMBOL(zone_table);
|
|
EXPORT_SYMBOL(zone_table);
|
|
|
|
|
|
-static char *zone_names[MAX_NR_ZONES] = { "DMA", "Normal", "HighMem" };
|
|
|
|
|
|
+static char *zone_names[MAX_NR_ZONES] = { "DMA", "DMA32", "Normal", "HighMem" };
|
|
int min_free_kbytes = 1024;
|
|
int min_free_kbytes = 1024;
|
|
|
|
|
|
unsigned long __initdata nr_kernel_pages;
|
|
unsigned long __initdata nr_kernel_pages;
|
|
@@ -1442,6 +1445,10 @@ static int __init build_zonelists_node(pg_data_t *pgdat, struct zonelist *zoneli
|
|
zone = pgdat->node_zones + ZONE_NORMAL;
|
|
zone = pgdat->node_zones + ZONE_NORMAL;
|
|
if (zone->present_pages)
|
|
if (zone->present_pages)
|
|
zonelist->zones[j++] = zone;
|
|
zonelist->zones[j++] = zone;
|
|
|
|
+ case ZONE_DMA32:
|
|
|
|
+ zone = pgdat->node_zones + ZONE_DMA32;
|
|
|
|
+ if (zone->present_pages)
|
|
|
|
+ zonelist->zones[j++] = zone;
|
|
case ZONE_DMA:
|
|
case ZONE_DMA:
|
|
zone = pgdat->node_zones + ZONE_DMA;
|
|
zone = pgdat->node_zones + ZONE_DMA;
|
|
if (zone->present_pages)
|
|
if (zone->present_pages)
|
|
@@ -1456,6 +1463,8 @@ static inline int highest_zone(int zone_bits)
|
|
int res = ZONE_NORMAL;
|
|
int res = ZONE_NORMAL;
|
|
if (zone_bits & (__force int)__GFP_HIGHMEM)
|
|
if (zone_bits & (__force int)__GFP_HIGHMEM)
|
|
res = ZONE_HIGHMEM;
|
|
res = ZONE_HIGHMEM;
|
|
|
|
+ if (zone_bits & (__force int)__GFP_DMA32)
|
|
|
|
+ res = ZONE_DMA32;
|
|
if (zone_bits & (__force int)__GFP_DMA)
|
|
if (zone_bits & (__force int)__GFP_DMA)
|
|
res = ZONE_DMA;
|
|
res = ZONE_DMA;
|
|
return res;
|
|
return res;
|
|
@@ -1976,7 +1985,7 @@ static void __init free_area_init_core(struct pglist_data *pgdat,
|
|
if (zholes_size)
|
|
if (zholes_size)
|
|
realsize -= zholes_size[j];
|
|
realsize -= zholes_size[j];
|
|
|
|
|
|
- if (j == ZONE_DMA || j == ZONE_NORMAL)
|
|
|
|
|
|
+ if (j < ZONE_HIGHMEM)
|
|
nr_kernel_pages += realsize;
|
|
nr_kernel_pages += realsize;
|
|
nr_all_pages += realsize;
|
|
nr_all_pages += realsize;
|
|
|
|
|