riscv: Stop emitting preventive sfence.vma for new userspace mappings with Svvptc
authorAlexandre Ghiti <alexghiti@rivosinc.com>
Wed, 17 Jul 2024 06:01:25 +0000 (08:01 +0200)
committerPalmer Dabbelt <palmer@rivosinc.com>
Sun, 15 Sep 2024 07:11:05 +0000 (00:11 -0700)
commit7a21b2e370dab780ddb3aa80f2a4c8ff97bddccc
treecc6cdd2d108ca49003d02733952cc758bc8d1546
parent503638e0babf364061bc50fca5103b00a56cc50a
riscv: Stop emitting preventive sfence.vma for new userspace mappings with Svvptc

The preventive sfence.vma were emitted because new mappings must be made
visible to the page table walker but Svvptc guarantees that it will
happen within a bounded timeframe, so no need to sfence.vma for the uarchs
that implement this extension, we will then take gratuitous (but very
unlikely) page faults, similarly to x86 and arm64.

This allows to drastically reduce the number of sfence.vma emitted:

* Ubuntu boot to login:
Before: ~630k sfence.vma
After:  ~200k sfence.vma

* ltp - mmapstress01
Before: ~45k
After:  ~6.3k

* lmbench - lat_pagefault
Before: ~665k
After:   832 (!)

* lmbench - lat_mmap
Before: ~546k
After:   718 (!)

Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
Link: https://lore.kernel.org/r/20240717060125.139416-5-alexghiti@rivosinc.com
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
arch/riscv/include/asm/pgtable.h
arch/riscv/mm/pgtable.c