aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/mm/pageattr_32.c12
-rw-r--r--arch/x86/mm/pageattr_64.c3
2 files changed, 8 insertions, 7 deletions
diff --git a/arch/x86/mm/pageattr_32.c b/arch/x86/mm/pageattr_32.c
index 523fd5b37df9..5cb5c7101f41 100644
--- a/arch/x86/mm/pageattr_32.c
+++ b/arch/x86/mm/pageattr_32.c
@@ -87,6 +87,12 @@ static void flush_kernel_map(void *arg)
87 struct list_head *lh = (struct list_head *)arg; 87 struct list_head *lh = (struct list_head *)arg;
88 struct page *p; 88 struct page *p;
89 89
90 /*
91 * Flush all to work around Errata in early athlons regarding
92 * large page flushing.
93 */
94 __flush_tlb_all();
95
90 /* High level code is not ready for clflush yet */ 96 /* High level code is not ready for clflush yet */
91 if (0 && cpu_has_clflush) { 97 if (0 && cpu_has_clflush) {
92 list_for_each_entry(p, lh, lru) 98 list_for_each_entry(p, lh, lru)
@@ -95,12 +101,6 @@ static void flush_kernel_map(void *arg)
95 if (boot_cpu_data.x86_model >= 4) 101 if (boot_cpu_data.x86_model >= 4)
96 wbinvd(); 102 wbinvd();
97 } 103 }
98
99 /*
100 * Flush all to work around Errata in early athlons regarding
101 * large page flushing.
102 */
103 __flush_tlb_all();
104} 104}
105 105
106static void set_pmd_pte(pte_t *kpte, unsigned long address, pte_t pte) 106static void set_pmd_pte(pte_t *kpte, unsigned long address, pte_t pte)
diff --git a/arch/x86/mm/pageattr_64.c b/arch/x86/mm/pageattr_64.c
index 4d172881af70..3ccdb1401e67 100644
--- a/arch/x86/mm/pageattr_64.c
+++ b/arch/x86/mm/pageattr_64.c
@@ -82,6 +82,8 @@ static void flush_kernel_map(void *arg)
82 struct list_head *l = (struct list_head *)arg; 82 struct list_head *l = (struct list_head *)arg;
83 struct page *pg; 83 struct page *pg;
84 84
85 __flush_tlb_all();
86
85 /* When clflush is available always use it because it is 87 /* When clflush is available always use it because it is
86 much cheaper than WBINVD. */ 88 much cheaper than WBINVD. */
87 /* clflush is still broken. Disable for now. */ 89 /* clflush is still broken. Disable for now. */
@@ -94,7 +96,6 @@ static void flush_kernel_map(void *arg)
94 clflush_cache_range(addr, PAGE_SIZE); 96 clflush_cache_range(addr, PAGE_SIZE);
95 } 97 }
96 } 98 }
97 __flush_tlb_all();
98} 99}
99 100
100static inline void flush_map(struct list_head *l) 101static inline void flush_map(struct list_head *l)