From b98334db285bb99701b8a9a47cf028b57e584925 Mon Sep 17 00:00:00 2001 From: "Justin C. Miller" Date: Sun, 2 Aug 2020 18:13:09 -0700 Subject: [PATCH] [kernel] Don't keep creating new processes for kernel tasks The scheduler was making new process objects every time it made kernel task threads. Don't do that. --- src/kernel/scheduler.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/kernel/scheduler.cpp b/src/kernel/scheduler.cpp index 8c5a80d..06f6a11 100644 --- a/src/kernel/scheduler.cpp +++ b/src/kernel/scheduler.cpp @@ -47,6 +47,7 @@ scheduler::scheduler(lapic *apic) : reinterpret_cast(&idle_stack_end)); log::debug(logs::task, "Idle thread koid %llx", idle->koid()); + log::debug(logs::task, "Kernel PML4 %llx", pml4); auto *tcb = idle->tcb(); m_runlists[max_priority].push_back(tcb); @@ -181,20 +182,16 @@ void scheduler::create_kernel_task(void (*task)(), uint8_t priority, bool constant) { page_table *pml4 = page_manager::get()->get_kernel_pml4(); - thread *th = create_process(pml4, false); + thread *th = m_kernel_process->create_thread(priority, false); auto *tcb = th->tcb(); - uint16_t kcs = (1 << 3) | 0; // Kernel CS is GDT entry 1, ring 0 - uint16_t kss = (2 << 3) | 0; // Kernel SS is GDT entry 2, ring 0 - th->add_thunk_kernel(reinterpret_cast(task)); - tcb->priority = priority; - tcb->pml4 = page_manager::get()->get_kernel_pml4(); + tcb->time_left = quantum(priority); if (constant) th->set_state(thread::state::constant); - m_runlists[default_priority].push_back(tcb); + m_runlists[priority].push_back(tcb); log::debug(logs::task, "Creating kernel task: thread %llx pri %d", th->koid(), tcb->priority); log::debug(logs::task, " RSP0 %016lx", tcb->rsp0); @@ -337,8 +334,11 @@ scheduler::schedule() bsp_cpu_data.p = &th->parent(); thread *next_thread = thread::from_tcb(m_current); - log::debug(logs::task, "Scheduler switching threads %llx->%llx, priority %d time left %d @ %lld.", - th->koid(), next_thread->koid(), m_current->priority, m_current->time_left, m_clock); + log::debug(logs::task, "Scheduler switching threads %llx->%llx", + th->koid(), next_thread->koid()); + log::debug(logs::task, " priority %d time left %d @ %lld.", + m_current->priority, m_current->time_left, m_clock); + log::debug(logs::task, " PML4 %llx", m_current->pml4); task_switch(m_current); }