Summary: | Key press timing/repeat issue on UEFI VNC console for OpenBSD => 6.6 guest | ||
---|---|---|---|
Product: | Base System | Reporter: | Jason Tubnor <jason> |
Component: | bhyve | Assignee: | freebsd-virtualization (Nobody) <virtualization> |
Status: | Closed FIXED | ||
Severity: | Affects Some People | CC: | emaste, grehan |
Priority: | --- | ||
Version: | Unspecified | ||
Hardware: | amd64 | ||
OS: | Any |
Description
Jason Tubnor
2020-05-09 06:05:39 UTC
Which VNC clients/versions (and host o/s's) ? (In reply to Peter Grehan from comment #1) FreeBSD 11.3, 12.1 and 13-HEAD (r360181 20200422) UltraVNC and Tight VNC Currently under review: https://reviews.freebsd.org/D24837 'Hide host CPUID 0x15 TSC/Crystal ratio/freq info from guest' A commit references this bug: Author: grehan Date: Thu May 14 22:18:12 UTC 2020 New revision: 361064 URL: https://svnweb.freebsd.org/changeset/base/361064 Log: 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 Changes: head/sys/amd64/vmm/x86.c head/sys/amd64/vmm/x86.h A commit references this bug: Author: grehan Date: Sun May 17 11:09:38 UTC 2020 New revision: 361131 URL: https://svnweb.freebsd.org/changeset/base/361131 Log: 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: 246321 Reported by: Jason Tubnor (and tested) Approved by: bz (mentor) Changes: _U stable/12/ stable/12/sys/amd64/vmm/x86.c stable/12/sys/amd64/vmm/x86.h A commit references this bug: Author: grehan Date: Sun May 17 11:13:13 UTC 2020 New revision: 361132 URL: https://svnweb.freebsd.org/changeset/base/361132 Log: 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: 246321 Reported by: Jason Tubnor (and tested) Approved by: bz (mentor) Changes: _U stable/11/ stable/11/sys/amd64/vmm/x86.c stable/11/sys/amd64/vmm/x86.h The commits below and applicable testing verify that this issue has been remediated. |