summaryrefslogtreecommitdiffstats
path: root/arch/riscv/mm/pgtable.c
diff options
context:
space:
mode:
authorAlexandre Ghiti <alexghiti@rivosinc.com>2024-02-02 13:47:11 +0100
committerPalmer Dabbelt <palmer@rivosinc.com>2024-03-20 08:56:08 -0700
commit01261e24cfab69c65043e1e61168348ae23a64c2 (patch)
tree448b71b90c07b95ce5f83d9eff3b7c9697d97c7d /arch/riscv/mm/pgtable.c
parent28e4748e5e3d313056ed38abeff4b455abd02c1b (diff)
downloadlinux-stable-01261e24cfab69c65043e1e61168348ae23a64c2.tar.gz
linux-stable-01261e24cfab69c65043e1e61168348ae23a64c2.tar.bz2
linux-stable-01261e24cfab69c65043e1e61168348ae23a64c2.zip
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>
Diffstat (limited to 'arch/riscv/mm/pgtable.c')
-rw-r--r--arch/riscv/mm/pgtable.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/riscv/mm/pgtable.c b/arch/riscv/mm/pgtable.c
index ef887efcb679..533ec9055fa0 100644
--- a/arch/riscv/mm/pgtable.c
+++ b/arch/riscv/mm/pgtable.c
@@ -10,7 +10,7 @@ int ptep_set_access_flags(struct vm_area_struct *vma,
pte_t entry, int dirty)
{
if (!pte_same(ptep_get(ptep), entry))
- __set_pte_at(ptep, entry);
+ __set_pte_at(vma->vm_mm, ptep, entry);
/*
* update_mmu_cache will unconditionally execute, handling both
* the case that the PTE changed and the spurious fault case.