membarrier: riscv: Add full memory barrier in switch_mm()
authorAndrea Parri <parri.andrea@gmail.com>
Wed, 31 Jan 2024 14:49:33 +0000 (15:49 +0100)
committerPalmer Dabbelt <palmer@rivosinc.com>
Thu, 15 Feb 2024 16:04:11 +0000 (08:04 -0800)
commitd6cfd1770f20392d7009ae1fdb04733794514fa9
treec2cd9f5a579cd13931cc7e78536e4211aa91eae0
parent6613476e225e090cc9aad49be7fa504e290dd33d
membarrier: riscv: Add full memory barrier in switch_mm()

The membarrier system call requires a full memory barrier after storing
to rq->curr, before going back to user-space.  The barrier is only
needed when switching between processes: the barrier is implied by
mmdrop() when switching from kernel to userspace, and it's not needed
when switching from userspace to kernel.

Rely on the feature/mechanism ARCH_HAS_MEMBARRIER_CALLBACKS and on the
primitive membarrier_arch_switch_mm(), already adopted by the PowerPC
architecture, to insert the required barrier.

Fixes: fab957c11efe2f ("RISC-V: Atomic and Locking Code")
Signed-off-by: Andrea Parri <parri.andrea@gmail.com>
Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Link: https://lore.kernel.org/r/20240131144936.29190-2-parri.andrea@gmail.com
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
MAINTAINERS
arch/riscv/Kconfig
arch/riscv/include/asm/membarrier.h [new file with mode: 0644]
arch/riscv/mm/context.c
kernel/sched/core.c