From b62706c9f2ceed65394457ae9b131996a2b29463 Mon Sep 17 00:00:00 2001 From: Brett Weiland Date: Fri, 24 Sep 2021 14:20:20 -0500 Subject: [PATCH] palloc/pfree found smp safe --- README.md | 12 +++++- src/debug/gdbinit.gdb | 1 - src/include/panic.h | 1 + src/include/smp.h | 30 +++++++++---- src/include/smp_racetest.h | 2 +- src/indigo_os | Bin 45152 -> 0 bytes src/kernel/kernel.c | 6 ++- src/kernel/page.c | 37 +++++++++++----- src/kernel/panic.c | 5 ++- src/kernel/printf.c | 2 +- src/kernel/smp.c | 1 + src/kernel/smp_racetest.c | 84 +++++++++++++++++++++++++++++++++---- 12 files changed, 148 insertions(+), 33 deletions(-) delete mode 100755 src/indigo_os diff --git a/README.md b/README.md index f10c938..0566e9c 100644 --- a/README.md +++ b/README.md @@ -20,13 +20,21 @@ With all that out of the way, check out the features. This project will likely go very slow and take multiple years, as I'm dealing with things such as college and adulting. If there are blatantly obvious bugs, or things look unfinished, I'm still working on them. Additionally, there's some pretty messy code. I've improved while working on this project, so expect those things to be changed some time down the line. +# Just completed +1. palloc()/pfree() is now smp safe + # What I'm working on now -1. Ensuring palloc() and malloc() are smp safe (current) +1. Ensuring malloc()/free() is smp safe (current) 2. Creating kernel space threads with primitive scheduler 3. VFS filesystem 4. ACPI, PCI 5. ext2 filesystem 6. Userspace processes!!! 7. IO buffering, process waitlists -8. Improve scheduler +8. Implement permanent scheduler 9. Let's not get too ahead of ourselves... + +# Backlog +## These are things I want to evencually fix, but don't effect current development +1. Making the bootloader pass kernel command paramaters from fat filesystem. Bootloader has no filesystem and is part of kernel, this will be hard +2. Making mutexes more space efficent; right now we use a 16 bit variable for every boolean operation diff --git a/src/debug/gdbinit.gdb b/src/debug/gdbinit.gdb index 516deba..b8aa7f5 100644 --- a/src/debug/gdbinit.gdb +++ b/src/debug/gdbinit.gdb @@ -3,7 +3,6 @@ symbol-file debug/debug_syms.o set scheduler-locking step -hb page.c:357 define cs2bs print (1 << (5 + $arg0)) diff --git a/src/include/panic.h b/src/include/panic.h index 43712a2..29e9f85 100644 --- a/src/include/panic.h +++ b/src/include/panic.h @@ -53,6 +53,7 @@ void panic(int reason, void *frame_p, struct registers *regs); #define KERNEL_PANIC_INVALID_IOAPIC_VEC 36 #define KERNEL_PANIC_HPET_REQUIRED 37 #define KERNEL_PANIC_SMP_FAILED 38 +#define KERNEL_PANIC_PALLOC_TOO_LARGE 39 #define DEV_EMAIL "brett_weiland@bpcspace.com" diff --git a/src/include/smp.h b/src/include/smp.h index e331036..ba12c76 100644 --- a/src/include/smp.h +++ b/src/include/smp.h @@ -7,6 +7,7 @@ void smp_prepare(); extern uint8_t corecount; +/** static inline void lock(uint8_t *lock) { asm("mov al, 1\n" "spinlock:\n" @@ -16,30 +17,45 @@ static inline void lock(uint8_t *lock) { "jnz spinlock\n" ::"r"(lock):"al"); } +**/ +static inline void lock(uint16_t *mutex) { + asm(".spinlock_%=:\n" + "lock bts %0, 0\n" + "jnc .done_%=\n" + "pause\n" + "jmp .spinlock_%=\n" + ".done_%=:\n" + ::"m"(*mutex)); +} + +static inline void unlock(uint16_t *mutex) { + asm("lock btr %0, 0\n" + ::"m"(*mutex)); +} + +/** static inline void unlock(uint8_t *lock) { asm("lock andb [%0], 0"::"r"(lock)); } +**/ static inline bool get_set_mutex(uint16_t *mutex) { bool ret; asm("lock bts %1, 0\n" - "jc .mutex_taken\n" + "jc .mutex_taken_%=\n" "mov %0, 0\n" - "jmp .done\n" - ".mutex_taken:\n" + "jmp .done_%=\n" + ".mutex_taken_%=:\n" "mov %0, 1\n" - ".done:\n" + ".done_%=:\n" :"=r"(ret) :"m"(*mutex)); return ret; } - - //THIS IS ONLY UNTIL WE GET MULTITHREADING SET UP uint8_t get_coreid(); -#define CREATE_LOTO(name) #endif diff --git a/src/include/smp_racetest.h b/src/include/smp_racetest.h index 25ab7f3..f30c3be 100644 --- a/src/include/smp_racetest.h +++ b/src/include/smp_racetest.h @@ -1,6 +1,6 @@ #ifndef testmalloc_header #define testmalloc_header -void test_malloc(unsigned int cnt); +void racetest(); #endif diff --git a/src/indigo_os b/src/indigo_os deleted file mode 100755 index 821f97a363d1b4fc83fd02da37db436c876761f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45152 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 diff --git a/src/kernel/kernel.c b/src/kernel/kernel.c index 0aa394e..bc5bae8 100644 --- a/src/kernel/kernel.c +++ b/src/kernel/kernel.c @@ -23,7 +23,7 @@ void kmain() { printf("Kernal started on core %i\n", get_coreid()); - sync_malloc(); + racetest(); PANIC(KERNEL_PANIC_KERNEL_RETURNED); } @@ -49,7 +49,6 @@ void kernel_init() { init_klog(); init_pmap(pmap_size); printf("\nKernal started on core 1!\n"); - //test_malloc(100); find_root_sdp(); @@ -66,6 +65,9 @@ void kernel_init() { //the rest of this needs to get done before the cores start executing init_pmap_smp(); + + + smp_unlocked = true; fix_stack(); diff --git a/src/kernel/page.c b/src/kernel/page.c index 0b286a4..c79b1fa 100644 --- a/src/kernel/page.c +++ b/src/kernel/page.c @@ -100,7 +100,6 @@ void fix_stack() { :"r"(PA_OFFSET)); while(frame->next != 0) { - printf("%p\n", frame->function_base); frame->next = PHYS_TO_VIRT((void *)frame->next); frame = frame->next; } @@ -171,14 +170,13 @@ void debug_pmap() { } } -//TODO I know you don't want to, but you need to thoroughly check this. void pfree(void *addr, size_t size) { int blevel = 0; uint64_t *onbyte; uint64_t page_bitloc; int bbitlen; int lshift; - pmap_t *pmap = first_pmap; + pmap_t *pmap; /* note: there's no security check to see if the page is actually allocated, * or if we are freeing the table itself. @@ -192,10 +190,13 @@ void pfree(void *addr, size_t size) { return; } size /= 0x1000; - for(; pmap != 0; pmap = pmap->next) { + for(pmap = first_pmap; pmap; pmap = pmap->next) { page_bitloc = (addr - (void *)pmap) / 0x1000; onbyte = pmap->buddy[0] + (page_bitloc / 64); - if((addr >= (void *)pmap) && onbyte < pmap->buddy[1]) break; + if((addr >= (void *)pmap) && onbyte < pmap->buddy[1]) { + lock(&pmap->mutex); + break; + } } while(blevel < MAX_BUDDY_ORDER) { @@ -241,6 +242,7 @@ void pfree(void *addr, size_t size) { blevel++; } } + unlock(&pmap->mutex); } @@ -276,13 +278,10 @@ void *palloc(size_t size) { self_alloc = false; min_blevel = 63 - __builtin_clzl(size); if(size & (size - 1)) min_blevel++; - if(min_blevel > MAX_BUDDY_ORDER - 1) return 0; + if(min_blevel > MAX_BUDDY_ORDER - 1) PANIC(KERNEL_PANIC_PALLOC_TOO_LARGE); } for(blevel = min_blevel; blevel < MAX_BUDDY_ORDER; blevel++) { - //for(pmap = first_pmap; pmap != 0; pmap = pmap->next) { - //while(!unlocked_pmaps_searched || - // is_empty(waiting_pmaps[core_id], sizeof(&pmap) * pmap_count)) { pmap = first_pmap; while(pmap) { @@ -329,12 +328,13 @@ void *palloc(size_t size) { return ret; } } -get_next_pmap: pmap->mutex = 0; +get_next_pmap: if(unlocked_pmaps_searched) { pmap = 0; for(searchingp_i = waitingp_i + 1; searchingp_i < pmap_count; searchingp_i++) { if(waiting_pmaps[waitlist_i(searchingp_i)]) { + waitingp_i = searchingp_i; pmap = waiting_pmaps[waitlist_i(searchingp_i)]; break; } @@ -342,6 +342,7 @@ get_next_pmap: if(!pmap) { for(searchingp_i = 0; searchingp_i <= waitingp_i; searchingp_i++) { if(waiting_pmaps[waitlist_i(searchingp_i)]) { + waitingp_i = searchingp_i; pmap = waiting_pmaps[waitlist_i(searchingp_i)]; break; } @@ -350,6 +351,7 @@ get_next_pmap: } else { if(!pmap->next) { + waitingp_i = 0; pmap = waiting_pmaps ? waiting_pmaps[waitlist_i(0)] : 0; unlocked_pmaps_searched = true; } @@ -515,3 +517,18 @@ void *init_pmap(size_t pagetable_size) { } return pmap; } + +void lock_all_maps() { + pmap_t *pmap; + for(pmap = first_pmap; pmap; pmap = pmap->next) pmap->mutex = 1; + pmap = first_pmap; + pmap_count++; + for(pmap = first_pmap;;pmap = pmap->next) { + if(!pmap->next) { + pmap->next = malloc(sizeof(pmap_t)); + pmap->next->mutex = 1; + break; + } + } + first_pmap->mutex = 0; +} diff --git a/src/kernel/panic.c b/src/kernel/panic.c index 06b37da..17a563d 100644 --- a/src/kernel/panic.c +++ b/src/kernel/panic.c @@ -6,7 +6,7 @@ #include #include -static uint8_t panic_lock = 0; +static uint16_t panic_lock = 0; void panic(int reason, void *eframe_p, struct registers *regs) { // will fill with debugging info latter lock(&panic_lock); @@ -56,6 +56,9 @@ void panic(int reason, void *eframe_p, struct registers *regs) { // will fill wi case KERNEL_PANIC_SMP_FAILED: printf("\nNot all cores booted successfully (see text before panic).\n"); break; + case KERNEL_PANIC_PALLOC_TOO_LARGE: + printf("\npalloc was called with a size greater then supported.\n"); + break; default: printf("\nUnknown panic code %i\n.", reason); break; diff --git a/src/kernel/printf.c b/src/kernel/printf.c index 62261ec..8e33981 100644 --- a/src/kernel/printf.c +++ b/src/kernel/printf.c @@ -873,7 +873,7 @@ static int _vsnprintf(out_fct_type out, char* buffer, const size_t maxlen, const /////////////////////////////////////////////////////////////////////////////// -static uint8_t printf_lock = 0; +static uint16_t printf_lock = 0; int printf_(const char* format, ...) { //BRETT modification diff --git a/src/kernel/smp.c b/src/kernel/smp.c index a55fe49..662f9ed 100644 --- a/src/kernel/smp.c +++ b/src/kernel/smp.c @@ -101,6 +101,7 @@ void smp_prepare() { if(cores.apic_id[core_i] == cores.bsp) continue; stackarray[stack_i].apic_id = cores.apic_id[core_i]; stackarray[stack_i].stack = palloc(0x1000); + printf("core %i's stack: %lx\n", core_i, stackarray[stack_i].stack); stackarray[stack_i].secondary_bsp = (stack_i)? false : true; stack_i++; diff --git a/src/kernel/smp_racetest.c b/src/kernel/smp_racetest.c index f86e030..84321de 100644 --- a/src/kernel/smp_racetest.c +++ b/src/kernel/smp_racetest.c @@ -1,3 +1,6 @@ +//Disregard bad code here. +//I'm going to delete this whole file once I am confident smp is safe. + #define CHUNK_SIZE_FROM_INDEX(i) ((1 << ((i) + 5))) #include @@ -9,7 +12,7 @@ //will delete later -static uint8_t lockeroni = 0; +static uint16_t lockeroni = 0; void test_malloc(unsigned int cnt) { void *testchunks[cnt]; @@ -39,14 +42,79 @@ void test_malloc(unsigned int cnt) { printf("____________________________________\n"); unlock(&lockeroni); } -uint8_t cores_waiting = 4; -void sync_malloc() { - void *mtest; + +#define DEBUG_CORE_CNT 2 + +uint8_t cores_waiting = DEBUG_CORE_CNT; +uint8_t cores_waiting_2 = DEBUG_CORE_CNT; +uint8_t cores_waiting_3 = DEBUG_CORE_CNT; +uint8_t cores_waiting_4 = DEBUG_CORE_CNT; +uint8_t cores_waiting_5 = DEBUG_CORE_CNT; +void *smp_outputs[DEBUG_CORE_CNT]; + +void racetest() { + uint8_t core_id = get_coreid(); + uint8_t c_check; + unsigned int core_i; + asm("lock decb [%0]\n" - "spinlock:\n" + "spinlock_%=:\n" "cmpb [%0], 0\n" - "jnz spinlock\n" + "jnz spinlock_%=\n" ::"m"(cores_waiting)); - mtest = palloc(0x1000); - printf("Make sure none of these match -> %lx\n", mtest); + + smp_outputs[core_id] = palloc(0x1000); + printf("Make sure none of these match (palloc) -> %lx\n", smp_outputs[core_id]); + free(smp_outputs[core_id]); + + asm("lock decb [%0]\n" + "spinlock_%=:\n" + "cmpb [%0], 0\n" + "jnz spinlock_%=\n" + ::"m"(cores_waiting_2)); + + if(core_id == 0) { + for(core_i = 0; core_i < DEBUG_CORE_CNT; core_i++) { + for(c_check = core_i + 1; c_check < DEBUG_CORE_CNT; c_check++) { + if(smp_outputs[core_i] == smp_outputs[c_check]) { + printf("TEST FAILED\n"); + for(;;); + } + } + } + printf("TEST PASSED\n"); + printf("malloc beforehand: \n"); + debug_heap(); + } + + + asm("lock decb [%0]\n" + "spinlock_%=:\n" + "cmpb [%0], 0\n" + "jnz spinlock_%=\n" + ::"m"(cores_waiting_3)); + + + smp_outputs[core_id] = malloc(1); + printf("Make sure none of these match (malloc) -> %lx\n", smp_outputs[core_id]); + + asm("lock decb [%0]\n" + "spinlock_%=:\n" + "cmpb [%0], 0\n" + "jnz spinlock_%=\n" + ::"m"(cores_waiting_4)); + + if(core_id == 0) { + for(core_i = 0; core_i < DEBUG_CORE_CNT; core_i++) { + for(c_check = core_i + 1; c_check < DEBUG_CORE_CNT; c_check++) { + if(smp_outputs[core_i] == smp_outputs[c_check]) { + printf("TEST FAILED\n"); + for(;;); + } + } + } + printf("TEST PASSED\n"); + printf("malloc afterhand: \n"); + debug_heap(); + } }