From 2846b0ab97acf39fc3ed1121a218c6080c5d47be Mon Sep 17 00:00:00 2001 From: Justinien Bouron Date: Sun, 10 Mar 2019 04:58:01 -0700 Subject: [PATCH] Fix overflow in LAPIC timer frequence calibration. --- minix/kernel/arch/i386/apic.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/minix/kernel/arch/i386/apic.c b/minix/kernel/arch/i386/apic.c index 39346b679..c4fa74c1e 100644 --- a/minix/kernel/arch/i386/apic.c +++ b/minix/kernel/arch/i386/apic.c @@ -442,7 +442,8 @@ static int spurious_irq_handler(irq_hook_t * UNUSED(hook)) static void apic_calibrate_clocks(unsigned cpu) { - u32_t lvtt, val, lapic_delta; + u32_t lvtt, val; + u64_t lapic_delta; u64_t tsc_delta; u64_t cpu_freq; @@ -514,7 +515,8 @@ static void apic_calibrate_clocks(unsigned cpu) lapic_delta = lapic_tctr0 - lapic_tctr1; tsc_delta = tsc1 - tsc0; - lapic_bus_freq[cpuid] = system_hz * lapic_delta / (PROBE_TICKS - 1); + lapic_bus_freq[cpuid] = make64(system_hz,0) * lapic_delta / + make64(PROBE_TICKS-1,0); BOOT_VERBOSE(printf("APIC bus freq %u MHz\n", lapic_bus_freq[cpuid] / 1000000)); cpu_freq = (tsc_delta / (PROBE_TICKS - 1)) * make64(system_hz, 0);