3 #include <arch/barrier.h>
6 #include <arch/smp/atomic.h>
12 #define SYNCA (OTHER_HLS(working_hartid)->entry.sync_a)
13 #define SYNCB (OTHER_HLS(working_hartid)->entry.sync_b)
15 int hartid = read_csr(mhartid);
17 if (hartid != working_hartid) {
31 __asm__
volatile (
"wfi");
32 }
while ((read_csr(mip) &
MIP_MSIP) == 0);
34 HLS()->entry.fn(
HLS()->entry.arg);
56 int hartid = read_csr(mhartid);
59 die(
"must pass a non-null function pointer\n");
61 for (
int i = 0; i < CONFIG_MAX_CPUS; i++) {
66 for (
int i = 0; i < CONFIG_MAX_CPUS; i++)
71 die(
"entry fn not set\n");
73 HLS()->entry.fn(
HLS()->entry.arg);
#define atomic_set(v, val)
static int atomic_add(atomic_t *v, int inc)
void smp_resume(void(*fn)(void *), void *arg)
void smp_pause(int working_hartid)
void __noreturn die(const char *fmt,...)
void set_msip(int hartid, int val)