kernel: implement cpu IDs and per-cpu variables
This commit is contained in:
41
kernel/cpu.c
Normal file
41
kernel/cpu.c
Normal file
@@ -0,0 +1,41 @@
|
||||
#include <socks/cpu.h>
|
||||
#include <socks/percpu.h>
|
||||
#include <socks/bitmap.h>
|
||||
|
||||
DECLARE_BITMAP(cpu_available, CPU_MAX);
|
||||
DECLARE_BITMAP(cpu_online, CPU_MAX);
|
||||
|
||||
DEFINE_PERCPU_VAR(cpu_data_t, cpu_data);
|
||||
|
||||
cpu_data_t *get_this_cpu(void)
|
||||
{
|
||||
return percpu_get(&cpu_data);
|
||||
}
|
||||
|
||||
void put_cpu(cpu_data_t *cpu)
|
||||
{
|
||||
percpu_put(cpu);
|
||||
}
|
||||
|
||||
void cpu_set_available(unsigned int cpu_id)
|
||||
{
|
||||
if (cpu_id >= CPU_MAX) {
|
||||
return;
|
||||
}
|
||||
|
||||
bitmap_set(cpu_available, cpu_id);
|
||||
}
|
||||
|
||||
void cpu_set_online(unsigned int cpu_id)
|
||||
{
|
||||
if (cpu_id >= CPU_MAX) {
|
||||
return;
|
||||
}
|
||||
|
||||
bitmap_set(cpu_online, cpu_id);
|
||||
}
|
||||
|
||||
unsigned int cpu_get_highest_available(void)
|
||||
{
|
||||
return bitmap_highest_set(cpu_available, CPU_MAX);
|
||||
}
|
||||
Reference in New Issue
Block a user