diff options
Diffstat (limited to 'include/asm-s390')
-rw-r--r-- | include/asm-s390/pgtable.h | 43 |
1 files changed, 19 insertions, 24 deletions
diff --git a/include/asm-s390/pgtable.h b/include/asm-s390/pgtable.h index 26215a976127..1039bf6b657f 100644 --- a/include/asm-s390/pgtable.h +++ b/include/asm-s390/pgtable.h | |||
@@ -707,16 +707,19 @@ static inline void __ptep_ipte(unsigned long address, pte_t *ptep) | |||
707 | pte_val(*ptep) = _PAGE_TYPE_EMPTY; | 707 | pte_val(*ptep) = _PAGE_TYPE_EMPTY; |
708 | } | 708 | } |
709 | 709 | ||
710 | static inline pte_t | 710 | static inline void ptep_invalidate(unsigned long address, pte_t *ptep) |
711 | ptep_clear_flush(struct vm_area_struct *vma, | ||
712 | unsigned long address, pte_t *ptep) | ||
713 | { | 711 | { |
714 | pte_t pte = *ptep; | ||
715 | pte_t *shadow_pte = get_shadow_pte(ptep); | ||
716 | |||
717 | __ptep_ipte(address, ptep); | 712 | __ptep_ipte(address, ptep); |
718 | if (shadow_pte) | 713 | ptep = get_shadow_pte(ptep); |
719 | __ptep_ipte(address, shadow_pte); | 714 | if (ptep) |
715 | __ptep_ipte(address, ptep); | ||
716 | } | ||
717 | |||
718 | static inline pte_t ptep_clear_flush(struct vm_area_struct *vma, | ||
719 | unsigned long address, pte_t *ptep) | ||
720 | { | ||
721 | pte_t pte = *ptep; | ||
722 | ptep_invalidate(address, ptep); | ||
720 | return pte; | 723 | return pte; |
721 | } | 724 | } |
722 | 725 | ||
@@ -726,21 +729,14 @@ static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr, | |||
726 | set_pte_at(mm, addr, ptep, pte_wrprotect(old_pte)); | 729 | set_pte_at(mm, addr, ptep, pte_wrprotect(old_pte)); |
727 | } | 730 | } |
728 | 731 | ||
729 | static inline void | 732 | #define ptep_set_access_flags(__vma, __addr, __ptep, __entry, __dirty) \ |
730 | ptep_establish(struct vm_area_struct *vma, | 733 | ({ \ |
731 | unsigned long address, pte_t *ptep, | 734 | int __changed = !pte_same(*(__ptep), __entry); \ |
732 | pte_t entry) | 735 | if (__changed) { \ |
733 | { | 736 | ptep_invalidate(__addr, __ptep); \ |
734 | ptep_clear_flush(vma, address, ptep); | 737 | set_pte_at((__vma)->vm_mm, __addr, __ptep, __entry); \ |
735 | set_pte(ptep, entry); | 738 | } \ |
736 | } | 739 | __changed; \ |
737 | |||
738 | #define ptep_set_access_flags(__vma, __address, __ptep, __entry, __dirty) \ | ||
739 | ({ \ | ||
740 | int __changed = !pte_same(*(__ptep), __entry); \ | ||
741 | if (__changed) \ | ||
742 | ptep_establish(__vma, __address, __ptep, __entry); \ | ||
743 | __changed; \ | ||
744 | }) | 740 | }) |
745 | 741 | ||
746 | /* | 742 | /* |
@@ -940,7 +936,6 @@ extern int remove_shared_memory(unsigned long start, unsigned long size); | |||
940 | #define __HAVE_ARCH_MEMMAP_INIT | 936 | #define __HAVE_ARCH_MEMMAP_INIT |
941 | extern void memmap_init(unsigned long, int, unsigned long, unsigned long); | 937 | extern void memmap_init(unsigned long, int, unsigned long, unsigned long); |
942 | 938 | ||
943 | #define __HAVE_ARCH_PTEP_ESTABLISH | ||
944 | #define __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS | 939 | #define __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS |
945 | #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG | 940 | #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG |
946 | #define __HAVE_ARCH_PTEP_CLEAR_YOUNG_FLUSH | 941 | #define __HAVE_ARCH_PTEP_CLEAR_YOUNG_FLUSH |