commit - 68d2febf4860768d02aaa134cfcac0fa3ee35508
commit + 836647ae0821cc54f898ee48617f06de87d6a654
blob - 38c0ad2754ae80a4a1dd4adba133b9acecc02196
blob + 29e1953aad0e1d7866a4c0f8bf9b70280a272e97
--- kernel/sched/task.c
+++ kernel/sched/task.c
sched_tick(void)
{
struct sched_cpu_state *state;
- struct sched_task *task;
- bool requeue;
if (!scheduler_started)
return;
state->tick_count++;
if (state->run_length > state->max_run_length)
state->max_run_length = state->run_length;
- task = state->current;
- requeue = task != NULL && !task->is_idle;
- if (state->need_resched) {
- state->need_resched = false;
- requeue = true;
- }
+ /* Set need_resched to trigger a context switch at a safe point */
+ state->need_resched = true;
/* Check for portal_recv timeouts (deadlock detection) */
deadlock_check_and_report();
- sched_switch(requeue);
}
void
blob - b589bbf3dfa668ad1860308d684d604e95eb8632
blob + f66a1c51bd3c85d97b594ba61a2769d5e365e88e
--- kernel/time/time.c
+++ kernel/time/time.c
#include "time/timer.h"
#include "sched/clock.h"
+#include "sched/task.h"
#include "mm/kmem.h"
#include "log/printk.h"
#include "log/serial.h"
serial_poll_rx();
timer_tick_count++;
sched_clock_tick(timer_tick_count);
+ sched_tick();
/* Timer discipline: detect drift and vector storms */
if (timer_last_tick_time != 0) {