linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/4] riscv: tlb flush improvements
@ 2023-08-01  8:53 Alexandre Ghiti
  2023-08-01  8:53 ` [PATCH v3 1/4] riscv: Improve flush_tlb() Alexandre Ghiti
                   ` (5 more replies)
  0 siblings, 6 replies; 22+ messages in thread
From: Alexandre Ghiti @ 2023-08-01  8:53 UTC (permalink / raw)
  To: Will Deacon, Aneesh Kumar K . V, Andrew Morton, Nick Piggin,
	Peter Zijlstra, Mayuresh Chitale, Vincent Chen, Paul Walmsley,
	Palmer Dabbelt, Albert Ou, linux-arch, linux-mm, linux-riscv,
	linux-kernel
  Cc: Alexandre Ghiti

This series optimizes the tlb flushes on riscv which used to simply
flush the whole tlb whatever the size of the range to flush or the size
of the stride.

Patch 3 introduces a threshold that is microarchitecture specific and
will very likely be modified by vendors, not sure though which mechanism
we'll use to do that (dt? alternatives? vendor initialization code?).

Next steps would be to implement:
- svinval extension as Mayuresh did here [1]
- BATCHED_UNMAP_TLB_FLUSH (I'll wait for arm64 patchset to land)
- MMU_GATHER_RCU_TABLE_FREE
- MMU_GATHER_MERGE_VMAS

Any other idea welcome.

[1] https://lore.kernel.org/linux-riscv/20230623123849.1425805-1-mchitale@ventanamicro.com/

Changes in v3:
- Add RB from Andrew, thanks!
- Unwrap a few lines, as suggested by Andrew
- Introduce defines for -1 constants used in tlbflush.c, as suggested by Andrew and Conor
- Use huge_page_size() directly instead of using the shift, as suggested by Andrew
- Remove misleading comments as suggested by Conor

Changes in v2:
- Make static tlb_flush_all_threshold, we'll figure out later how to
  override this value on a vendor basis, as suggested by Conor and Palmer
- Fix nommu build, as reported by Conor

Alexandre Ghiti (4):
  riscv: Improve flush_tlb()
  riscv: Improve flush_tlb_range() for hugetlb pages
  riscv: Make __flush_tlb_range() loop over pte instead of flushing the
    whole tlb
  riscv: Improve flush_tlb_kernel_range()

 arch/riscv/include/asm/tlb.h      |  8 ++-
 arch/riscv/include/asm/tlbflush.h | 12 ++--
 arch/riscv/mm/tlbflush.c          | 98 ++++++++++++++++++++++++++-----
 3 files changed, 99 insertions(+), 19 deletions(-)

-- 
2.39.2



^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2023-09-11  8:33 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-01  8:53 [PATCH v3 0/4] riscv: tlb flush improvements Alexandre Ghiti
2023-08-01  8:53 ` [PATCH v3 1/4] riscv: Improve flush_tlb() Alexandre Ghiti
2023-08-01  8:54 ` [PATCH v3 2/4] riscv: Improve flush_tlb_range() for hugetlb pages Alexandre Ghiti
2023-08-01  8:54 ` [PATCH v3 3/4] riscv: Make __flush_tlb_range() loop over pte instead of flushing the whole tlb Alexandre Ghiti
2023-08-01  8:54 ` [PATCH v3 4/4] riscv: Improve flush_tlb_kernel_range() Alexandre Ghiti
2023-09-06 11:48   ` Lad, Prabhakar
2023-09-06 12:01     ` Alexandre Ghiti
2023-09-06 12:08       ` Lad, Prabhakar
2023-09-06 12:18         ` Alexandre Ghiti
2023-09-06 12:23           ` Lad, Prabhakar
2023-09-06 12:43             ` Alexandre Ghiti
2023-09-06 13:16               ` Palmer Dabbelt
2023-09-06 13:54               ` Lad, Prabhakar
2023-09-07  9:05                 ` Alexandre Ghiti
2023-09-07 10:49                   ` Lad, Prabhakar
2023-09-08 12:34                     ` Alexandre Ghiti
2023-09-06 20:22     ` Nadav Amit
2023-09-07 13:47       ` Alexandre Ghiti
2023-09-09 19:00   ` Samuel Holland
2023-09-11  8:33     ` Alexandre Ghiti
2023-09-06 13:00 ` [PATCH v3 0/4] riscv: tlb flush improvements patchwork-bot+linux-riscv
2023-09-09 20:11 ` Samuel Holland

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox