37 lines
1.0 KiB
Diff
37 lines
1.0 KiB
Diff
From 765d531296765e7fb2888c70cb56c0e25b459231 Mon Sep 17 00:00:00 2001
|
|
From: Rik van Riel <riel@surriel.com>
|
|
Date: Mon, 30 Dec 2024 12:53:09 -0500
|
|
Subject: x86/mm: use broadcast TLB flushing for page reclaim TLB flushing
|
|
|
|
In the page reclaim code, we only track the CPU(s) where the TLB needs
|
|
to be flushed, rather than all the individual mappings that may be getting
|
|
invalidated.
|
|
|
|
Use broadcast TLB flushing when that is available.
|
|
|
|
Signed-off-by: Rik van Riel <riel@surriel.com>
|
|
---
|
|
arch/x86/mm/tlb.c | 10 +++++++++-
|
|
1 file changed, 9 insertions(+), 1 deletion(-)
|
|
|
|
--- a/arch/x86/mm/tlb.c
|
|
+++ b/arch/x86/mm/tlb.c
|
|
@@ -1281,8 +1281,16 @@ EXPORT_SYMBOL_GPL(__flush_tlb_all);
|
|
void arch_tlbbatch_flush(struct arch_tlbflush_unmap_batch *batch)
|
|
{
|
|
struct flush_tlb_info *info;
|
|
+ int cpu;
|
|
|
|
- int cpu = get_cpu();
|
|
+ if (cpu_feature_enabled(X86_FEATURE_INVLPGB)) {
|
|
+ guard(preempt)();
|
|
+ invlpgb_flush_all_nonglobals();
|
|
+ tlbsync();
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ cpu = get_cpu();
|
|
|
|
info = get_flush_tlb_info(NULL, 0, TLB_FLUSH_ALL, 0, false,
|
|
TLB_GENERATION_INVALID);
|