diff options
Diffstat (limited to 'arch/s390/include/asm/tlb.h')
-rw-r--r-- | arch/s390/include/asm/tlb.h | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/arch/s390/include/asm/tlb.h b/arch/s390/include/asm/tlb.h index fd1c00d08bf5..f1f644f2240a 100644 --- a/arch/s390/include/asm/tlb.h +++ b/arch/s390/include/asm/tlb.h | |||
@@ -64,10 +64,9 @@ static inline void tlb_flush_mmu(struct mmu_gather *tlb, | |||
64 | if (!tlb->fullmm && (tlb->nr_ptes > 0 || tlb->nr_pxds < TLB_NR_PTRS)) | 64 | if (!tlb->fullmm && (tlb->nr_ptes > 0 || tlb->nr_pxds < TLB_NR_PTRS)) |
65 | __tlb_flush_mm(tlb->mm); | 65 | __tlb_flush_mm(tlb->mm); |
66 | while (tlb->nr_ptes > 0) | 66 | while (tlb->nr_ptes > 0) |
67 | pte_free(tlb->mm, tlb->array[--tlb->nr_ptes]); | 67 | page_table_free_rcu(tlb->mm, tlb->array[--tlb->nr_ptes]); |
68 | while (tlb->nr_pxds < TLB_NR_PTRS) | 68 | while (tlb->nr_pxds < TLB_NR_PTRS) |
69 | /* pgd_free frees the pointer as region or segment table */ | 69 | crst_table_free_rcu(tlb->mm, tlb->array[tlb->nr_pxds++]); |
70 | pgd_free(tlb->mm, tlb->array[tlb->nr_pxds++]); | ||
71 | } | 70 | } |
72 | 71 | ||
73 | static inline void tlb_finish_mmu(struct mmu_gather *tlb, | 72 | static inline void tlb_finish_mmu(struct mmu_gather *tlb, |
@@ -75,6 +74,8 @@ static inline void tlb_finish_mmu(struct mmu_gather *tlb, | |||
75 | { | 74 | { |
76 | tlb_flush_mmu(tlb, start, end); | 75 | tlb_flush_mmu(tlb, start, end); |
77 | 76 | ||
77 | rcu_table_freelist_finish(); | ||
78 | |||
78 | /* keep the page table cache within bounds */ | 79 | /* keep the page table cache within bounds */ |
79 | check_pgt_cache(); | 80 | check_pgt_cache(); |
80 | 81 | ||
@@ -103,7 +104,7 @@ static inline void pte_free_tlb(struct mmu_gather *tlb, pgtable_t pte, | |||
103 | if (tlb->nr_ptes >= tlb->nr_pxds) | 104 | if (tlb->nr_ptes >= tlb->nr_pxds) |
104 | tlb_flush_mmu(tlb, 0, 0); | 105 | tlb_flush_mmu(tlb, 0, 0); |
105 | } else | 106 | } else |
106 | pte_free(tlb->mm, pte); | 107 | page_table_free(tlb->mm, (unsigned long *) pte); |
107 | } | 108 | } |
108 | 109 | ||
109 | /* | 110 | /* |
@@ -124,7 +125,7 @@ static inline void pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd, | |||
124 | if (tlb->nr_ptes >= tlb->nr_pxds) | 125 | if (tlb->nr_ptes >= tlb->nr_pxds) |
125 | tlb_flush_mmu(tlb, 0, 0); | 126 | tlb_flush_mmu(tlb, 0, 0); |
126 | } else | 127 | } else |
127 | pmd_free(tlb->mm, pmd); | 128 | crst_table_free(tlb->mm, (unsigned long *) pmd); |
128 | #endif | 129 | #endif |
129 | } | 130 | } |
130 | 131 | ||
@@ -146,7 +147,7 @@ static inline void pud_free_tlb(struct mmu_gather *tlb, pud_t *pud, | |||
146 | if (tlb->nr_ptes >= tlb->nr_pxds) | 147 | if (tlb->nr_ptes >= tlb->nr_pxds) |
147 | tlb_flush_mmu(tlb, 0, 0); | 148 | tlb_flush_mmu(tlb, 0, 0); |
148 | } else | 149 | } else |
149 | pud_free(tlb->mm, pud); | 150 | crst_table_free(tlb->mm, (unsigned long *) pud); |
150 | #endif | 151 | #endif |
151 | } | 152 | } |
152 | 153 | ||