HomeFreeBSD

MFC r361064

Description

MFC r361064
    Hide host CPUID 0x15 TSC/Crystal ratio/freq info from guest

    In recent Linux (5.3+) and OpenBSD (6.6+) kernels, and with hosts that
    support CPUID 0x15, the local APIC frequency is determined directly
    from the reported crystal clock to avoid calibration against the 8254
    timer.

    However, the local APIC frequency implemented by bhyve is 128MHz, where
    most h/w systems report frequencies around 25MHz. This shows up on
    OpenBSD guests as repeated keystrokes on the emulated PS2 keyboard
    when using VNC, since the kernel's timers are now much shorter.

    Fix by reporting all-zeroes for CPUID 0x15. This allows guests to fall
    back to using the 8254 to calibrate the local APIC frequency.

    Future work could be to compute values returned for 0x15 that would
    match the host TSC and bhyve local APIC frequency, though all dependencies
    on this would need to be examined (for example, Linux will start using
    0x16 for some hosts).

    PR:		[[ https://bugs.freebsd.org/246321 | 246321 ]]
    Reported by:	Jason Tubnor (and tested)

Approved by: bz (mentor)

Details

Provenance
grehanAuthored on
Parents
rS361131: MFC r361064
Branches
Unknown
Tags
Unknown