kernel/smp: Deduplicate call_*_cpu.

* Rename call_single_cpu for consistency.

 * Combine call_all_cpus implementations into one, like call_single_cpu.
This commit is contained in:
Augustin Cavalier
2026-03-10 15:33:33 -04:00
parent 334e90a2ac
commit e867e95538
+14 -24
View File
@@ -1384,7 +1384,7 @@ smp_get_current_cpu(void)
static void static void
_call_single_cpu(uint32 targetCPU, void (*func)(void*, int), void* cookie, bool sync) call_single_cpu(uint32 targetCPU, void (*func)(void*, int), void* cookie, bool sync)
{ {
cpu_status state = disable_interrupts(); cpu_status state = disable_interrupts();
@@ -1411,22 +1411,22 @@ _call_single_cpu(uint32 targetCPU, void (*func)(void*, int), void* cookie, bool
void void
call_single_cpu(uint32 targetCPU, void (*func)(void*, int), void* cookie) call_single_cpu(uint32 targetCPU, void (*func)(void*, int), void* cookie)
{ {
return _call_single_cpu(targetCPU, func, cookie, false); return call_single_cpu(targetCPU, func, cookie, false);
} }
void void
call_single_cpu_sync(uint32 targetCPU, void (*func)(void*, int), void* cookie) call_single_cpu_sync(uint32 targetCPU, void (*func)(void*, int), void* cookie)
{ {
return _call_single_cpu(targetCPU, func, cookie, true); return call_single_cpu(targetCPU, func, cookie, true);
} }
// #pragma mark - public exported functions // #pragma mark - public exported functions
void static void
call_all_cpus(void (*func)(void*, int), void* cookie) call_all_cpus(void (*func)(void*, int), void* cookie, bool sync)
{ {
cpu_status state = disable_interrupts(); cpu_status state = disable_interrupts();
@@ -1439,7 +1439,7 @@ call_all_cpus(void (*func)(void*, int), void* cookie)
if (smp_get_num_cpus() > 1) { if (smp_get_num_cpus() > 1) {
smp_send_broadcast_ici(SMP_MSG_CALL_FUNCTION, (addr_t)cookie, smp_send_broadcast_ici(SMP_MSG_CALL_FUNCTION, (addr_t)cookie,
0, 0, (void*)func, SMP_MSG_FLAG_ASYNC); 0, 0, (void*)func, sync ? SMP_MSG_FLAG_SYNC : SMP_MSG_FLAG_ASYNC);
} }
// we need to call this function ourselves as well // we need to call this function ourselves as well
@@ -1449,27 +1449,17 @@ call_all_cpus(void (*func)(void*, int), void* cookie)
} }
void
call_all_cpus(void (*func)(void*, int), void* cookie)
{
call_all_cpus(func, cookie, false);
}
void void
call_all_cpus_sync(void (*func)(void*, int), void* cookie) call_all_cpus_sync(void (*func)(void*, int), void* cookie)
{ {
cpu_status state = disable_interrupts(); call_all_cpus(func, cookie, true);
// if inter-CPU communication is not yet enabled, use the early mechanism
if (!sICIEnabled) {
call_all_cpus_early(func, cookie);
restore_interrupts(state);
return;
}
if (smp_get_num_cpus() > 1) {
smp_send_broadcast_ici(SMP_MSG_CALL_FUNCTION, (addr_t)cookie,
0, 0, (void*)func, SMP_MSG_FLAG_SYNC);
}
// we need to call this function ourselves as well
func(cookie, smp_get_current_cpu());
restore_interrupts(state);
} }