From 21e5f65e6c31fc96de5645a747bab0388648db8c Mon Sep 17 00:00:00 2001 From: mintsuki Date: Sat, 23 Sep 2023 13:27:58 -0500 Subject: [PATCH] smp: Remove dead 32-bit trampoline code --- common/protos/limine.c | 2 +- common/sys/smp.c | 12 +++++------- common/sys/smp.h | 1 - common/sys/smp_trampoline.asm_x86 | 31 ------------------------------- 4 files changed, 6 insertions(+), 40 deletions(-) diff --git a/common/protos/limine.c b/common/protos/limine.c index 37e93ba0..a7798e30 100644 --- a/common/protos/limine.c +++ b/common/protos/limine.c @@ -951,7 +951,7 @@ FEAT_START #if defined (__x86_64__) || defined (__i386__) uint32_t bsp_lapic_id; smp_info = init_smp(&cpu_count, &bsp_lapic_id, - true, paging_mode, + paging_mode, pagemap, smp_request->flags & LIMINE_SMP_X2APIC, nx_available, direct_map_offset, true); #elif defined (__aarch64__) diff --git a/common/sys/smp.c b/common/sys/smp.c index d01b94e0..e81a46cc 100644 --- a/common/sys/smp.c +++ b/common/sys/smp.c @@ -33,7 +33,7 @@ struct trampoline_passed_info { static bool smp_start_ap(uint32_t lapic_id, struct gdtr *gdtr, struct limine_smp_info *info_struct, - bool longmode, int paging_mode, uint32_t pagemap, + int paging_mode, uint32_t pagemap, bool x2apic, bool nx, uint64_t hhdm, bool wp) { // Prepare the trampoline static void *trampoline = NULL; @@ -53,10 +53,9 @@ static bool smp_start_ap(uint32_t lapic_id, struct gdtr *gdtr, passed_info->smp_tpl_booted_flag = 0; passed_info->smp_tpl_pagemap = pagemap; passed_info->smp_tpl_target_mode = ((uint32_t)x2apic << 2) - | ((uint32_t)paging_mode << 1) + | ((uint32_t)(paging_mode == PAGING_MODE_X86_64_5LVL) << 1) | ((uint32_t)nx << 3) - | ((uint32_t)wp << 4) - | ((uint32_t)longmode << 0); + | ((uint32_t)wp << 4); passed_info->smp_tpl_gdt = *gdtr; passed_info->smp_tpl_hhdm = hhdm; @@ -92,7 +91,6 @@ static bool smp_start_ap(uint32_t lapic_id, struct gdtr *gdtr, struct limine_smp_info *init_smp(size_t *cpu_count, uint32_t *_bsp_lapic_id, - bool longmode, int paging_mode, pagemap_t pagemap, bool x2apic, @@ -200,7 +198,7 @@ struct limine_smp_info *init_smp(size_t *cpu_count, // Try to start the AP if (!smp_start_ap(lapic->lapic_id, &gdtr, info_struct, - longmode, paging_mode, (uintptr_t)pagemap.top_level, + paging_mode, (uintptr_t)pagemap.top_level, x2apic, nx, hhdm, wp)) { print("smp: FAILED to bring-up AP\n"); continue; @@ -237,7 +235,7 @@ struct limine_smp_info *init_smp(size_t *cpu_count, // Try to start the AP if (!smp_start_ap(x2lapic->x2apic_id, &gdtr, info_struct, - longmode, paging_mode, (uintptr_t)pagemap.top_level, + paging_mode, (uintptr_t)pagemap.top_level, true, nx, hhdm, wp)) { print("smp: FAILED to bring-up AP\n"); continue; diff --git a/common/sys/smp.h b/common/sys/smp.h index c2f706d1..77a64235 100644 --- a/common/sys/smp.h +++ b/common/sys/smp.h @@ -12,7 +12,6 @@ struct limine_smp_info *init_smp(size_t *cpu_count, uint32_t *_bsp_lapic_id, - bool longmode, int paging_mode, pagemap_t pagemap, bool x2apic, diff --git a/common/sys/smp_trampoline.asm_x86 b/common/sys/smp_trampoline.asm_x86 index 59f581b0..688b333d 100644 --- a/common/sys/smp_trampoline.asm_x86 +++ b/common/sys/smp_trampoline.asm_x86 @@ -56,9 +56,6 @@ smp_trampoline_start: .nox2apic: lea esp, [ebx + (temp_stack.top - smp_trampoline_start)] - test dword [ebx + (passed_info.target_mode - smp_trampoline_start)], (1 << 0) - jz parking32 - mov eax, cr4 bts eax, 5 mov cr4, eax @@ -123,34 +120,6 @@ smp_trampoline_start: jmp rax -bits 32 -parking32: - mov edi, dword [ebx + (passed_info.smp_info_struct - smp_trampoline_start)] - mov eax, 1 - lock xchg dword [ebx + (passed_info.booted_flag - smp_trampoline_start)], eax - - xor eax, eax - .loop: - lock xadd dword [edi + 16], eax - test eax, eax - jnz .out - pause - jmp .loop - - .out: - mov esp, dword [edi + 8] - push 0 - push edi - push eax - xor eax, eax - xor ebx, ebx - xor ecx, ecx - xor edx, edx - xor esi, esi - xor edi, edi - xor ebp, ebp - ret - bits 64 parking64: mov ebx, ebx