[MIPS] Do not lose upper 32-bit on MIPS32 with 64-bit addresses in __pte().
authorRalf Baechle <ralf@linux-mips.org>
Thu, 31 Aug 2006 18:39:09 +0000 (19:39 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Wed, 27 Sep 2006 12:37:39 +0000 (13:37 +0100)
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
include/asm-mips/page.h

index c3b872b047d7aa36a8b9ba18a66a86b5b5ff4182..85b258ee7090737d4864ae068f00833bb8e59f53 100644 (file)
@@ -77,15 +77,17 @@ static inline void copy_user_page(void *vto, void *vfrom, unsigned long vaddr,
   #ifdef CONFIG_CPU_MIPS32
     typedef struct { unsigned long pte_low, pte_high; } pte_t;
     #define pte_val(x)    ((x).pte_low | ((unsigned long long)(x).pte_high << 32))
+    #define __pte(x)      ({ pte_t __pte = {(x), ((unsigned long long)(x)) >> 32}; __pte; })
   #else
      typedef struct { unsigned long long pte; } pte_t;
      #define pte_val(x)        ((x).pte)
+     #define __pte(x)  ((pte_t) { (x) } )
   #endif
 #else
 typedef struct { unsigned long pte; } pte_t;
 #define pte_val(x)     ((x).pte)
-#endif
 #define __pte(x)       ((pte_t) { (x) } )
+#endif
 
 /*
  * For 3-level pagetables we defines these ourselves, for 2-level the