|
From: Kenn H. <ke...@us...> - 2004-07-29 00:29:04
|
Update of /cvsroot/linux-vax/kernel-2.5/arch/vax/mm In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31645/arch/vax/mm Modified Files: init.c Log Message: The handling of struct page's refcount changes in 2.6.7. Adapt to this change, and make free_initmem() look more like Alpha's. Index: init.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/arch/vax/mm/init.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- init.c 28 Aug 2003 22:48:53 -0000 1.14 +++ init.c 29 Jul 2004 00:28:54 -0000 1.15 @@ -129,20 +129,25 @@ return; } +static void free_reserved_mem(void *start, void *end) +{ + void *__start = start; + for (; __start < end; __start += PAGE_SIZE) { + ClearPageReserved(virt_to_page(__start)); + set_page_count(virt_to_page(__start), 1); + free_page((long)__start); + totalram_pages++; + } +} + void free_initmem(void) { - extern char __init_begin, __init_end; - unsigned long addr; + extern char __init_begin, __init_end; - addr = (unsigned long) (&__init_begin); - for (; addr < (unsigned long) (&__init_end); addr += PAGE_SIZE) { - mem_map[MAP_NR(addr)].flags &= ~(1 << PG_reserved); - atomic_set(&mem_map[MAP_NR(addr)].count, 1); - kill_page(addr); - free_page(addr); - } - printk("Freeing unused kernel memory: %dk freed\n", - (&__init_end - &__init_begin) >> 10); + free_reserved_mem(&__init_begin, &__init_end); + + printk("Freeing unused kernel memory: %dk freed\n", + (&__init_end - &__init_begin) >> 10); } void @@ -164,7 +169,7 @@ else if (!page_count(mem_map+i)) free++; else - shared += atomic_read(&mem_map[i].count) - 1; + shared += page_count(mem_map + i) - 1; } printk("%ld pages of RAM\n",total); printk("%ld free pages\n",free); |