diff options
author | Ian Moffett <ian@osmora.org> | 2025-09-16 23:18:03 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-09-16 23:19:30 -0400 |
commit | 8ae23738c78f58bea882dba11080d7052453e71d (patch) | |
tree | 93268fc5e4f8ca1025f882795c5badc0a56ec181 /src/sys/include/arch/amd64 | |
parent | c5ada50b5e897683c2317591331fa94f3ec1a2b1 (diff) |
kern/amd64: cpu: Make GDT per-cpu to match TSS
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'src/sys/include/arch/amd64')
-rw-r--r-- | src/sys/include/arch/amd64/gdt.h | 4 | ||||
-rw-r--r-- | src/sys/include/arch/amd64/mdcpu.h | 3 |
2 files changed, 5 insertions, 2 deletions
diff --git a/src/sys/include/arch/amd64/gdt.h b/src/sys/include/arch/amd64/gdt.h index ee52065..0a22b37 100644 --- a/src/sys/include/arch/amd64/gdt.h +++ b/src/sys/include/arch/amd64/gdt.h @@ -87,7 +87,7 @@ extern struct gdt_entry g_gdt_data[GDT_ENTRY_COUNT]; extern const struct gdtr g_gdtr; __always_inline static inline void -gdt_load(void) +gdt_load(struct gdtr *gdtr) { __ASMV("lgdt %0\n" "push %1\n" /* Push code segment selector */ @@ -102,7 +102,7 @@ gdt_load(void) " mov %%ax, %%gs\n" " mov %%ax, %%ss\n" : - : "m" (g_gdtr), "i"(KERNEL_CS), "i"(KERNEL_DS) + : "m" (*gdtr), "i"(KERNEL_CS), "i"(KERNEL_DS) : "rax", "memory" ); } diff --git a/src/sys/include/arch/amd64/mdcpu.h b/src/sys/include/arch/amd64/mdcpu.h index 3fccc42..d72836a 100644 --- a/src/sys/include/arch/amd64/mdcpu.h +++ b/src/sys/include/arch/amd64/mdcpu.h @@ -33,6 +33,7 @@ #include <sys/types.h> #include <sys/cdefs.h> #include <machine/tss.h> +#include <machine/gdt.h> #define md_spinwait() __ASMV("pause") #define md_intoff() __ASMV("cli") @@ -57,6 +58,8 @@ struct mdcore { uint8_t x2apic : 1; struct tss_entry tss; size_t lapic_tmr_freq; + struct gdt_entry gdt[GDT_ENTRY_COUNT]; + struct gdtr gdtr; }; #endif /* !_MACHINE_MDCPU_H_ */ |