Patchwork PPC32: Fixup pmd_page to work when ARCH_PFN_OFFSET is non-zero

login
register
mail settings
Submitter Jason Gunthorpe
Date March 9, 2010, 7:35 p.m.
Message ID <20100309193500.GE30462@obsidianresearch.com>
Download mbox | patch
Permalink /patch/47184/
State Accepted
Commit 43b5fefc24157def813154d1867d2960cefff837
Delegated to: Benjamin Herrenschmidt
Headers show

Comments

Jason Gunthorpe - March 9, 2010, 7:35 p.m.
Instead of referencing mem_map directly, use pfn_to_page. Otherwise
the kernel crashes when trying to start userspace if ARCH_PFN_OFFSET is
non-zero and CONFIG_BOOKE is not defined

Signed-off-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
---
 arch/powerpc/include/asm/pgtable-ppc32.h |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

For reference, on powerpc 32 with CONFIG_FLATMEM:

#define pfn_to_page __pfn_to_page
#define __pfn_to_page(pfn)      (mem_map + ((pfn) - ARCH_PFN_OFFSET))

So the below patch has no effect if ARCH_PFN_OFFEST is 0.

Patch

diff --git a/arch/powerpc/include/asm/pgtable-ppc32.h b/arch/powerpc/include/asm/pgtable-ppc32.h
index 55646ad..a7db96f 100644
--- a/arch/powerpc/include/asm/pgtable-ppc32.h
+++ b/arch/powerpc/include/asm/pgtable-ppc32.h
@@ -287,7 +287,7 @@  static inline void __ptep_set_access_flags(pte_t *ptep, pte_t entry)
 #define pmd_page_vaddr(pmd)	\
 	((unsigned long) __va(pmd_val(pmd) & PAGE_MASK))
 #define pmd_page(pmd)		\
-	(mem_map + (pmd_val(pmd) >> PAGE_SHIFT))
+	pfn_to_page(pmd_val(pmd) >> PAGE_SHIFT)
 #else
 #define pmd_page_vaddr(pmd)	\
 	((unsigned long) (pmd_val(pmd) & PAGE_MASK))