Fix overflow in LAPIC timer frequence calibration.

This commit is contained in:
Justinien Bouron 2019-03-10 04:58:01 -07:00
parent f3787e9903
commit 2846b0ab97

View File

@ -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);