Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6:
lmb: Fix reserved region handling in lmb_enforce_memory_limit().
sparc64: Fix cmdline_memory_size handling bugs.
sparc64: Fix overshoot in nid_range().

+24 -8
+22 -8
arch/sparc64/mm/init.c
··· 796 start += PAGE_SIZE; 797 } 798 799 return start; 800 } 801 #else ··· 1726 1727 find_ramdisk(phys_base); 1728 1729 - if (cmdline_memory_size) 1730 - lmb_enforce_memory_limit(phys_base + cmdline_memory_size); 1731 1732 lmb_analyze(); 1733 lmb_dump_all(); ··· 1963 void free_initmem(void) 1964 { 1965 unsigned long addr, initend; 1966 1967 /* 1968 * The init section is aligned to 8k in vmlinux.lds. Page align for >8k pagesizes. ··· 1986 ((unsigned long) __va(kern_base)) - 1987 ((unsigned long) KERNBASE)); 1988 memset((void *)addr, POISON_FREE_INITMEM, PAGE_SIZE); 1989 - p = virt_to_page(page); 1990 1991 - ClearPageReserved(p); 1992 - init_page_count(p); 1993 - __free_page(p); 1994 - num_physpages++; 1995 - totalram_pages++; 1996 } 1997 } 1998
··· 796 start += PAGE_SIZE; 797 } 798 799 + if (start > end) 800 + start = end; 801 + 802 return start; 803 } 804 #else ··· 1723 1724 find_ramdisk(phys_base); 1725 1726 + lmb_enforce_memory_limit(cmdline_memory_size); 1727 1728 lmb_analyze(); 1729 lmb_dump_all(); ··· 1961 void free_initmem(void) 1962 { 1963 unsigned long addr, initend; 1964 + int do_free = 1; 1965 + 1966 + /* If the physical memory maps were trimmed by kernel command 1967 + * line options, don't even try freeing this initmem stuff up. 1968 + * The kernel image could have been in the trimmed out region 1969 + * and if so the freeing below will free invalid page structs. 1970 + */ 1971 + if (cmdline_memory_size) 1972 + do_free = 0; 1973 1974 /* 1975 * The init section is aligned to 8k in vmlinux.lds. Page align for >8k pagesizes. ··· 1975 ((unsigned long) __va(kern_base)) - 1976 ((unsigned long) KERNBASE)); 1977 memset((void *)addr, POISON_FREE_INITMEM, PAGE_SIZE); 1978 1979 + if (do_free) { 1980 + p = virt_to_page(page); 1981 + 1982 + ClearPageReserved(p); 1983 + init_page_count(p); 1984 + __free_page(p); 1985 + num_physpages++; 1986 + totalram_pages++; 1987 + } 1988 } 1989 } 1990
+2
lib/lmb.c
··· 462 if (lmb.memory.region[0].size < lmb.rmo_size) 463 lmb.rmo_size = lmb.memory.region[0].size; 464 465 /* And truncate any reserves above the limit also. */ 466 for (i = 0; i < lmb.reserved.cnt; i++) { 467 p = &lmb.reserved.region[i];
··· 462 if (lmb.memory.region[0].size < lmb.rmo_size) 463 lmb.rmo_size = lmb.memory.region[0].size; 464 465 + memory_limit = lmb_end_of_DRAM(); 466 + 467 /* And truncate any reserves above the limit also. */ 468 for (i = 0; i < lmb.reserved.cnt; i++) { 469 p = &lmb.reserved.region[i];