Changeset View
Changeset View
Standalone View
Standalone View
head/sys/riscv/riscv/intr_machdep.c
Show First 20 Lines • Show All 201 Lines • ▼ Show 20 Lines | |||||
static void | static void | ||||
ipi_send(struct pcpu *pc, int ipi) | ipi_send(struct pcpu *pc, int ipi) | ||||
{ | { | ||||
u_long mask; | u_long mask; | ||||
CTR3(KTR_SMP, "%s: cpu=%d, ipi=%x", __func__, pc->pc_cpuid, ipi); | CTR3(KTR_SMP, "%s: cpu=%d, ipi=%x", __func__, pc->pc_cpuid, ipi); | ||||
atomic_set_32(&pc->pc_pending_ipis, ipi); | atomic_set_32(&pc->pc_pending_ipis, ipi); | ||||
mask = (1 << (pc->pc_cpuid)); | mask = (1 << pc->pc_hart); | ||||
sbi_send_ipi(&mask); | sbi_send_ipi(&mask); | ||||
CTR1(KTR_SMP, "%s: sent", __func__); | CTR1(KTR_SMP, "%s: sent", __func__); | ||||
} | } | ||||
void | void | ||||
ipi_all_but_self(u_int ipi) | ipi_all_but_self(u_int ipi) | ||||
Show All 28 Lines | ipi_selected(cpuset_t cpus, u_int ipi) | ||||
CTR1(KTR_SMP, "ipi_selected: ipi: %x", ipi); | CTR1(KTR_SMP, "ipi_selected: ipi: %x", ipi); | ||||
mask = 0; | mask = 0; | ||||
STAILQ_FOREACH(pc, &cpuhead, pc_allcpu) { | STAILQ_FOREACH(pc, &cpuhead, pc_allcpu) { | ||||
if (CPU_ISSET(pc->pc_cpuid, &cpus)) { | if (CPU_ISSET(pc->pc_cpuid, &cpus)) { | ||||
CTR3(KTR_SMP, "%s: pc: %p, ipi: %x\n", __func__, pc, | CTR3(KTR_SMP, "%s: pc: %p, ipi: %x\n", __func__, pc, | ||||
ipi); | ipi); | ||||
atomic_set_32(&pc->pc_pending_ipis, ipi); | atomic_set_32(&pc->pc_pending_ipis, ipi); | ||||
mask |= (1 << (pc->pc_cpuid)); | mask |= (1 << pc->pc_hart); | ||||
} | } | ||||
} | } | ||||
sbi_send_ipi(&mask); | sbi_send_ipi(&mask); | ||||
} | } | ||||
#endif | #endif | ||||
/* Interrupt machdep initialization routine. */ | /* Interrupt machdep initialization routine. */ | ||||
static void | static void | ||||
Show All 15 Lines |