From a64b32e1aaf6606f17e7d6fe207339bf57bd29d2 Mon Sep 17 00:00:00 2001 From: Matheus Date: Wed, 2 Oct 2024 19:50:05 -0300 Subject: [PATCH] timekeeper sources: add an option to disable each one of them --- kernel-src/arch/x86-64/hpet.c | 4 ++++ kernel-src/arch/x86-64/kvmclock.c | 4 ++++ kernel-src/arch/x86-64/tsc.c | 5 +++++ 3 files changed, 13 insertions(+) diff --git a/kernel-src/arch/x86-64/hpet.c b/kernel-src/arch/x86-64/hpet.c index 876950f2..2c7dde71 100644 --- a/kernel-src/arch/x86-64/hpet.c +++ b/kernel-src/arch/x86-64/hpet.c @@ -5,6 +5,7 @@ #include #include #include +#include #include #include @@ -62,6 +63,9 @@ static void counterirq(isr_t *isr, context_t *context) { } static bool hpet_probe(void) { + if (cmdline_get("nohpet")) + return false; + bool usable = false; struct acpi_hpet *table; uacpi_table tbl; diff --git a/kernel-src/arch/x86-64/kvmclock.c b/kernel-src/arch/x86-64/kvmclock.c index 079f170b..56334846 100644 --- a/kernel-src/arch/x86-64/kvmclock.c +++ b/kernel-src/arch/x86-64/kvmclock.c @@ -6,6 +6,7 @@ #include #include #include +#include #define KVM_TIMER_SYSTEM_TIME_ALIGNMENT 4 #define KVM_TIMER_SYSTEM_TIME_ENABLE 1 @@ -23,6 +24,9 @@ typedef struct { } __attribute__((packed)) kvm_timer_info_t; static bool kvm_timer_probe(void) { + if (cmdline_get("nokvmclock")) + return false; + // figure out if we are running in kvm uint32_t base = cpuid_find_hypervisor_base_kvm(); if (base == 0) diff --git a/kernel-src/arch/x86-64/tsc.c b/kernel-src/arch/x86-64/tsc.c index 18c0c165..116cd6f4 100644 --- a/kernel-src/arch/x86-64/tsc.c +++ b/kernel-src/arch/x86-64/tsc.c @@ -3,8 +3,13 @@ #include #include #include +#include +#include static bool tsc_probe(void) { + if (cmdline_get("notsc")) + return false; + cpuid_results_t cpuid_results; uint32_t max_extended_leaf = cpuid_extended_max_leaf();