Skip to content

Commit 4ff4c74

Browse files
andrea-parripalmer-dabbelt
authored andcommitted
locking: Introduce prepare_sync_core_cmd()
Introduce an architecture function that architectures can use to set up ("prepare") SYNC_CORE commands. The function will be used by RISC-V to update its "deferred icache- flush" data structures (icache_stale_mask). Architectures defining prepare_sync_core_cmd() static inline need to select ARCH_HAS_PREPARE_SYNC_CORE_CMD. Suggested-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> 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-4-parri.andrea@gmail.com Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
1 parent a14d11a commit 4ff4c74

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

include/linux/sync_core.h

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,19 @@ static inline void sync_core_before_usermode(void)
1717
}
1818
#endif
1919

20-
#endif /* _LINUX_SYNC_CORE_H */
20+
#ifdef CONFIG_ARCH_HAS_PREPARE_SYNC_CORE_CMD
21+
#include <asm/sync_core.h>
22+
#else
23+
/*
24+
* This is a dummy prepare_sync_core_cmd() implementation that can be used on
25+
* all architectures which provide unconditional core serializing instructions
26+
* in switch_mm().
27+
* If your architecture doesn't provide such core serializing instructions in
28+
* switch_mm(), you may need to write your own functions.
29+
*/
30+
static inline void prepare_sync_core_cmd(struct mm_struct *mm)
31+
{
32+
}
33+
#endif
2134

35+
#endif /* _LINUX_SYNC_CORE_H */

init/Kconfig

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1970,6 +1970,9 @@ source "kernel/Kconfig.locks"
19701970
config ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE
19711971
bool
19721972

1973+
config ARCH_HAS_PREPARE_SYNC_CORE_CMD
1974+
bool
1975+
19731976
config ARCH_HAS_SYNC_CORE_BEFORE_USERMODE
19741977
bool
19751978

kernel/sched/membarrier.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,7 @@ static int membarrier_private_expedited(int flags, int cpu_id)
320320
MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE_READY))
321321
return -EPERM;
322322
ipi_func = ipi_sync_core;
323+
prepare_sync_core_cmd(mm);
323324
} else if (flags == MEMBARRIER_FLAG_RSEQ) {
324325
if (!IS_ENABLED(CONFIG_RSEQ))
325326
return -EINVAL;

0 commit comments

Comments
 (0)