patch-2.4.0-test6 linux/mm/page_alloc.c

Next file: linux/mm/page_io.c
Previous file: linux/mm/numa.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test5/linux/mm/page_alloc.c linux/mm/page_alloc.c
@@ -29,7 +29,7 @@
 pg_data_t *pgdat_list;
 
 static char *zone_names[MAX_NR_ZONES] = { "DMA", "Normal", "HighMem" };
-static int zone_balance_ratio[MAX_NR_ZONES] = { 128, 128, 128, };
+static int zone_balance_ratio[MAX_NR_ZONES] = { 32, 128, 128, };
 static int zone_balance_min[MAX_NR_ZONES] = { 10 , 10, 10, };
 static int zone_balance_max[MAX_NR_ZONES] = { 255 , 255, 255, };
 
@@ -86,7 +86,7 @@
 		BUG();
 	if (page->mapping)
 		BUG();
-	if (page-mem_map >= max_mapnr)
+	if (!VALID_PAGE(page))
 		BUG();
 	if (PageSwapCache(page))
 		BUG();
@@ -326,7 +326,7 @@
 	page = alloc_pages(gfp_mask, order);
 	if (!page)
 		return 0;
-	return page_address(page);
+	return (unsigned long) page_address(page);
 }
 
 unsigned long get_zeroed_page(int gfp_mask)
@@ -335,9 +335,9 @@
 
 	page = alloc_pages(gfp_mask, 0);
 	if (page) {
-		unsigned long address = page_address(page);
-		clear_page((void *)address);
-		return address;
+		void *address = page_address(page);
+		clear_page(address);
+		return (unsigned long) address;
 	}
 	return 0;
 }
@@ -350,14 +350,14 @@
 
 void free_pages(unsigned long addr, unsigned long order)
 {
-	unsigned long map_nr;
+	struct page *fpage;
 
 #ifdef CONFIG_DISCONTIGMEM
 	if (addr == 0) return;
 #endif
-	map_nr = MAP_NR(addr);
-	if (map_nr < max_mapnr)
-		__free_pages(mem_map + map_nr, order);
+	fpage = virt_to_page(addr);
+	if (VALID_PAGE(fpage))
+		__free_pages(fpage, order);
 }
 
 /*
@@ -385,7 +385,7 @@
 	zone_t *zone;
 	int i;
 
-	sum = nr_lru_pages;
+	sum = nr_lru_pages / 3;
 	for (i = 0; i < NUMNODES; i++)
 		for (zone = NODE_DATA(i)->node_zones; zone <= NODE_DATA(i)->node_zones+ZONE_NORMAL; zone++)
 			sum += zone->free_pages;
@@ -430,7 +430,16 @@
 		zone_t *zone = NODE_DATA(nid)->node_zones + type;
  		unsigned long nr, total, flags;
 
-		printk("  %s: ", zone->name);
+		printk("  %c%d%d %s: ",
+		       (zone->free_pages > zone->pages_low
+			? (zone->free_pages > zone->pages_high
+			   ? ' '
+			   : 'H')
+			: (zone->free_pages > zone->pages_min
+			   ? 'M'
+			   : 'L')),
+		       zone->zone_wake_kswapd, zone->low_on_memory,
+		       zone->name);
 
 		total = 0;
 		if (zone->size) {
@@ -630,7 +639,7 @@
 			struct page *page = mem_map + offset + i;
 			page->zone = zone;
 			if (j != ZONE_HIGHMEM) {
-				page->virtual = (unsigned long)(__va(zone_start_paddr));
+				page->virtual = __va(zone_start_paddr);
 				zone_start_paddr += PAGE_SIZE;
 			}
 		}

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)