]> git.ipfire.org Git - thirdparty/linux.git/commit
riscv: Only flush the mm icache when setting an exec pte
authorAlexandre Ghiti <alexghiti@rivosinc.com>
Fri, 2 Feb 2024 12:47:11 +0000 (13:47 +0100)
committerPalmer Dabbelt <palmer@rivosinc.com>
Wed, 20 Mar 2024 15:56:08 +0000 (08:56 -0700)
commit01261e24cfab69c65043e1e61168348ae23a64c2
tree448b71b90c07b95ce5f83d9eff3b7c9697d97c7d
parent28e4748e5e3d313056ed38abeff4b455abd02c1b
riscv: Only flush the mm icache when setting an exec pte

We used to emit a flush_icache_all() whenever a dirty executable
mapping is set in the page table but we can instead call
flush_icache_mm() which will only send IPIs to cores that currently run
this mm and add a deferred icache flush to the others.

The number of calls to sbi_remote_fence_i() (tested without IPI
support):

With a simple buildroot rootfs:
* Before: ~5k
* After :  4 (!)

Tested on HW, the boot to login is ~4.5% faster.

With an ubuntu rootfs:
* Before: ~24k
* After : ~13k

Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
Reviewed-by: Charlie Jenkins <charlie@rivosinc.com>
Link: https://lore.kernel.org/r/20240202124711.256146-1-alexghiti@rivosinc.com
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
arch/riscv/include/asm/pgtable.h
arch/riscv/mm/cacheflush.c
arch/riscv/mm/pgtable.c