mirror of
https://github.com/BoredDevNL/BoredOS.git
synced 2026-05-15 10:48:38 +00:00
FIX: gpf when closing boredword.c
This commit is contained in:
parent
2e28f860cb
commit
d8e680604c
2 changed files with 10 additions and 5 deletions
|
|
@ -45,7 +45,7 @@ isr%2_wrapper:
|
||||||
push r14
|
push r14
|
||||||
push r15
|
push r15
|
||||||
|
|
||||||
; Save SSE/FPU state
|
; Save SSE/FPU state (fxsave requires 16-byte alignment)
|
||||||
sub rsp, 512
|
sub rsp, 512
|
||||||
fxsave [rsp]
|
fxsave [rsp]
|
||||||
|
|
||||||
|
|
@ -164,7 +164,7 @@ exception_common:
|
||||||
push r14
|
push r14
|
||||||
push r15
|
push r15
|
||||||
|
|
||||||
; Save SSE/FPU state
|
; Save SSE/FPU state (fxsave requires 16-byte alignment)
|
||||||
sub rsp, 512
|
sub rsp, 512
|
||||||
fxsave [rsp]
|
fxsave [rsp]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ int process_count = 0;
|
||||||
static process_t* current_process[MAX_CPUS_SCHED] = {0}; // Per-CPU
|
static process_t* current_process[MAX_CPUS_SCHED] = {0}; // Per-CPU
|
||||||
static uint32_t next_pid = 0;
|
static uint32_t next_pid = 0;
|
||||||
static void *free_kernel_stack_later = NULL;
|
static void *free_kernel_stack_later = NULL;
|
||||||
|
static uint64_t free_pml4_later = 0;
|
||||||
static spinlock_t runqueue_lock = SPINLOCK_INIT;
|
static spinlock_t runqueue_lock = SPINLOCK_INIT;
|
||||||
static uint32_t next_cpu_assign = 1; // Round-robin CPU assignment (start from CPU 1)
|
static uint32_t next_cpu_assign = 1; // Round-robin CPU assignment (start from CPU 1)
|
||||||
|
|
||||||
|
|
@ -379,6 +380,11 @@ uint64_t process_schedule(uint64_t current_rsp) {
|
||||||
kfree(free_kernel_stack_later);
|
kfree(free_kernel_stack_later);
|
||||||
free_kernel_stack_later = NULL;
|
free_kernel_stack_later = NULL;
|
||||||
}
|
}
|
||||||
|
if (free_pml4_later) {
|
||||||
|
extern void paging_destroy_user_pml4_phys(uint64_t pml4_phys);
|
||||||
|
paging_destroy_user_pml4_phys(free_pml4_later);
|
||||||
|
free_pml4_later = 0;
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t my_cpu = smp_this_cpu_id();
|
uint32_t my_cpu = smp_this_cpu_id();
|
||||||
process_t *cur = current_process[my_cpu];
|
process_t *cur = current_process[my_cpu];
|
||||||
|
|
@ -524,9 +530,8 @@ void process_terminate(process_t *to_delete) {
|
||||||
to_delete->cpu_affinity = 0xFFFFFFFF;
|
to_delete->cpu_affinity = 0xFFFFFFFF;
|
||||||
|
|
||||||
if (to_delete->user_stack_alloc) kfree(to_delete->user_stack_alloc);
|
if (to_delete->user_stack_alloc) kfree(to_delete->user_stack_alloc);
|
||||||
if (to_delete->kernel_stack_alloc) {
|
// Defer kernel stack until we switch away from it
|
||||||
kfree(to_delete->kernel_stack_alloc);
|
to_delete->kernel_stack_alloc = NULL;
|
||||||
}
|
|
||||||
|
|
||||||
extern void paging_destroy_user_pml4_phys(uint64_t pml4_phys);
|
extern void paging_destroy_user_pml4_phys(uint64_t pml4_phys);
|
||||||
if (to_delete->pml4_phys && to_delete->is_user) {
|
if (to_delete->pml4_phys && to_delete->is_user) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue