linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / arch / ppc / mm / pgtable.c
index 4adc48c..6ea9185 100644 (file)
@@ -66,7 +66,6 @@ void setbat(int index, unsigned long virt, unsigned long phys,
 
 #ifdef HAVE_TLBCAM
 extern unsigned int tlbcam_index;
-extern unsigned int num_tlbcam_entries;
 extern unsigned long v_mapped_by_tlbcam(unsigned long va);
 extern unsigned long p_mapped_by_tlbcam(unsigned long pa);
 #else /* !HAVE_TLBCAM */
@@ -74,7 +73,7 @@ extern unsigned long p_mapped_by_tlbcam(unsigned long pa);
 #define p_mapped_by_tlbcam(x)  (0UL)
 #endif /* HAVE_TLBCAM */
 
-#ifdef CONFIG_44x
+#ifdef CONFIG_PTE_64BIT
 /* 44x uses an 8kB pgdir because it has 8-byte Linux PTEs. */
 #define PGDIR_ORDER    1
 #else
@@ -85,8 +84,7 @@ pgd_t *pgd_alloc(struct mm_struct *mm)
 {
        pgd_t *ret;
 
-       if ((ret = (pgd_t *)__get_free_pages(GFP_KERNEL, PGDIR_ORDER)) != NULL)
-               clear_pages(ret, PGDIR_ORDER);
+       ret = (pgd_t *)__get_free_pages(GFP_KERNEL|__GFP_ZERO, PGDIR_ORDER);
        return ret;
 }
 
@@ -102,16 +100,12 @@ pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
        extern void *early_get_page(void);
 
        if (mem_init_done) {
-               pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT);
-               if (pte) {
-                       struct page *ptepage = virt_to_page(pte);
-                       ptepage->mapping = (void *) mm;
-                       ptepage->index = address & PMD_MASK;
-               }
-       } else
+               pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
+       } else {
                pte = (pte_t *)early_get_page();
-       if (pte)
-               clear_page(pte);
+               if (pte)
+                       clear_page(pte);
+       }
        return pte;
 }
 
@@ -120,17 +114,14 @@ struct page *pte_alloc_one(struct mm_struct *mm, unsigned long address)
        struct page *ptepage;
 
 #ifdef CONFIG_HIGHPTE
-       int flags = GFP_KERNEL | __GFP_HIGHMEM | __GFP_REPEAT;
+       gfp_t flags = GFP_KERNEL | __GFP_HIGHMEM | __GFP_REPEAT;
 #else
-       int flags = GFP_KERNEL | __GFP_REPEAT;
+       gfp_t flags = GFP_KERNEL | __GFP_REPEAT;
 #endif
 
        ptepage = alloc_pages(flags, 0);
-       if (ptepage) {
-               ptepage->mapping = (void *) mm;
-               ptepage->index = address & PMD_MASK;
+       if (ptepage)
                clear_highpage(ptepage);
-       }
        return ptepage;
 }
 
@@ -139,7 +130,6 @@ void pte_free_kernel(pte_t *pte)
 #ifdef CONFIG_SMP
        hash_page_sync();
 #endif
-       virt_to_page(pte)->mapping = NULL;
        free_page((unsigned long)pte);
 }
 
@@ -148,17 +138,16 @@ void pte_free(struct page *ptepage)
 #ifdef CONFIG_SMP
        hash_page_sync();
 #endif
-       ptepage->mapping = NULL;
        __free_page(ptepage);
 }
 
-#ifndef CONFIG_44x
+#ifndef CONFIG_PHYS_64BIT
 void __iomem *
 ioremap(phys_addr_t addr, unsigned long size)
 {
        return __ioremap(addr, size, _PAGE_NO_CACHE);
 }
-#else /* CONFIG_44x */
+#else /* CONFIG_PHYS_64BIT */
 void __iomem *
 ioremap64(unsigned long long addr, unsigned long size)
 {
@@ -172,7 +161,7 @@ ioremap(phys_addr_t addr, unsigned long size)
 
        return ioremap64(addr64, size);
 }
-#endif /* CONFIG_44x */
+#endif /* CONFIG_PHYS_64BIT */
 
 void __iomem *
 __ioremap(phys_addr_t addr, unsigned long size, unsigned long flags)
@@ -203,7 +192,7 @@ __ioremap(phys_addr_t addr, unsigned long size, unsigned long flags)
         */
        if ( mem_init_done && (p < virt_to_phys(high_memory)) )
        {
-               printk("__ioremap(): phys addr "PTE_FMT" is RAM lr %p\n", p,
+               printk("__ioremap(): phys addr "PHYS_FMT" is RAM lr %p\n", p,
                       __builtin_return_address(0));
                return NULL;
        }
@@ -291,18 +280,16 @@ map_page(unsigned long va, phys_addr_t pa, int flags)
        pte_t *pg;
        int err = -ENOMEM;
 
-       spin_lock(&init_mm.page_table_lock);
        /* Use upper 10 bits of VA to index the first level map */
        pd = pmd_offset(pgd_offset_k(va), va);
        /* Use middle 10 bits of VA to index the second-level map */
-       pg = pte_alloc_kernel(&init_mm, pd, va);
+       pg = pte_alloc_kernel(pd, va);
        if (pg != 0) {
                err = 0;
-               set_pte(pg, pfn_pte(pa >> PAGE_SHIFT, __pgprot(flags)));
+               set_pte_at(&init_mm, va, pg, pfn_pte(pa >> PAGE_SHIFT, __pgprot(flags)));
                if (mem_init_done)
                        flush_HPTE(0, va, pmd_val(*pd));
        }
-       spin_unlock(&init_mm.page_table_lock);
        return err;
 }