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 building again. Signed-off-by: David Gibson [EMAIL PROTECTED] --- Rebased onto current benh/next as requested. Index: working-2.6/arch/powerpc/include/asm/pgtable-ppc64.h === --- working-2.6.orig/arch/powerpc/include/asm/pgtable-ppc64.h 2008-10-13 11:44:13.0 +1100 +++ working-2.6/arch/powerpc/include/asm/pgtable-ppc64.h2008-10-13 13:52:36.0 +1100 @@ -117,10 +117,10 @@ #define PAGE_AGP __pgprot(_PAGE_BASE | _PAGE_WRENABLE | _PAGE_NO_CACHE) #define HAVE_PAGE_AGP -#define PAGE_PROT_BITS __pgprot(_PAGE_GUARDED | _PAGE_COHERENT | \ -_PAGE_NO_CACHE | _PAGE_WRITETHRU | \ -_PAGE_4K_PFN | _PAGE_RW | _PAGE_USER | \ -_PAGE_ACCESSED | _PAGE_DIRTY | _PAGE_EXEC) +#define PAGE_PROT_BITS (_PAGE_GUARDED | _PAGE_COHERENT | \ +_PAGE_NO_CACHE | _PAGE_WRITETHRU | \ +_PAGE_4K_PFN | _PAGE_RW | _PAGE_USER | \ +_PAGE_ACCESSED | _PAGE_DIRTY | _PAGE_EXEC) /* PTEIDX nibble */ #define _PTEIDX_SECONDARY 0x8 #define _PTEIDX_GROUP_IX 0x7 @@ -264,9 +264,9 @@ static inline pte_t pte_mkhuge(pte_t pte return pte; } static inline pte_t pte_mkspecial(pte_t pte) { pte_val(pte) |= _PAGE_SPECIAL; return pte; } -static inline unsigned long pte_pgprot(pte_t pte) +static inline pgprot_t pte_pgprot(pte_t pte) { - return __pgprot(pte_val(pte)) PAGE_PROT_BITS; + return __pgprot(pte_val(pte) PAGE_PROT_BITS); } /* Atomic PTE updates */ Index: working-2.6/arch/powerpc/include/asm/pgtable-ppc32.h === --- working-2.6.orig/arch/powerpc/include/asm/pgtable-ppc32.h 2008-10-13 11:44:13.0 +1100 +++ working-2.6/arch/powerpc/include/asm/pgtable-ppc32.h2008-10-13 14:36:09.0 +1100 @@ -431,11 +431,11 @@ extern int icache_44x_need_flush; #define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY) -#define PAGE_PROT_BITS __pgprot(_PAGE_GUARDED | _PAGE_COHERENT | _PAGE_NO_CACHE | \ -_PAGE_WRITETHRU | _PAGE_ENDIAN | \ -_PAGE_USER | _PAGE_ACCESSED | \ -_PAGE_RW | _PAGE_HWWRITE | _PAGE_DIRTY | \ -_PAGE_EXEC | _PAGE_HWEXEC) +#define PAGE_PROT_BITS (_PAGE_GUARDED | _PAGE_COHERENT | _PAGE_NO_CACHE | \ +_PAGE_WRITETHRU | _PAGE_ENDIAN | \ +_PAGE_USER | _PAGE_ACCESSED | \ +_PAGE_RW | _PAGE_HWWRITE | _PAGE_DIRTY | \ +_PAGE_EXEC | _PAGE_HWEXEC) /* * Note: the _PAGE_COHERENT bit automatically gets set in the hardware * 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 pt pte_val(pte) |= _PAGE_ACCESSED; return pte; } static inline pte_t pte_mkspecial(pte_t pte) { pte_val(pte) |= _PAGE_SPECIAL; return pte; } -static inline unsigned long pte_pgprot(pte_t pte) +static inline pgprot_t pte_pgprot(pte_t pte) { - return __pgprot(pte_val(pte)) PAGE_PROT_BITS; + return __pgprot(pte_val(pte) PAGE_PROT_BITS); } static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) @@ -688,7 +688,8 @@ static inline void __set_pte_at(struct m : =m (*ptep), =m (*((unsigned char *)ptep+4)) : r (pte) : memory); #else - *ptep = (*ptep _PAGE_HASHPTE) | (pte ~_PAGE_HASHPTE); + *ptep = __pte((pte_val(*ptep) _PAGE_HASHPTE) + | (pte_val(pte) ~_PAGE_HASHPTE)); #endif } Index: working-2.6/arch/powerpc/include/asm/mman.h === --- working-2.6.orig/arch/powerpc/include/asm/mman.h2008-10-13 11:44:13.0 +1100 +++ working-2.6/arch/powerpc/include/asm/mman.h 2008-10-13 13:52:36.0 +1100 @@ -44,7 +44,7 @@ static inline unsigned long arch_calc_vm static inline pgprot_t arch_vm_get_page_prot(unsigned long vm_flags) { - return (vm_flags VM_SAO) ? __pgprot(_PAGE_SAO) : 0; + return (vm_flags VM_SAO) ? __pgprot(_PAGE_SAO) : __pgprot(0); } #define arch_vm_get_page_prot(vm_flags) arch_vm_get_page_prot(vm_flags) Index: working-2.6/arch/powerpc/mm/gup.c === --- working-2.6.orig/arch/powerpc/mm/gup.c 2008-10-02 11:39:22.0 +1000 +++ working-2.6/arch/powerpc/mm/gup.c 2008-10-13 13:52:36.0 +1100 @@ -41,7 +41,7 @@ static noinline int gup_pte_range(pmd_t page = pte_page(pte); if (!page_cache_get_speculative(page))
Re: Get USE_STRICT_MM_TYPECHECKS working again
On Tue, 2008-09-09 at 15:04 +1000, David Gibson wrote: 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 building again. Signed-off-by: David Gibson [EMAIL PROTECTED] Doesn't seem to apply anymore, care to rebase ? :-) Cheers, Ben. ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Re: Get USE_STRICT_MM_TYPECHECKS working again
On Tue, Sep 09, 2008 at 02:09:56PM +0200, Christoph Hellwig wrote: On Tue, Sep 09, 2008 at 03:04:47PM +1000, David Gibson wrote: 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 building again. It might be a better idea to mark these types __bitwise and use sparse to do the stricter checking.. Uh.. I don't think that would do quite the same thing. In particular it wouldn't catch assignments between (say) pmd_t and pte_t. -- David Gibson| I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Re: Get USE_STRICT_MM_TYPECHECKS working again
On Tue, Sep 09, 2008 at 03:04:47PM +1000, David Gibson wrote: 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 building again. It might be a better idea to mark these types __bitwise and use sparse to do the stricter checking.. ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
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 building again. Signed-off-by: David Gibson [EMAIL PROTECTED] Index: working-2.6/arch/powerpc/include/asm/pgtable-ppc64.h === --- working-2.6.orig/arch/powerpc/include/asm/pgtable-ppc64.h 2008-09-09 14:17:27.0 +1000 +++ working-2.6/arch/powerpc/include/asm/pgtable-ppc64.h2008-09-09 14:17:31.0 +1000 @@ -117,10 +117,10 @@ #define PAGE_AGP __pgprot(_PAGE_BASE | _PAGE_WRENABLE | _PAGE_NO_CACHE) #define HAVE_PAGE_AGP -#define PAGE_PROT_BITS __pgprot(_PAGE_GUARDED | _PAGE_COHERENT | \ -_PAGE_NO_CACHE | _PAGE_WRITETHRU | \ -_PAGE_4K_PFN | _PAGE_RW | _PAGE_USER | \ -_PAGE_ACCESSED | _PAGE_DIRTY | _PAGE_EXEC) +#define PAGE_PROT_BITS (_PAGE_GUARDED | _PAGE_COHERENT | \ +_PAGE_NO_CACHE | _PAGE_WRITETHRU | \ +_PAGE_4K_PFN | _PAGE_RW | _PAGE_USER | \ +_PAGE_ACCESSED | _PAGE_DIRTY | _PAGE_EXEC) /* PTEIDX nibble */ #define _PTEIDX_SECONDARY 0x8 #define _PTEIDX_GROUP_IX 0x7 @@ -264,9 +264,9 @@ static inline pte_t pte_mkhuge(pte_t pte return pte; } static inline pte_t pte_mkspecial(pte_t pte) { pte_val(pte) |= _PAGE_SPECIAL; return pte; } -static inline unsigned long pte_pgprot(pte_t pte) +static inline pgprot_t pte_pgprot(pte_t pte) { - return __pgprot(pte_val(pte)) PAGE_PROT_BITS; + return __pgprot(pte_val(pte) PAGE_PROT_BITS); } /* Atomic PTE updates */ Index: working-2.6/arch/powerpc/include/asm/pgtable-ppc32.h === --- working-2.6.orig/arch/powerpc/include/asm/pgtable-ppc32.h 2008-09-02 11:50:12.0 +1000 +++ working-2.6/arch/powerpc/include/asm/pgtable-ppc32.h2008-09-09 14:17:31.0 +1000 @@ -415,11 +415,11 @@ extern int icache_44x_need_flush; #define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY) -#define PAGE_PROT_BITS __pgprot(_PAGE_GUARDED | _PAGE_COHERENT | _PAGE_NO_CACHE | \ -_PAGE_WRITETHRU | _PAGE_ENDIAN | \ -_PAGE_USER | _PAGE_ACCESSED | \ -_PAGE_RW | _PAGE_HWWRITE | _PAGE_DIRTY | \ -_PAGE_EXEC | _PAGE_HWEXEC) +#define PAGE_PROT_BITS (_PAGE_GUARDED | _PAGE_COHERENT | _PAGE_NO_CACHE | \ +_PAGE_WRITETHRU | _PAGE_ENDIAN | \ +_PAGE_USER | _PAGE_ACCESSED | \ +_PAGE_RW | _PAGE_HWWRITE | _PAGE_DIRTY | \ +_PAGE_EXEC | _PAGE_HWEXEC) /* * Note: the _PAGE_COHERENT bit automatically gets set in the hardware * PTE if CONFIG_SMP is defined (hash_page does this); there is no need @@ -553,9 +553,9 @@ static inline pte_t pte_mkyoung(pte_t pt pte_val(pte) |= _PAGE_ACCESSED; return pte; } static inline pte_t pte_mkspecial(pte_t pte) { return pte; } -static inline unsigned long pte_pgprot(pte_t pte) +static inline pgprot_t pte_pgprot(pte_t pte) { - return __pgprot(pte_val(pte)) PAGE_PROT_BITS; + return __pgprot(pte_val(pte) PAGE_PROT_BITS); } static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) Index: working-2.6/arch/powerpc/include/asm/mman.h === --- working-2.6.orig/arch/powerpc/include/asm/mman.h2008-09-02 11:50:12.0 +1000 +++ working-2.6/arch/powerpc/include/asm/mman.h 2008-09-09 14:17:31.0 +1000 @@ -44,7 +44,7 @@ static inline unsigned long arch_calc_vm static inline pgprot_t arch_vm_get_page_prot(unsigned long vm_flags) { - return (vm_flags VM_SAO) ? __pgprot(_PAGE_SAO) : 0; + return (vm_flags VM_SAO) ? __pgprot(_PAGE_SAO) : __pgprot(0); } #define arch_vm_get_page_prot(vm_flags) arch_vm_get_page_prot(vm_flags) Index: working-2.6/arch/powerpc/mm/gup.c === --- working-2.6.orig/arch/powerpc/mm/gup.c 2008-09-08 14:27:32.0 +1000 +++ working-2.6/arch/powerpc/mm/gup.c 2008-09-09 14:22:18.0 +1000 @@ -41,7 +41,7 @@ static noinline int gup_pte_range(pmd_t page = pte_page(pte); if (!page_cache_get_speculative(page)) return 0; - if (unlikely(pte != *ptep)) { + if (unlikely(pte_val(pte) != pte_val(*ptep))) { put_page(page); return 0; } @@ -92,7 +92,7 @@ static noinline int gup_huge_pte(pte_t * *nr -= refs; return 0; } - if (unlikely(pte != *ptep)) { + if