diff options
author | Anton Kling <anton@kling.gg> | 2024-07-04 20:22:32 +0200 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2024-07-04 23:04:18 +0200 |
commit | 59893c116e9e4e5dd04c24c0ba2fd06fe1936500 (patch) | |
tree | 8fcc557177a4fc2bd4648f2032e7fbd320898f6c | |
parent | afc2b4d4766b0e4ee8519ac6fcd98353d3864322 (diff) |
scheduler: Use get_uptime() since it caches the result
Apparently getting the current TSC is a expensive operation. This change
had a significant improvements for I/O heavy applications.
-rw-r--r-- | kernel/init/kernel.c | 2 | ||||
-rw-r--r-- | kernel/sched/scheduler.c | 2 | ||||
-rw-r--r-- | kernel/timer.c | 2 |
3 files changed, 3 insertions, 3 deletions
diff --git a/kernel/init/kernel.c b/kernel/init/kernel.c index 868cfb1..61e863b 100644 --- a/kernel/init/kernel.c +++ b/kernel/init/kernel.c @@ -131,7 +131,7 @@ void kernel_main(u32 kernel_end, unsigned long magic, unsigned long addr, } } for (;;) { - current_task->sleep_until = timer_get_ms() + 100000000; + current_task->sleep_until = timer_get_uptime() + 100000000; wait_for_interrupt(); } } diff --git a/kernel/sched/scheduler.c b/kernel/sched/scheduler.c index 10ecd73..a77e1e0 100644 --- a/kernel/sched/scheduler.c +++ b/kernel/sched/scheduler.c @@ -434,7 +434,7 @@ extern PageDirectory *active_directory; process_t *next_task(process_t *s) { process_t *c = s; - u64 ms_time = timer_get_ms(); + u64 ms_time = timer_get_uptime(); c = c->next; for (;; c = c->next) { if (!c) { diff --git a/kernel/timer.c b/kernel/timer.c index 21020b0..b00a24b 100644 --- a/kernel/timer.c +++ b/kernel/timer.c @@ -29,7 +29,7 @@ void timer_wait_for_init(void) { u64 timer_current_uptime = 0; // This gets updated by the PIT handler u64 timer_get_uptime(void) { - return tsc_calculate_ms(tsc_get()); + return timer_current_uptime; } void timer_get(struct timespec *tp) { |