riscv: only use IPIs to handle cache-flushes on remote
From: Heiko Stuebner <heiko@...> Date: Fri, 10 Dec 2021 16:19:19 +0100
Commit-Message
Right now, the flush_icache functions always use the SBI remote-fence when SBI is available, leaving using IPIs as a fallback mechanism. IPIs on the other hand are more flexible, as the ipi_ops are initially set to go through SBI but later will be overwritten to go through the ACLINT/CLINT. In a discussion we had, Nick was of the opinion that "In general we should prefer doing IPIs on S-mode through CLINT instead of going through SBI/M-mode, so IMHO we should only be using on_each_cpu_mask(ipi_remote_fence_i) on flush_icache_all()/ flush_icache_mm() and remove any explicit calls to sbi_remote_fence_i(), because this way we continue using SBI for doing remote fences even after CLINT/ACLINT driver is registered, instead of using direct IPIs through CLINT/ACLINT." So follow this suggestion and just do ipi calls to have the proper kernel parts do them, This also fixes the null-ptr dereference happening when flush_icache_all() is called before sbi_init(). Suggested-by: Nick Kossifidis <mick@...> Signed-off-by: Heiko Stuebner <heiko@...>
Patch-Comment
arch/riscv/mm/cacheflush.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-)
Statistics
- 1 lines added
- 7 lines removed