From 53069ae43ea997d51d2b985a26fffdb86a59b023 Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Wed, 22 Feb 2023 18:36:16 +0100 Subject: spinlocks in printf --- kernel/src/apic/apic.c | 14 +++++--------- kernel/src/apic/ioapic.c | 4 ++-- kernel/src/apic/madt.c | 3 --- 3 files changed, 7 insertions(+), 14 deletions(-) (limited to 'kernel/src/apic') diff --git a/kernel/src/apic/apic.c b/kernel/src/apic/apic.c index ba9138d..7fa57bf 100644 --- a/kernel/src/apic/apic.c +++ b/kernel/src/apic/apic.c @@ -7,7 +7,8 @@ #include mutex_t cnt_lock; -uint32_t cnt = 0; +uint32_t ap_cnt = 0; +uint32_t bspdone = 0; uint32_t ioapic_addr = 0; uint64_t lapic_addr = 0; uint32_t numcores = 0; @@ -26,10 +27,6 @@ uint8_t curr_cpu_apic_id() void init_ap_cpus() { uint8_t bspid = curr_cpu_apic_id(); - uint8_t* bspdone = (uint8_t*)0x3000100; - uint8_t* aprunning = (uint8_t*)0x3000200; - *bspdone = 0; - *aprunning = 0; init_mutex(&cnt_lock); map_addr(lapic_addr, lapic_addr, FLAG_PRESENT); @@ -74,8 +71,7 @@ void init_ap_cpus() } } - *bspdone = 1; - wait(1000); - printf("aprunning: %d\n", *aprunning); - printf("cnt: %d\n", cnt); + bspdone = 1; + wait(10); + printf("ap_cnt: %d\n", ap_cnt); } diff --git a/kernel/src/apic/ioapic.c b/kernel/src/apic/ioapic.c index 73c58d0..4c3fd69 100644 --- a/kernel/src/apic/ioapic.c +++ b/kernel/src/apic/ioapic.c @@ -58,11 +58,11 @@ void ioapic_set_irq(uint8_t irq, uint64_t apic_id, uint8_t vector) void apic_remap_interrupts() { - uint8_t bspid = curr_cpu_apic_id(); - map_addr(ioapic_addr, ioapic_addr, FLAG_PRESENT); map_addr(lapic_addr, lapic_addr, FLAG_PRESENT); + uint8_t bspid = curr_cpu_apic_id(); + // irq is 2 because of gsi remap ioapic_set_irq(0x2, bspid, 0x20); // timer ioapic_set_irq(0x1, bspid, 0x21); // keyboard diff --git a/kernel/src/apic/madt.c b/kernel/src/apic/madt.c index ad0720e..8a1e51d 100644 --- a/kernel/src/apic/madt.c +++ b/kernel/src/apic/madt.c @@ -18,9 +18,6 @@ void parse_madt() memcpy(madt, madt_addr, sizeof(struct MADT)); lapic_addr = madt->lapic_addr; - printf("curr_cpu_apic_id: 0x%x\n", curr_cpu_apic_id()); - printf("lapic_addr: 0x%x\n", lapic_addr); - for (size_t curr_size = sizeof(struct MADT); curr_size < madt->h.Length;) { struct MADT_type_header* m = (struct MADT_type_header*)kalloc(sizeof(struct MADT_type_header)); memcpy(m, (uint64_t*)((uint64_t)madt_addr + (uint64_t)curr_size), sizeof(struct MADT_type_header)); -- cgit v1.2.3