diff options
Diffstat (limited to 'arch/x86/mm/pageattr.c')
-rw-r--r-- | arch/x86/mm/pageattr.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c index 62bb30b4bd2a..a1004dec98ea 100644 --- a/arch/x86/mm/pageattr.c +++ b/arch/x86/mm/pageattr.c | |||
@@ -2309,9 +2309,13 @@ void __kernel_map_pages(struct page *page, int numpages, int enable) | |||
2309 | 2309 | ||
2310 | /* | 2310 | /* |
2311 | * We should perform an IPI and flush all tlbs, | 2311 | * We should perform an IPI and flush all tlbs, |
2312 | * but that can deadlock->flush only current cpu: | 2312 | * but that can deadlock->flush only current cpu. |
2313 | * Preemption needs to be disabled around __flush_tlb_all() due to | ||
2314 | * CR3 reload in __native_flush_tlb(). | ||
2313 | */ | 2315 | */ |
2316 | preempt_disable(); | ||
2314 | __flush_tlb_all(); | 2317 | __flush_tlb_all(); |
2318 | preempt_enable(); | ||
2315 | 2319 | ||
2316 | arch_flush_lazy_mmu_mode(); | 2320 | arch_flush_lazy_mmu_mode(); |
2317 | } | 2321 | } |