summaryrefslogtreecommitdiff
path: root/kernel/src/scheduler
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/scheduler')
-rw-r--r--kernel/src/scheduler/ap_init.S11
-rw-r--r--kernel/src/scheduler/ap_startup.c8
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(;;) {