diff options
| author | Aleksa Vuckovic <aleksa@vuckovic.cc> | 2023-02-22 18:36:16 +0100 |
|---|---|---|
| committer | Aleksa Vuckovic <aleksa@vuckovic.cc> | 2023-02-22 18:36:16 +0100 |
| commit | 53069ae43ea997d51d2b985a26fffdb86a59b023 (patch) | |
| tree | 173e9a3c452e2116db9a82f06de3761b97d6605b /kernel/src/scheduler | |
| parent | 57e6722453c27d35a3b02309ce21263d225a23e3 (diff) | |
spinlocks in printf
Diffstat (limited to 'kernel/src/scheduler')
| -rw-r--r-- | kernel/src/scheduler/ap_init.S | 11 | ||||
| -rw-r--r-- | kernel/src/scheduler/ap_startup.c | 8 |
2 files changed, 6 insertions, 13 deletions
diff --git a/kernel/src/scheduler/ap_init.S b/kernel/src/scheduler/ap_init.S index 17cffab..47efc6f 100644 --- a/kernel/src/scheduler/ap_init.S +++ b/kernel/src/scheduler/ap_init.S @@ -3,8 +3,6 @@ .SET stack_top, 0x3008000 .SET stack_off, 0x8000 -.SET bspdone, 0x3000100 -.SET aprunning, 0x3000200 .code16 ap_trampoline: @@ -53,17 +51,9 @@ _start32: cmp $0, %ecx jne 22b - -# spinlock, wait for the BSP to finish -11: - pause - cmpb $0, bspdone - jz 11b - call enable_paging lgdt gdtp - # jump into C code (should never return) ljmp $8, $_start64 @@ -86,5 +76,4 @@ _start64: .section .text _higher_half: - lock incb aprunning call ap_startup diff --git a/kernel/src/scheduler/ap_startup.c b/kernel/src/scheduler/ap_startup.c index 0d37a6c..4e70f17 100644 --- a/kernel/src/scheduler/ap_startup.c +++ b/kernel/src/scheduler/ap_startup.c @@ -10,9 +10,13 @@ void ap_startup(void) { load_gdt(&gdt_pointer); load_pt_lvl4(page_table_lvl4); - lock(cnt_lock); + while (bspdone) { + __asm__ __volatile__ ("pause;"); + } + printf("curr_cpu_apic_id: 0x%x\n", curr_cpu_apic_id()); - cnt++; + lock(cnt_lock); + ap_cnt++; unlock(cnt_lock); for(;;) { |
