vserver 1.9.3
[linux-2.6.git] / arch / ppc / mm / init.c
index 4628e26..cbed552 100644 (file)
@@ -104,6 +104,7 @@ extern unsigned long sysmap_size;
  * -- Cort
  */
 int __map_without_bats;
+int __map_without_ltlbs;
 
 /* max amount of RAM to use */
 unsigned long __max_memory;
@@ -118,7 +119,7 @@ void show_mem(void)
 
        printk("Mem-info:\n");
        show_free_areas();
-       printk("Free swap:       %6dkB\n",nr_swap_pages<<(PAGE_SHIFT-10));
+       printk("Free swap:       %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10));
        i = max_mapnr;
        while (i-- > 0) {
                total++;
@@ -204,6 +205,10 @@ void MMU_setup(void)
                __map_without_bats = 1;
        }
 
+       if (strstr(cmd_line, "noltlbs")) {
+               __map_without_ltlbs = 1;
+       }
+
        /* Look for mem= option on command line */
        if (strstr(cmd_line, "mem=")) {
                char *p, *q;
@@ -253,6 +258,12 @@ void __init MMU_init(void)
        if (__max_memory && total_memory > __max_memory)
                total_memory = __max_memory;
        total_lowmem = total_memory;
+#ifdef CONFIG_FSL_BOOKE
+       /* Freescale Book-E parts expect lowmem to be mapped by fixed TLB
+        * entries, so we need to adjust lowmem to match the amount we can map
+        * in the fixed entries */
+       adjust_total_lowmem();
+#endif /* CONFIG_FSL_BOOKE */
        if (total_lowmem > __max_low_memory) {
                total_lowmem = __max_low_memory;
 #ifndef CONFIG_HIGHMEM