diff options
Diffstat (limited to 'arch/x86/mm/pageattr.c')
-rw-r--r-- | arch/x86/mm/pageattr.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c index 2cc019a3f71b..0f9052bcec4b 100644 --- a/arch/x86/mm/pageattr.c +++ b/arch/x86/mm/pageattr.c | |||
@@ -204,6 +204,11 @@ static void cpa_flush_range(unsigned long start, int numpages, int cache) | |||
204 | } | 204 | } |
205 | } | 205 | } |
206 | 206 | ||
207 | static void wbinvd_local(void *unused) | ||
208 | { | ||
209 | wbinvd(); | ||
210 | } | ||
211 | |||
207 | static void cpa_flush_array(unsigned long *start, int numpages, int cache, | 212 | static void cpa_flush_array(unsigned long *start, int numpages, int cache, |
208 | int in_flags, struct page **pages) | 213 | int in_flags, struct page **pages) |
209 | { | 214 | { |
@@ -219,7 +224,8 @@ static void cpa_flush_array(unsigned long *start, int numpages, int cache, | |||
219 | /* 4M threshold */ | 224 | /* 4M threshold */ |
220 | if (numpages >= 1024) { | 225 | if (numpages >= 1024) { |
221 | if (boot_cpu_data.x86 >= 4) | 226 | if (boot_cpu_data.x86 >= 4) |
222 | wbinvd(); | 227 | on_each_cpu(wbinvd_local, NULL, 1); |
228 | |||
223 | return; | 229 | return; |
224 | } | 230 | } |
225 | /* | 231 | /* |