Get USE_STRICT_MM_TYPECHECKS working again

2008-10-12 Thread David Gibson
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

2008-10-09 Thread Benjamin Herrenschmidt
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

2008-09-10 Thread David Gibson
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

2008-09-09 Thread Christoph Hellwig
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

2008-09-08 Thread David Gibson
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