[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20220708065957.3859-1-21cnbao@gmail.com>
Date: Fri, 8 Jul 2022 18:59:57 +1200
From: Barry Song <21cnbao@...il.com>
To: namit@...are.com
Cc: 21cnbao@...il.com, akpm@...ux-foundation.org, arnd@...db.de,
catalin.marinas@....com, corbet@....net,
darren@...amperecomputing.com, guojian@...o.com,
huzhanyuan@...o.com, linux-arm-kernel@...ts.infradead.org,
linux-doc@...r.kernel.org, linux-kernel@...r.kernel.org,
linux-mm@...ck.org, lipeifeng@...o.com, mgorman@...e.de,
realmz6@...il.com, v-songbaohua@...o.com, will@...nel.org,
x86@...nel.org, yangyicong@...ilicon.com, zhangshiming@...o.com
Subject: Re: [PATCH 2/4] mm: rmap: Allow platforms without mm_cpumask to defer TLB flush
> The cpumask_empty() is indeed just another memory access, which is most
> likely ok. But wouldn’t adding something like CONFIG_ARCH_HAS_MM_CPUMASK
> make the code simpler and (slightly, certainly slightly) more performant?
Yep. good suggestion, Nadav. So the code will be as below, right?
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index be0b95e51df6..a91d73866238 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -81,6 +81,7 @@ config X86
select ARCH_HAS_KCOV if X86_64
select ARCH_HAS_MEM_ENCRYPT
select ARCH_HAS_MEMBARRIER_SYNC_CORE
+ select ARCH_HAS_MM_CPUMASK
select ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE
select ARCH_HAS_PMEM_API if X86_64
select ARCH_HAS_PTE_DEVMAP if X86_64
diff --git a/mm/Kconfig b/mm/Kconfig
index 169e64192e48..7bf54f57ca01 100644
--- a/mm/Kconfig
+++ b/mm/Kconfig
@@ -951,6 +951,9 @@ config ARCH_HAS_CURRENT_STACK_POINTER
register alias named "current_stack_pointer", this config can be
selected.
+config ARCH_HAS_MM_CPUMASK
+ bool
+
config ARCH_HAS_VM_GET_PAGE_PROT
bool
diff --git a/mm/rmap.c b/mm/rmap.c
index 5bcb334cd6f2..13d4f9a1d4f1 100644
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -692,6 +692,10 @@ static bool should_defer_flush(struct mm_struct *mm, enum ttu_flags flags)
if (!(flags & TTU_BATCH_FLUSH))
return false;
+#ifndef CONFIG_ARCH_HAS_MM_CPUMASK
+ return true;
+#endif
+
/* If remote CPUs need to be flushed then defer batch the flush */
if (cpumask_any_but(mm_cpumask(mm), get_cpu()) < nr_cpu_ids)
should_defer = true;
Thanks
Barry
Powered by blists - more mailing lists