CeDOS - Commit 117cc75f

Merge branch 'hotfix/hardware-crash' into develop
Celina Sophie Kalus
Fri, 08 Dec 2023 20:35:21 +0100
2 files changed, 16 insertions(+), 8 deletions(-)
M kernel/mm/paging.ckernel/mm/paging.c

@@ -204,12 +204,15 @@

EXCEPTION(page_fault_isr, frame, error_code) { volatile VIRT_ADDR faulty_addr; __asm__ volatile ("mov %%cr2, %0" : "=a" (faulty_addr)); - + uint32_t pdir_index = PAGE_DIR_INDEX(faulty_addr); + uint32_t ptbl_index = PAGE_TABLE_INDEX(faulty_addr); + if (error_code & PAGE_FAULT_FLAGS_PRESENT) { kpanic("Page-protection violation!"); } else { PHYS_ADDR new_page = get_free_page(); - force_map_page_to_this(new_page, PAGE_DIR_INDEX(faulty_addr), PAGE_TABLE_INDEX(faulty_addr), PAGE_TABLE_FLAGS); + force_map_page_to_this(new_page, pdir_index, ptbl_index, PAGE_TABLE_FLAGS); + memset(PAGE_MAPPED_ADDR(pdir_index, ptbl_index), 0, PAGE_SIZE); } }
M kernel/sched/sched.ckernel/sched/sched.c

@@ -32,6 +32,7 @@ #endif

PROCESS* get_slot(void) { PROCESS *new_process = (PROCESS*)malloc(sizeof(PROCESS)); + memset(new_process, 0, sizeof(PROCESS)); return new_process; }

@@ -206,8 +207,13 @@

current_pid = 0; // create idle process - PROCESS_ID idle = sched_spawn(NULL, NULL, 0); - assert(idle == 0); + PROCESS_ID idle_pid = sched_spawn(NULL, NULL, 0); + assert(idle_pid == 0); + + PROCESS *idle = get_process(idle_pid); + assert(idle != NULL); + + idle->state = PSTATE_READY; return 1; }

@@ -217,8 +223,8 @@ crit_enter();

PROCESS *current = get_process(current_pid); uint32_t csc = crit_stash(); - sti(); INT(0x20); + sti(); crit_restore(csc); crit_exit();

@@ -258,14 +264,13 @@ for (PROCESS *child = process->child; child != NULL; child = child->next_sibling) {

sched_kill(child->id); } - remove_process(process->id); + process->state = PSTATE_TERMINATED; } else { success = 0; } - if (get_process(current_pid) == NULL) { + if (pid == current_pid) { // current process has terminated - crit_reset(); sched_yield(); }