summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2024-07-04 20:22:32 +0200
committerAnton Kling <anton@kling.gg>2024-07-04 23:04:18 +0200
commit59893c116e9e4e5dd04c24c0ba2fd06fe1936500 (patch)
tree8fcc557177a4fc2bd4648f2032e7fbd320898f6c
parentafc2b4d4766b0e4ee8519ac6fcd98353d3864322 (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.c2
-rw-r--r--kernel/sched/scheduler.c2
-rw-r--r--kernel/timer.c2
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) {