diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2008-10-12 13:54:24 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2008-10-13 19:35:27 -0400 |
commit | f5ea64dcbad89875d130596df14c9b25d994a737 (patch) | |
tree | 03bde08104ea5c29edcaafc11576eb5594a7426c /arch/powerpc/include/asm/pgtable-ppc32.h | |
parent | cd301c7ba4bbb5a0ee6ebf13eb4a304f29b13847 (diff) |
powerpc: Get USE_STRICT_MM_TYPECHECKS working again
The typesafe version of the powerpc pagetable handling (with
USE_STRICT_MM_TYPECHECKS defined) has bitrotted again. This patch
makes a bunch of small fixes to get it back to building status.
It's still not enabled by default as gcc still generates worse
code with it for some reason.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/include/asm/pgtable-ppc32.h')
-rw-r--r-- | arch/powerpc/include/asm/pgtable-ppc32.h | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/arch/powerpc/include/asm/pgtable-ppc32.h b/arch/powerpc/include/asm/pgtable-ppc32.h index 29c83d85b04f..6ab7c67cb5ab 100644 --- a/arch/powerpc/include/asm/pgtable-ppc32.h +++ b/arch/powerpc/include/asm/pgtable-ppc32.h | |||
@@ -431,11 +431,11 @@ extern int icache_44x_need_flush; | |||
431 | #define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY) | 431 | #define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY) |
432 | 432 | ||
433 | 433 | ||
434 | #define PAGE_PROT_BITS __pgprot(_PAGE_GUARDED | _PAGE_COHERENT | _PAGE_NO_CACHE | \ | 434 | #define PAGE_PROT_BITS (_PAGE_GUARDED | _PAGE_COHERENT | _PAGE_NO_CACHE | \ |
435 | _PAGE_WRITETHRU | _PAGE_ENDIAN | \ | 435 | _PAGE_WRITETHRU | _PAGE_ENDIAN | \ |
436 | _PAGE_USER | _PAGE_ACCESSED | \ | 436 | _PAGE_USER | _PAGE_ACCESSED | \ |
437 | _PAGE_RW | _PAGE_HWWRITE | _PAGE_DIRTY | \ | 437 | _PAGE_RW | _PAGE_HWWRITE | _PAGE_DIRTY | \ |
438 | _PAGE_EXEC | _PAGE_HWEXEC) | 438 | _PAGE_EXEC | _PAGE_HWEXEC) |
439 | /* | 439 | /* |
440 | * Note: the _PAGE_COHERENT bit automatically gets set in the hardware | 440 | * Note: the _PAGE_COHERENT bit automatically gets set in the hardware |
441 | * PTE if CONFIG_SMP is defined (hash_page does this); there is no need | 441 | * PTE if CONFIG_SMP is defined (hash_page does this); there is no need |
@@ -570,9 +570,9 @@ static inline pte_t pte_mkyoung(pte_t pte) { | |||
570 | pte_val(pte) |= _PAGE_ACCESSED; return pte; } | 570 | pte_val(pte) |= _PAGE_ACCESSED; return pte; } |
571 | static inline pte_t pte_mkspecial(pte_t pte) { | 571 | static inline pte_t pte_mkspecial(pte_t pte) { |
572 | pte_val(pte) |= _PAGE_SPECIAL; return pte; } | 572 | pte_val(pte) |= _PAGE_SPECIAL; return pte; } |
573 | static inline unsigned long pte_pgprot(pte_t pte) | 573 | static inline pgprot_t pte_pgprot(pte_t pte) |
574 | { | 574 | { |
575 | return __pgprot(pte_val(pte)) & PAGE_PROT_BITS; | 575 | return __pgprot(pte_val(pte) & PAGE_PROT_BITS); |
576 | } | 576 | } |
577 | 577 | ||
578 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | 578 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) |
@@ -688,7 +688,8 @@ static inline void __set_pte_at(struct mm_struct *mm, unsigned long addr, | |||
688 | : "=m" (*ptep), "=m" (*((unsigned char *)ptep+4)) | 688 | : "=m" (*ptep), "=m" (*((unsigned char *)ptep+4)) |
689 | : "r" (pte) : "memory"); | 689 | : "r" (pte) : "memory"); |
690 | #else | 690 | #else |
691 | *ptep = (*ptep & _PAGE_HASHPTE) | (pte & ~_PAGE_HASHPTE); | 691 | *ptep = __pte((pte_val(*ptep) & _PAGE_HASHPTE) |
692 | | (pte_val(pte) & ~_PAGE_HASHPTE)); | ||
692 | #endif | 693 | #endif |
693 | } | 694 | } |
694 | 695 | ||