From 191a6c47bdab11abc3df94ba4551346969d0fe86 Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Wed, 15 Oct 2025 21:05:31 -0400 Subject: kern/amd64: mp: Add idle threads per core Signed-off-by: Ian Moffett --- src/sys/arch/amd64/cpu/cpu_mp.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src/sys/arch') diff --git a/src/sys/arch/amd64/cpu/cpu_mp.c b/src/sys/arch/amd64/cpu/cpu_mp.c index c189c77..7b691e3 100644 --- a/src/sys/arch/amd64/cpu/cpu_mp.c +++ b/src/sys/arch/amd64/cpu/cpu_mp.c @@ -56,10 +56,19 @@ static volatile struct limine_smp_request g_smp_req = { .revision = 0 }; +static void +cpu_idle(void *) +{ + for (;;) { + __ASMV("pause"); + } +} + __dead static void ap_entry(struct limine_smp_info *) { struct pcore *pcore; + struct proc *curidle; spinlock_acquire(&lock); pcore = kalloc(sizeof(*pcore)); @@ -76,6 +85,7 @@ ap_entry(struct limine_smp_info *) corelist[ncores_up - 1] = pcore; atomic_inc_64(&ncores_up); + proc_ktd(&curidle, cpu_idle); spinlock_release(&lock); md_proc_idle(); @@ -106,6 +116,7 @@ bsp_ap_startup(void) struct limine_smp_response *resp = g_smp_req.response; struct limine_smp_info **cpus; struct mdcore *mdcore; + struct proc *curidle; uint32_t ncores, tmp; /* Sanity check */ @@ -139,6 +150,7 @@ bsp_ap_startup(void) printf("mp: bringing APs online...\n"); mdcore = &g_bsp.md; + proc_ktd(&curidle, cpu_idle); for (int i = 0; i < ncores; ++i) { if (mdcore->apic_id == cpus[i]->lapic_id) { continue; -- cgit v1.2.3