diff options
-rw-r--r-- | arch/x86/mm/pageattr_32.c | 12 | ||||
-rw-r--r-- | arch/x86/mm/pageattr_64.c | 3 |
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 | ||
106 | static void set_pmd_pte(pte_t *kpte, unsigned long address, pte_t pte) | 106 | static 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 | ||
100 | static inline void flush_map(struct list_head *l) | 101 | static inline void flush_map(struct list_head *l) |