
From: Andi Kleen <ak@suse.de>

m32r		converted

Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/arch/m32r/mm/init.c            |   13 +++++++++++++
 25-akpm/arch/m32r/mm/ioremap.c         |    2 +-
 25-akpm/include/asm-m32r/mmu_context.h |    4 ++--
 25-akpm/include/asm-m32r/page.h        |    2 ++
 25-akpm/include/asm-m32r/pgalloc.h     |   15 ++-------------
 25-akpm/include/asm-m32r/pgtable.h     |    9 ++++-----
 6 files changed, 24 insertions(+), 21 deletions(-)

diff -puN arch/m32r/mm/init.c~4level-architecture-changes-for-m32r arch/m32r/mm/init.c
--- 25/arch/m32r/mm/init.c~4level-architecture-changes-for-m32r	2004-11-03 21:53:20.470956016 -0800
+++ 25-akpm/arch/m32r/mm/init.c	2004-11-03 21:53:20.481954344 -0800
@@ -248,3 +248,16 @@ void free_initrd_mem(unsigned long start
 }
 #endif
 
+
+/*
+ * Allocate and free page tables.
+ */
+pgd_t *__pgd_alloc(struct mm_struct *mm, pml4_t *pml4, unsigned long addr)
+{
+	pgd_t *pgd = (pgd_t *)__get_free_page(GFP_KERNEL);
+
+	if (pgd)
+		clear_page(pgd);
+
+	return pgd;
+}
diff -puN arch/m32r/mm/ioremap.c~4level-architecture-changes-for-m32r arch/m32r/mm/ioremap.c
--- 25/arch/m32r/mm/ioremap.c~4level-architecture-changes-for-m32r	2004-11-03 21:53:20.471955864 -0800
+++ 25-akpm/arch/m32r/mm/ioremap.c	2004-11-03 21:53:20.481954344 -0800
@@ -86,7 +86,7 @@ remap_area_pages(unsigned long address, 
 	unsigned long end = address + size;
 
 	phys_addr -= address;
-	dir = pgd_offset(&init_mm, address);
+	dir = pml4_pgd_offset_k(pml4_offset_k(address), address);
 	flush_cache_all();
 	if (address >= end)
 		BUG();
diff -puN include/asm-m32r/mmu_context.h~4level-architecture-changes-for-m32r include/asm-m32r/mmu_context.h
--- 25/include/asm-m32r/mmu_context.h~4level-architecture-changes-for-m32r	2004-11-03 21:53:20.473955560 -0800
+++ 25-akpm/include/asm-m32r/mmu_context.h	2004-11-03 21:53:20.482954192 -0800
@@ -133,8 +133,8 @@ static __inline__ void switch_mm(struct 
 #ifdef CONFIG_SMP
 		cpu_set(cpu, next->cpu_vm_mask);
 #endif /* CONFIG_SMP */
-		/* Set MPTB = next->pgd */
-		*(volatile unsigned long *)MPTB = (unsigned long)next->pgd;
+		/* Set MPTB = next->pml4 */
+		*(volatile unsigned long *)MPTB = (unsigned long)next->pml4;
 		activate_context(next);
 	}
 #ifdef CONFIG_SMP
diff -puN include/asm-m32r/page.h~4level-architecture-changes-for-m32r include/asm-m32r/page.h
--- 25/include/asm-m32r/page.h~4level-architecture-changes-for-m32r	2004-11-03 21:53:20.475955256 -0800
+++ 25-akpm/include/asm-m32r/page.h	2004-11-03 21:53:20.482954192 -0800
@@ -106,6 +106,8 @@ static __inline__ int get_order(unsigned
 
 #define devmem_is_allowed(x) 1
 
+#include <asm-generic/nopml4-page.h>
+
 #endif /* __KERNEL__ */
 
 #endif /* _ASM_M32R_PAGE_H */
diff -puN include/asm-m32r/pgalloc.h~4level-architecture-changes-for-m32r include/asm-m32r/pgalloc.h
--- 25/include/asm-m32r/pgalloc.h~4level-architecture-changes-for-m32r	2004-11-03 21:53:20.476955104 -0800
+++ 25-akpm/include/asm-m32r/pgalloc.h	2004-11-03 21:53:20.483954040 -0800
@@ -18,19 +18,6 @@ static __inline__ void pmd_populate(stru
 	set_pmd(pmd, __pmd(_PAGE_TABLE + page_to_phys(pte)));
 }
 
-/*
- * Allocate and free page tables.
- */
-static __inline__ pgd_t *pgd_alloc(struct mm_struct *mm)
-{
-	pgd_t *pgd = (pgd_t *)__get_free_page(GFP_KERNEL);
-
-	if (pgd)
-		clear_page(pgd);
-
-	return pgd;
-}
-
 static __inline__ void pgd_free(pgd_t *pgd)
 {
 	free_page((unsigned long)pgd);
@@ -83,5 +70,7 @@ static __inline__ void pte_free(struct p
 
 #define check_pgt_cache()	do { } while (0)
 
+#include <asm-generic/nopml4-pgalloc.h>
+
 #endif /* _ASM_M32R_PGALLOC_H */
 
diff -puN include/asm-m32r/pgtable.h~4level-architecture-changes-for-m32r include/asm-m32r/pgtable.h
--- 25/include/asm-m32r/pgtable.h~4level-architecture-changes-for-m32r	2004-11-03 21:53:20.478954800 -0800
+++ 25-akpm/include/asm-m32r/pgtable.h	2004-11-03 21:53:20.483954040 -0800
@@ -54,7 +54,7 @@ extern unsigned long empty_zero_page[102
 #define PGDIR_SIZE	(1UL << PGDIR_SHIFT)
 #define PGDIR_MASK	(~(PGDIR_SIZE - 1))
 
-#define USER_PTRS_PER_PGD	(TASK_SIZE / PGDIR_SIZE)
+#define USER_PGDS_IN_LAST_PML4	(TASK_SIZE / PGDIR_SIZE)
 #define FIRST_USER_PGD_NR	0
 
 #ifndef __ASSEMBLY__
@@ -377,10 +377,7 @@ static __inline__ void pmd_set(pmd_t * p
 #define pgd_index(address)	\
 	(((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD - 1))
 
-#define pgd_offset(mm, address)	((mm)->pgd + pgd_index(address))
-
-/* to find an entry in a kernel page-table-directory */
-#define pgd_offset_k(address)	pgd_offset(&init_mm, address)
+#define pgd_index_k(addr) pgd_index(addr)
 
 #define pmd_index(address)	\
 	(((address) >> PMD_SHIFT) & (PTRS_PER_PMD - 1))
@@ -419,5 +416,7 @@ static __inline__ void pmd_set(pmd_t * p
 #define __HAVE_ARCH_PTE_SAME
 #include <asm-generic/pgtable.h>
 
+#include <asm-generic/nopml4-pgtable.h>
+
 #endif /* _ASM_M32R_PGTABLE_H */
 
_
