[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ZZV3ZDa7eS+Ecc4i@xhacker>
Date: Wed, 3 Jan 2024 23:04:04 +0800
From: Jisheng Zhang <jszhang@...nel.org>
To: Samuel Holland <samuel.holland@...ive.com>
Cc: Palmer Dabbelt <palmer@...belt.com>, linux-riscv@...ts.infradead.org,
linux-kernel@...r.kernel.org, linux-mm@...ck.org,
Alexandre Ghiti <alexghiti@...osinc.com>
Subject: Re: [PATCH v4 04/12] riscv: Only send remote fences when some other
CPU is online
On Wed, Jan 03, 2024 at 10:58:01PM +0800, Jisheng Zhang wrote:
> On Tue, Jan 02, 2024 at 02:00:41PM -0800, Samuel Holland wrote:
> > If no other CPU is online, a local cache or TLB flush is sufficient.
> > These checks can be constant-folded when SMP is disabled.
> >
> > Signed-off-by: Samuel Holland <samuel.holland@...ive.com>
> > ---
> >
> > Changes in v4:
> > - New patch for v4
> >
> > arch/riscv/mm/cacheflush.c | 4 +++-
> > arch/riscv/mm/tlbflush.c | 4 +++-
> > 2 files changed, 6 insertions(+), 2 deletions(-)
> >
> > diff --git a/arch/riscv/mm/cacheflush.c b/arch/riscv/mm/cacheflush.c
> > index 47c485bc7df0..f7933ae88a55 100644
> > --- a/arch/riscv/mm/cacheflush.c
> > +++ b/arch/riscv/mm/cacheflush.c
> > @@ -21,7 +21,9 @@ void flush_icache_all(void)
> > {
> > local_flush_icache_all();
> >
> > - if (riscv_use_sbi_for_rfence())
> > + if (num_online_cpus() < 2)
>
> with patch5, I think it's better to short cut for !SMP, I.E
> if (!IS_ENABLED(CONFIG_SMP) || num_online_cpus()) < 2)
aha, plz ignore this comment, I see the num_online_cpus() is defined as 1U for
UP.
>
> so that the UP case can avoid a atomic read and check
>
> > + return;
> > + else if (riscv_use_sbi_for_rfence())
> > sbi_remote_fence_i(NULL);
> > else
> > on_each_cpu(ipi_remote_fence_i, NULL, 1);
> > diff --git a/arch/riscv/mm/tlbflush.c b/arch/riscv/mm/tlbflush.c
> > index 2f18fe6fc4f3..37b3c93e3c30 100644
> > --- a/arch/riscv/mm/tlbflush.c
> > +++ b/arch/riscv/mm/tlbflush.c
> > @@ -73,7 +73,9 @@ static void __ipi_flush_tlb_all(void *info)
> >
> > void flush_tlb_all(void)
> > {
> > - if (riscv_use_sbi_for_rfence())
> > + if (num_online_cpus() < 2)
>
> ditto
>
> > + local_flush_tlb_all();
> > + else if (riscv_use_sbi_for_rfence())
> > sbi_remote_sfence_vma_asid(NULL, 0, FLUSH_TLB_MAX_SIZE, FLUSH_TLB_NO_ASID);
> > else
> > on_each_cpu(__ipi_flush_tlb_all, NULL, 1);
> > --
> > 2.42.0
> >
> >
> > _______________________________________________
> > linux-riscv mailing list
> > linux-riscv@...ts.infradead.org
> > http://lists.infradead.org/mailman/listinfo/linux-riscv
Powered by blists - more mailing lists