diff --git a/src/kernel/cpu/cpu.c b/src/kernel/cpu/cpu.c index d27cb27..4c678d2 100644 --- a/src/kernel/cpu/cpu.c +++ b/src/kernel/cpu/cpu.c @@ -9,9 +9,10 @@ struct cpu __seg_gs *cpu = 0; void cpu_init() { + // Set up cpu struct struct cpu *c = P2V(pmm_calloc()); c->cpu = c; - write_msr(0xc0000102, (uint64_t)c); + write_msr(KERNEL_GS_BASE, (uint64_t)c); asm("swapgs"); interrupt_init(); diff --git a/src/kernel/cpu/registers.S b/src/kernel/cpu/registers.S index 2f0c7ea..fa9a113 100644 --- a/src/kernel/cpu/registers.S +++ b/src/kernel/cpu/registers.S @@ -49,7 +49,6 @@ read_msr: shl rdx, 32 add rax, rdx ret - .global write_msr write_msr: mov rcx, rdi diff --git a/src/kernel/include/cpu.h b/src/kernel/include/cpu.h index c34fdac..bc9e12c 100644 --- a/src/kernel/include/cpu.h +++ b/src/kernel/include/cpu.h @@ -26,5 +26,8 @@ uint64_t read_cr3(); void write_cr3(uint64_t); uint64_t read_cr4(); +// Model Specific Registers +// Functions defined in cpu/registers.S void write_msr(uint64_t reg, uint64_t value); uint64_t read_msr(uint64_t reg); +#define KERNEL_GS_BASE 0xC0000102