From e29d9d7a9d60b91a19c4f66a8153a8ff67acb69e Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Sun, 1 Jun 2025 19:00:20 -0400 Subject: kernel/amd64: mp: Keep track of CPUs by index Signed-off-by: Ian Moffett --- sys/arch/amd64/amd64/mp.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'sys/arch') diff --git a/sys/arch/amd64/amd64/mp.c b/sys/arch/amd64/amd64/mp.c index 22561d7..fe0dd9f 100644 --- a/sys/arch/amd64/amd64/mp.c +++ b/sys/arch/amd64/amd64/mp.c @@ -29,6 +29,7 @@ #include #include +#include #include #include #include @@ -46,6 +47,8 @@ static volatile struct limine_smp_request g_smp_req = { }; static volatile uint32_t ncpu_up = 0; +static struct cpu_info *ci_list[CPU_MAX]; +static struct spinlock ci_list_lock = {0}; static void ap_trampoline(struct limine_smp_info *si) @@ -57,11 +60,31 @@ ap_trampoline(struct limine_smp_info *si) memset(ci, 0, sizeof(*ci)); cpu_startup(ci); + spinlock_acquire(&ci_list_lock); + ci_list[ncpu_up] = ci; + spinlock_release(&ci_list_lock); + atomic_inc_int(&ncpu_up); sched_enter(); while (1); } +struct cpu_info * +cpu_get(uint32_t index) +{ + if (index >= ncpu_up) { + return NULL; + } + + return ci_list[index]; +} + +uint32_t +cpu_count(void) +{ + return ncpu_up; +} + void mp_bootstrap_aps(struct cpu_info *ci) { -- cgit v1.2.3