Fix overflow in LAPIC timer frequence calibration.
This commit is contained in:
parent
f3787e9903
commit
2846b0ab97
|
|
@ -442,7 +442,8 @@ static int spurious_irq_handler(irq_hook_t * UNUSED(hook))
|
||||||
|
|
||||||
static void apic_calibrate_clocks(unsigned cpu)
|
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 tsc_delta;
|
||||||
u64_t cpu_freq;
|
u64_t cpu_freq;
|
||||||
|
|
||||||
|
|
@ -514,7 +515,8 @@ static void apic_calibrate_clocks(unsigned cpu)
|
||||||
lapic_delta = lapic_tctr0 - lapic_tctr1;
|
lapic_delta = lapic_tctr0 - lapic_tctr1;
|
||||||
tsc_delta = tsc1 - tsc0;
|
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",
|
BOOT_VERBOSE(printf("APIC bus freq %u MHz\n",
|
||||||
lapic_bus_freq[cpuid] / 1000000));
|
lapic_bus_freq[cpuid] / 1000000));
|
||||||
cpu_freq = (tsc_delta / (PROBE_TICKS - 1)) * make64(system_hz, 0);
|
cpu_freq = (tsc_delta / (PROBE_TICKS - 1)) * make64(system_hz, 0);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user