33 lines
1.2 KiB
Diff
33 lines
1.2 KiB
Diff
From 7cf099de79e12d6c4949f733c8cbb241bb08f07a Mon Sep 17 00:00:00 2001
|
|
From: Rik van Riel <riel@surriel.com>
|
|
Date: Tue, 25 Feb 2025 22:00:41 -0500
|
|
Subject: x86/mm: Use broadcast TLB flushing in page reclaim
|
|
|
|
Page reclaim tracks only 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.
|
|
|
|
[ bp: Massage commit message. ]
|
|
|
|
Signed-off-by: Rik van Riel <riel@surriel.com>
|
|
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
|
|
Link: https://lore.kernel.org/r/20250226030129.530345-7-riel@surriel.com
|
|
---
|
|
arch/x86/mm/tlb.c | 4 +++-
|
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
|
|
|
--- a/arch/x86/mm/tlb.c
|
|
+++ b/arch/x86/mm/tlb.c
|
|
@@ -1339,7 +1339,9 @@ void arch_tlbbatch_flush(struct arch_tlb
|
|
* a local TLB flush is needed. Optimize this use-case by calling
|
|
* flush_tlb_func_local() directly in this case.
|
|
*/
|
|
- if (cpumask_any_but(&batch->cpumask, cpu) < nr_cpu_ids) {
|
|
+ if (cpu_feature_enabled(X86_FEATURE_INVLPGB)) {
|
|
+ invlpgb_flush_all_nonglobals();
|
|
+ } else if (cpumask_any_but(&batch->cpumask, cpu) < nr_cpu_ids) {
|
|
flush_tlb_multi(&batch->cpumask, info);
|
|
} else if (cpumask_test_cpu(cpu, &batch->cpumask)) {
|
|
lockdep_assert_irqs_enabled();
|