From e0f1fd3e031d6749472776c9a4b306aa3b8edb12 Mon Sep 17 00:00:00 2001 From: Matheus Date: Mon, 28 Oct 2024 16:24:43 -0300 Subject: [PATCH] tsc: fix it being broken when max base leaf < 0x15 --- kernel-src/arch/x86-64/tsc.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/kernel-src/arch/x86-64/tsc.c b/kernel-src/arch/x86-64/tsc.c index 3477ef0b..463772d2 100644 --- a/kernel-src/arch/x86-64/tsc.c +++ b/kernel-src/arch/x86-64/tsc.c @@ -37,15 +37,13 @@ static timekeeper_source_info_t *tsc_init(void) { if (hz) goto leave; - bool need_calibration = false; + bool need_calibration = true; if (cpuid_base_max_leaf() >= 0x15) { cpuid_results_t cpuid_results; cpuid(0x15, &cpuid_results); - if (cpuid_results.eax == 0 || cpuid_results.ebx == 0 || cpuid_results.ecx == 0) { - need_calibration = true; + if (cpuid_results.eax == 0 || cpuid_results.ebx == 0 || cpuid_results.ecx == 0) goto calibrate; - } uint64_t core_frequency = cpuid_results.ecx; uint64_t core_numerator = cpuid_results.ebx; @@ -53,6 +51,7 @@ static timekeeper_source_info_t *tsc_init(void) { uint64_t tsc_frequency = core_frequency * core_numerator / core_denominator; hz = tsc_frequency; + need_calibration = false; } calibrate: