freebsd-nq/sys/amd64/vmm
Peter Grehan ec048c7550 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:	246321
Reported by:	Jason Tubnor (and tested)
Reviewed by:	jhb
Approved by:	jhb, bz (mentor)
MFC after:	3 days
Differential Revision:	https://reviews.freebsd.org/D24837
2020-05-14 22:18:12 +00:00
..
amd Initial support for bhyve save and restore. 2020-05-05 00:02:04 +00:00
intel Initial support for bhyve save and restore. 2020-05-05 00:02:04 +00:00
io Initial support for bhyve save and restore. 2020-05-05 00:02:04 +00:00
vmm_dev.c Initial support for bhyve save and restore. 2020-05-05 00:02:04 +00:00
vmm_host.c Correct undesirable interaction between caching of %cr4 in bhyve and 2018-04-24 13:44:19 +00:00
vmm_host.h amd64: move GDT into PCPU area. 2019-11-12 15:51:47 +00:00
vmm_instruction_emul.c vmm(4): Decode and emulate BEXTR 2020-04-21 21:34:24 +00:00
vmm_ioport.c Add SPDX tags to vmm(4). 2018-06-13 07:02:58 +00:00
vmm_ioport.h Add SPDX tags to vmm(4). 2018-06-13 07:02:58 +00:00
vmm_ktr.h sys/amd64: further adoption of SPDX licensing ID tags. 2017-11-27 15:03:07 +00:00
vmm_lapic.c vmx: use C99 bool, not boolean_t 2019-08-01 02:16:48 +00:00
vmm_lapic.h vmx: use C99 bool, not boolean_t 2019-08-01 02:16:48 +00:00
vmm_mem.c sys/amd64: further adoption of SPDX licensing ID tags. 2017-11-27 15:03:07 +00:00
vmm_mem.h sys/amd64: further adoption of SPDX licensing ID tags. 2017-11-27 15:03:07 +00:00
vmm_snapshot.c Initial support for bhyve save and restore. 2020-05-05 00:02:04 +00:00
vmm_stat.c vmm: Add Hygon Dhyana support. 2020-02-13 19:03:12 +00:00
vmm_stat.h sys: further adoption of SPDX licensing ID tags. 2017-11-20 19:43:44 +00:00
vmm_util.c vmm: Add Hygon Dhyana support. 2020-02-13 19:03:12 +00:00
vmm_util.h vmm: Add Hygon Dhyana support. 2020-02-13 19:03:12 +00:00
vmm.c Initial support for bhyve save and restore. 2020-05-05 00:02:04 +00:00
x86.c Hide host CPUID 0x15 TSC/Crystal ratio/freq info from guest 2020-05-14 22:18:12 +00:00
x86.h Hide host CPUID 0x15 TSC/Crystal ratio/freq info from guest 2020-05-14 22:18:12 +00:00