--- zzzz-none-000/linux-2.6.13.1/mm/page_alloc.c 2005-09-10 02:42:58.000000000 +0000 +++ ohio-7170-487/linux-2.6.13.1/mm/page_alloc.c 2006-12-20 12:37:57.000000000 +0000 @@ -1047,6 +1047,20 @@ EXPORT_SYMBOL(nr_free_pages); +/* <<<< 20060614 =OS= */ +unsigned int nr_min_pages (void) +{ + unsigned int sum = 0; + struct zone * zone; + + for_each_zone(zone) { + sum += zone->pages_min; + } + return sum; +} /* nr_min_pages */ + +EXPORT_SYMBOL(nr_min_pages); + #ifdef CONFIG_NUMA unsigned int nr_free_pages_pgdat(pg_data_t *pgdat) { @@ -1630,7 +1644,7 @@ for (i = 0; i < MAX_NR_ZONES; i++) realtotalpages -= zholes_size[i]; pgdat->node_present_pages = realtotalpages; - printk(KERN_DEBUG "On node %d totalpages: %lu\n", pgdat->node_id, realtotalpages); + printk(KERN_WARNING "On node %d totalpages: %lu\n", pgdat->node_id, realtotalpages); } @@ -1863,6 +1877,8 @@ int cpu, nid = pgdat->node_id; unsigned long zone_start_pfn = pgdat->node_start_pfn; + /*--- printk("[free_area_init_core] (%s, %u) zones_size %x\n", __FILE__, __LINE__, zones_size); ---*/ + pgdat->nr_zones = 0; init_waitqueue_head(&pgdat->kswapd_wait); pgdat->kswapd_max_order = 0; @@ -1872,9 +1888,12 @@ unsigned long size, realsize; unsigned long batch; + /*--- printk("[free_area_init_core] (%s, %u) zone %u\n", __FILE__, __LINE__, i); ---*/ + printk("zone=%lu zone_size[j]=0x%lu\n", j, zones_size[j]); realsize = size = zones_size[j]; if (zholes_size) realsize -= zholes_size[j]; + printk("realsize=%lu\n", realsize); if (j == ZONE_DMA || j == ZONE_NORMAL) nr_kernel_pages += realsize; @@ -1901,8 +1920,7 @@ setup_pageset(zone_pcp(zone,cpu), batch); #endif } - printk(KERN_DEBUG " %s zone: %lu pages, LIFO batch:%lu\n", - zone_names[j], realsize, batch); + printk(KERN_WARNING " %s zone: %lu pages, LIFO batch:%lu\n", zone_names[j], realsize, batch); INIT_LIST_HEAD(&zone->active_list); INIT_LIST_HEAD(&zone->inactive_list); zone->nr_scan_active = 0; @@ -1951,13 +1969,39 @@ #ifdef CONFIG_FLAT_NODE_MEM_MAP /* ia64 gets its own node_mem_map, before this, without bootmem */ if (!pgdat->node_mem_map) { - unsigned long size; + unsigned long size, org_size; struct page *map; - size = (pgdat->node_spanned_pages + 1) * sizeof(struct page); + org_size = size = (pgdat->node_spanned_pages + 1) * sizeof(struct page); +#if defined(CONFIG_MIPS_OHIO) + printk("[alloc_node_mem_map] reduce size from %lu Bytes to ", size); + size -= (CONFIG_MIPS_OHIO_PHY_MEMSTART >> PAGE_SHIFT) * sizeof(struct page); + printk(" %lu Bytes\n", size); +#elif defined(CONFIG_MIPS_AR7) /*--- #if defined(CONFIG_MIPS_OHIO) ---*/ + printk("[alloc_node_mem_map] reduce size from %lu Bytes to ", size); + size -= (CONFIG_MIPS_AR7_PHY_MEMSTART >> PAGE_SHIFT) * sizeof(struct page); + printk(" %lu Bytes\n", size); +#elif defined(CONFIG_MIPS_UR8) /*--- #if defined(CONFIG_MIPS_OHIO) und andere ---*/ + printk("[alloc_node_mem_map] reduce size from %lu Bytes to ", size); + size -= (CONFIG_MIPS_UR8_PHY_MEMSTART >> PAGE_SHIFT) * sizeof(struct page); + printk(" %lu Bytes\n", size); +#endif /*--- #elif defined(CONFIG_MIPS_UR8) ---*/ /*--- #if defined(CONFIG_MIPS_OHIO) ---*/ map = alloc_remap(pgdat->node_id, size); if (!map) map = alloc_bootmem_node(pgdat, size); +#if defined(CONFIG_MIPS_OHIO) + printk("[alloc_node_mem_map]: (org) sizeof(mem_map) = %lu mem_map=0x%x-0x%lx\n", size, (unsigned int)map, (unsigned int)map + size); + map -= (CONFIG_MIPS_OHIO_PHY_MEMSTART >> PAGE_SHIFT); + printk("[alloc_node_mem_map]: sizeof(mem_map) = %lu mem_map=0x%x-0x%lx\n", org_size, (unsigned int)map, (unsigned int)map + org_size); +#elif defined(CONFIG_MIPS_AR7) /*--- #if defined(CONFIG_MIPS_AR7) ---*/ + printk("[alloc_node_mem_map]: (org) sizeof(mem_map) = %lu mem_map=0x%x-0x%lx\n", size, (unsigned int)map, (unsigned int)map + size); + map -= (CONFIG_MIPS_AR7_PHY_MEMSTART >> PAGE_SHIFT); + printk("[alloc_node_mem_map]: sizeof(mem_map) = %lu mem_map=0x%x-0x%lx\n", org_size, (unsigned int)map, (unsigned int)map + org_size); +#elif defined(CONFIG_MIPS_UR8) /*--- #if defined(CONFIG_MIPS_OHIO) ---*/ + printk("[alloc_node_mem_map]: (org) sizeof(mem_map) = %lu mem_map=0x%x-0x%lx\n", size, (unsigned int)map, (unsigned int)map + size); + map -= (CONFIG_MIPS_UR8_PHY_MEMSTART >> PAGE_SHIFT); + printk("[alloc_node_mem_map]: sizeof(mem_map) = %lu mem_map=0x%x-0x%lx\n", org_size, (unsigned int)map, (unsigned int)map + org_size); +#endif /*--- #elif defined(CONFIG_MIPS_UR8) ---*/ /*--- #if defined(CONFIG_MIPS_OHIO) ---*/ pgdat->node_mem_map = map; } #ifdef CONFIG_FLATMEM @@ -1974,13 +2018,20 @@ unsigned long *zones_size, unsigned long node_start_pfn, unsigned long *zholes_size) { + /*--- printk("[free_area_init_node] (%s, %u)\n", __FILE__, __LINE__); ---*/ pgdat->node_id = nid; + /*--- printk("[free_area_init_node] (%s, %u)\n", __FILE__, __LINE__); ---*/ pgdat->node_start_pfn = node_start_pfn; + /*--- printk("[free_area_init_node] (%s, %u)\n", __FILE__, __LINE__); ---*/ calculate_zone_totalpages(pgdat, zones_size, zholes_size); + /*--- printk("[free_area_init_node] (%s, %u)\n", __FILE__, __LINE__); ---*/ alloc_node_mem_map(pgdat); + /*--- printk("[free_area_init_node] (%s, %u)\n", __FILE__, __LINE__); ---*/ + /*--- printk("[free_area_init_node] zones_size 0x%x zholed_size 0x%x\n", zones_size, zholes_size); ---*/ free_area_init_core(pgdat, zones_size, zholes_size); + /*--- printk("[free_area_init_node] (%s, %u)\n", __FILE__, __LINE__); ---*/ } #ifndef CONFIG_NEED_MULTIPLE_NODES @@ -1992,8 +2043,22 @@ void __init free_area_init(unsigned long *zones_size) { +#if defined(CONFIG_MIPS_OHIO) + static unsigned long hzones_size[MAX_NR_ZONES] = { CONFIG_MIPS_OHIO_PHY_MEMSTART >> PAGE_SHIFT, 0, 0 }; + free_area_init_node(0, NODE_DATA(0), zones_size, + __pa(PAGE_OFFSET) >> PAGE_SHIFT, hzones_size); +#elif defined(CONFIG_MIPS_AR7) /*--- #if defined(CONFIG_MIPS_OHIO) ---*/ + static unsigned long hzones_size[MAX_NR_ZONES] = { CONFIG_MIPS_AR7_PHY_MEMSTART >> PAGE_SHIFT, 0, 0 }; + free_area_init_node(0, NODE_DATA(0), zones_size, + __pa(PAGE_OFFSET) >> PAGE_SHIFT, hzones_size); +#elif defined(CONFIG_MIPS_UR8) /*--- #if defined(CONFIG_MIPS_OHIO) und andere ---*/ + static unsigned long hzones_size[MAX_NR_ZONES] = { CONFIG_MIPS_UR8_PHY_MEMSTART >> PAGE_SHIFT, 0, 0 }; + free_area_init_node(0, NODE_DATA(0), zones_size, + __pa(PAGE_OFFSET) >> PAGE_SHIFT, hzones_size); +#else /*--- #elif defined(CONFIG_MIPS_UR8) ---*/ /*--- #if defined(CONFIG_MIPS_OHIO) ---*/ free_area_init_node(0, NODE_DATA(0), zones_size, __pa(PAGE_OFFSET) >> PAGE_SHIFT, NULL); +#endif /*--- #else ---*/ /*--- #ifdef CONFIG_MIPS_OHIO ---*/ } #ifdef CONFIG_PROC_FS @@ -2382,6 +2447,19 @@ */ zone->pages_low = (zone->pages_min * 5) / 4; zone->pages_high = (zone->pages_min * 6) / 4; +#if 0 + { + int i; + printk("*********** [setup_per_zone_pages_min] ****************\n"); + printk("zone->name %s present_pages %u pages_low %u pages_high %u pages_min %u\n", + zone->name, + zone->present_pages, + zone->pages_low, zone->pages_high, zone->pages_min); + for(i = 0 ; i < MAX_NR_ZONES ; i++) + printk("zone->lowmem_reserve[%u] = %u\n", i, zone->lowmem_reserve[i]); + printk("*********** [setup_per_zone_pages_min] ****************\n"); + } +#endif spin_unlock_irqrestore(&zone->lru_lock, flags); } }