hc
2023-12-08 01573e231f18eb2d99162747186f59511f56b64d
kernel/arch/sh/include/asm/tlb.h
....@@ -2,154 +2,15 @@
22 #ifndef __ASM_SH_TLB_H
33 #define __ASM_SH_TLB_H
44
5
-#ifdef CONFIG_SUPERH64
6
-# include <asm/tlb_64.h>
7
-#endif
8
-
95 #ifndef __ASSEMBLY__
106 #include <linux/pagemap.h>
117
128 #ifdef CONFIG_MMU
139 #include <linux/swap.h>
14
-#include <asm/pgalloc.h>
15
-#include <asm/tlbflush.h>
16
-#include <asm/mmu_context.h>
1710
18
-/*
19
- * TLB handling. This allows us to remove pages from the page
20
- * tables, and efficiently handle the TLB issues.
21
- */
22
-struct mmu_gather {
23
- struct mm_struct *mm;
24
- unsigned int fullmm;
25
- unsigned long start, end;
26
-};
11
+#include <asm-generic/tlb.h>
2712
28
-static inline void init_tlb_gather(struct mmu_gather *tlb)
29
-{
30
- tlb->start = TASK_SIZE;
31
- tlb->end = 0;
32
-
33
- if (tlb->fullmm) {
34
- tlb->start = 0;
35
- tlb->end = TASK_SIZE;
36
- }
37
-}
38
-
39
-static inline void
40
-arch_tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm,
41
- unsigned long start, unsigned long end)
42
-{
43
- tlb->mm = mm;
44
- tlb->start = start;
45
- tlb->end = end;
46
- tlb->fullmm = !(start | (end+1));
47
-
48
- init_tlb_gather(tlb);
49
-}
50
-
51
-static inline void
52
-arch_tlb_finish_mmu(struct mmu_gather *tlb,
53
- unsigned long start, unsigned long end, bool force)
54
-{
55
- if (tlb->fullmm || force)
56
- flush_tlb_mm(tlb->mm);
57
-
58
- /* keep the page table cache within bounds */
59
- check_pgt_cache();
60
-}
61
-
62
-static inline void
63
-tlb_remove_tlb_entry(struct mmu_gather *tlb, pte_t *ptep, unsigned long address)
64
-{
65
- if (tlb->start > address)
66
- tlb->start = address;
67
- if (tlb->end < address + PAGE_SIZE)
68
- tlb->end = address + PAGE_SIZE;
69
-}
70
-
71
-#define tlb_remove_huge_tlb_entry(h, tlb, ptep, address) \
72
- tlb_remove_tlb_entry(tlb, ptep, address)
73
-
74
-/*
75
- * In the case of tlb vma handling, we can optimise these away in the
76
- * case where we're doing a full MM flush. When we're doing a munmap,
77
- * the vmas are adjusted to only cover the region to be torn down.
78
- */
79
-static inline void
80
-tlb_start_vma(struct mmu_gather *tlb, struct vm_area_struct *vma)
81
-{
82
- if (!tlb->fullmm)
83
- flush_cache_range(vma, vma->vm_start, vma->vm_end);
84
-}
85
-
86
-static inline void
87
-tlb_end_vma(struct mmu_gather *tlb, struct vm_area_struct *vma)
88
-{
89
- if (!tlb->fullmm && tlb->end) {
90
- flush_tlb_range(vma, tlb->start, tlb->end);
91
- init_tlb_gather(tlb);
92
- }
93
-}
94
-
95
-static inline void tlb_flush_mmu_tlbonly(struct mmu_gather *tlb)
96
-{
97
-}
98
-
99
-static inline void tlb_flush_mmu_free(struct mmu_gather *tlb)
100
-{
101
-}
102
-
103
-static inline void tlb_flush_mmu(struct mmu_gather *tlb)
104
-{
105
-}
106
-
107
-static inline int __tlb_remove_page(struct mmu_gather *tlb, struct page *page)
108
-{
109
- free_page_and_swap_cache(page);
110
- return false; /* avoid calling tlb_flush_mmu */
111
-}
112
-
113
-static inline void tlb_remove_page(struct mmu_gather *tlb, struct page *page)
114
-{
115
- __tlb_remove_page(tlb, page);
116
-}
117
-
118
-static inline bool __tlb_remove_page_size(struct mmu_gather *tlb,
119
- struct page *page, int page_size)
120
-{
121
- return __tlb_remove_page(tlb, page);
122
-}
123
-
124
-static inline void tlb_remove_page_size(struct mmu_gather *tlb,
125
- struct page *page, int page_size)
126
-{
127
- return tlb_remove_page(tlb, page);
128
-}
129
-
130
-static inline void
131
-tlb_flush_pmd_range(struct mmu_gather *tlb, unsigned long address,
132
- unsigned long size)
133
-{
134
- if (tlb->start > address)
135
- tlb->start = address;
136
- if (tlb->end < address + size)
137
- tlb->end = address + size;
138
-}
139
-
140
-#define tlb_remove_check_page_size_change tlb_remove_check_page_size_change
141
-static inline void tlb_remove_check_page_size_change(struct mmu_gather *tlb,
142
- unsigned int page_size)
143
-{
144
-}
145
-
146
-#define pte_free_tlb(tlb, ptep, addr) pte_free((tlb)->mm, ptep)
147
-#define pmd_free_tlb(tlb, pmdp, addr) pmd_free((tlb)->mm, pmdp)
148
-#define pud_free_tlb(tlb, pudp, addr) pud_free((tlb)->mm, pudp)
149
-
150
-#define tlb_migrate_finish(mm) do { } while (0)
151
-
152
-#if defined(CONFIG_CPU_SH4) || defined(CONFIG_SUPERH64)
13
+#if defined(CONFIG_CPU_SH4)
15314 extern void tlb_wire_entry(struct vm_area_struct *, unsigned long, pte_t);
15415 extern void tlb_unwire_entry(void);
15516 #else
....@@ -166,11 +27,6 @@
16627 #endif
16728
16829 #else /* CONFIG_MMU */
169
-
170
-#define tlb_start_vma(tlb, vma) do { } while (0)
171
-#define tlb_end_vma(tlb, vma) do { } while (0)
172
-#define __tlb_remove_tlb_entry(tlb, pte, address) do { } while (0)
173
-#define tlb_flush(tlb) do { } while (0)
17430
17531 #include <asm-generic/tlb.h>
17632