Re: [PATCH v3 3/3] RISC-V: Do not invoke SBI call if cpumask is empty
On Thu, 2019-08-22 at 03:51 +0200, Christoph Hellwig wrote: > On Wed, Aug 21, 2019 at 05:46:44PM -0700, Atish Patra wrote: > > SBI calls are expensive. If cpumask is empty, there is no need to > > trap via SBI as no remote tlb flushing is required. > > > > Signed-off-by: Atish Patra > > --- > > arch/riscv/mm/tlbflush.c | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/arch/riscv/mm/tlbflush.c b/arch/riscv/mm/tlbflush.c > > index 9f58b3790baa..2bd3c418d769 100644 > > --- a/arch/riscv/mm/tlbflush.c > > +++ b/arch/riscv/mm/tlbflush.c > > @@ -21,6 +21,9 @@ static void __sbi_tlb_flush_range(struct cpumask > > *cmask, unsigned long start, > > goto issue_sfence; > > } > > > > + if (cpumask_empty(cmask)) > > + goto done; > > I think this can even be done before the get_cpu to optimize it a > little > further. Yeah. I can just return directly in this case and call get_cpu after this. Thanks for the suggestion. -- Regards, Atish
Re: [PATCH v3 3/3] RISC-V: Do not invoke SBI call if cpumask is empty
On Wed, Aug 21, 2019 at 05:46:44PM -0700, Atish Patra wrote: > SBI calls are expensive. If cpumask is empty, there is no need to > trap via SBI as no remote tlb flushing is required. > > Signed-off-by: Atish Patra > --- > arch/riscv/mm/tlbflush.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/arch/riscv/mm/tlbflush.c b/arch/riscv/mm/tlbflush.c > index 9f58b3790baa..2bd3c418d769 100644 > --- a/arch/riscv/mm/tlbflush.c > +++ b/arch/riscv/mm/tlbflush.c > @@ -21,6 +21,9 @@ static void __sbi_tlb_flush_range(struct cpumask *cmask, > unsigned long start, > goto issue_sfence; > } > > + if (cpumask_empty(cmask)) > + goto done; I think this can even be done before the get_cpu to optimize it a little further.
[PATCH v3 3/3] RISC-V: Do not invoke SBI call if cpumask is empty
SBI calls are expensive. If cpumask is empty, there is no need to trap via SBI as no remote tlb flushing is required. Signed-off-by: Atish Patra --- arch/riscv/mm/tlbflush.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/riscv/mm/tlbflush.c b/arch/riscv/mm/tlbflush.c index 9f58b3790baa..2bd3c418d769 100644 --- a/arch/riscv/mm/tlbflush.c +++ b/arch/riscv/mm/tlbflush.c @@ -21,6 +21,9 @@ static void __sbi_tlb_flush_range(struct cpumask *cmask, unsigned long start, goto issue_sfence; } + if (cpumask_empty(cmask)) + goto done; + if (cpumask_test_cpu(cpuid, cmask) && cpumask_weight(cmask) == 1) { if (size <= PAGE_SIZE && size != -1) local_flush_tlb_page(start); -- 2.21.0