Message ID | 20190822004644.25829-4-atish.patra@wdc.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Optimize tlbflush path | expand |
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 <atish.patra@wdc.com> > --- > 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.
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 <atish.patra@wdc.com> > > --- > > 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.
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);
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 <atish.patra@wdc.com> --- arch/riscv/mm/tlbflush.c | 3 +++ 1 file changed, 3 insertions(+)