powerpc: Improve (in|out)_[bl]eXX() asm code
[sfrench/cifs-2.6.git] / arch / ppc / mm / 4xx_mmu.c
index b7bcbc232f394cfc891c255716af34ff3657b8c8..ea785dbaac7cec8441925edd6e0be9688406759d 100644 (file)
@@ -21,7 +21,6 @@
  *
  */
 
-#include <linux/config.h>
 #include <linux/signal.h>
 #include <linux/sched.h>
 #include <linux/kernel.h>
@@ -100,42 +99,37 @@ unsigned long __init mmu_mapin_ram(void)
 
        v = KERNELBASE;
        p = PPC_MEMSTART;
-       s = 0;
+       s = total_lowmem;
 
-       if (__map_without_ltlbs) {
-               return s;
-       }
+       if (__map_without_ltlbs)
+               return 0;
 
-       while (s <= (total_lowmem - LARGE_PAGE_SIZE_16M)) {
+       while (s >= LARGE_PAGE_SIZE_16M) {
                pmd_t *pmdp;
                unsigned long val = p | _PMD_SIZE_16M | _PAGE_HWEXEC | _PAGE_HWWRITE;
 
-               spin_lock(&init_mm.page_table_lock);
                pmdp = pmd_offset(pgd_offset_k(v), v);
                pmd_val(*pmdp++) = val;
                pmd_val(*pmdp++) = val;
                pmd_val(*pmdp++) = val;
                pmd_val(*pmdp++) = val;
-               spin_unlock(&init_mm.page_table_lock);
 
                v += LARGE_PAGE_SIZE_16M;
                p += LARGE_PAGE_SIZE_16M;
-               s += LARGE_PAGE_SIZE_16M;
+               s -= LARGE_PAGE_SIZE_16M;
        }
 
-       while (s <= (total_lowmem - LARGE_PAGE_SIZE_4M)) {
+       while (s >= LARGE_PAGE_SIZE_4M) {
                pmd_t *pmdp;
                unsigned long val = p | _PMD_SIZE_4M | _PAGE_HWEXEC | _PAGE_HWWRITE;
 
-               spin_lock(&init_mm.page_table_lock);
                pmdp = pmd_offset(pgd_offset_k(v), v);
                pmd_val(*pmdp) = val;
-               spin_unlock(&init_mm.page_table_lock);
 
                v += LARGE_PAGE_SIZE_4M;
                p += LARGE_PAGE_SIZE_4M;
-               s += LARGE_PAGE_SIZE_4M;
+               s -= LARGE_PAGE_SIZE_4M;
        }
 
-       return s;
+       return total_lowmem - s;
 }