Initial revision
[linux-2.6.git] / include / asm-s390 / pgtable.h
index ebd93e4..05ac76f 100644 (file)
@@ -587,6 +587,9 @@ ptep_establish(struct vm_area_struct *vma,
        set_pte(ptep, entry);
 }
 
+#define ptep_set_access_flags(__vma, __address, __ptep, __entry, __dirty) \
+       ptep_establish(__vma, __address, __ptep, __entry)
+
 /*
  * Test and clear dirty bit in storage key.
  * We can't clear the changed bit atomically. This is a potential
@@ -651,9 +654,11 @@ static inline pte_t mk_pte_phys(unsigned long physpage, pgprot_t pgprot)
        __pte;                                                            \
 })
 
-#define arch_set_page_uptodate(__page)                                   \
+#define SetPageUptodate(_page) \
        do {                                                              \
-               asm volatile ("sske %0,%1" : : "d" (0),                   \
+               struct page *__page = (_page);                            \
+               if (!test_and_set_bit(PG_uptodate, &__page->flags))       \
+                       asm volatile ("sske %0,%1" : : "d" (0),           \
                              "a" (__pa((__page-mem_map) << PAGE_SHIFT)));\
        } while (0)
 
@@ -784,6 +789,7 @@ extern inline pte_t mk_swap_pte(unsigned long type, unsigned long offset)
 #define pgtable_cache_init()   do { } while (0)
 
 #define __HAVE_ARCH_PTEP_ESTABLISH
+#define __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS
 #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG
 #define __HAVE_ARCH_PTEP_CLEAR_YOUNG_FLUSH
 #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_DIRTY