vserver 1.9.5.x5
[linux-2.6.git] / include / asm-sparc / pgtable.h
index c820174..e62df8c 100644 (file)
@@ -9,6 +9,8 @@
  *  Copyright (C) 1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
  */
 
+#include <asm-generic/4level-fixup.h>
+
 #include <linux/config.h>
 #include <linux/spinlock.h>
 #include <linux/swap.h>
@@ -184,10 +186,31 @@ BTFIXUPDEF_CALL(void, pgd_clear, pgd_t *)
  * The following only work if pte_present() is true.
  * Undefined behaviour if not..
  */
+BTFIXUPDEF_HALF(pte_readi)
 BTFIXUPDEF_HALF(pte_writei)
 BTFIXUPDEF_HALF(pte_dirtyi)
 BTFIXUPDEF_HALF(pte_youngi)
 
+extern int pte_read(pte_t pte) __attribute_const__;
+extern __inline__ int pte_read(pte_t pte)
+{
+       switch (sparc_cpu_model){
+       case sun4:
+       case sun4c:
+               return pte_val(pte) & BTFIXUP_HALF(pte_readi);
+       case sun4d:
+       case sun4e:
+       case sun4m:
+               return !(pte_val(pte) & BTFIXUP_HALF(pte_readi));
+       /* pacify gcc warnings */
+       case sun4u:
+       case sun_unknown:
+       case ap1000:
+       default:
+               return 0;
+       }
+}
+
 extern int pte_write(pte_t pte) __attribute_const__;
 extern __inline__ int pte_write(pte_t pte)
 {