Re: svn commit: r361064 - head/sys/amd64/vmm

2020-05-14 Thread Konstantin Belousov
On Thu, May 14, 2020 at 10:18:12PM +, Peter Grehan wrote:
> Author: grehan
> Date: Thu May 14 22:18:12 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).

FreeBSD uses 0x15 (and 0x16 if there is no 0x15) as well.  We recheck
against 8254 and decide that there is no ISA timer if calibration differs
too much from CPUID numbers.
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r361064 - head/sys/amd64/vmm

2020-05-14 Thread Peter Grehan
Author: grehan
Date: Thu May 14 22:18:12 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

Modified:
  head/sys/amd64/vmm/x86.c
  head/sys/amd64/vmm/x86.h

Modified: head/sys/amd64/vmm/x86.c
==
--- head/sys/amd64/vmm/x86.cThu May 14 21:59:23 2020(r361063)
+++ head/sys/amd64/vmm/x86.cThu May 14 22:18:12 2020(r361064)
@@ -560,6 +560,18 @@ x86_emulate_cpuid(struct vm *vm, int vcpu_id,
}
break;
 
+   case CPUID__0015:
+   /*
+* Don't report CPU TSC/Crystal ratio and clock
+* values since guests may use these to derive the
+* local APIC frequency..
+*/
+   regs[0] = 0;
+   regs[1] = 0;
+   regs[2] = 0;
+   regs[3] = 0;
+   break;
+
case 0x4000:
regs[0] = CPUID_VM_HIGH;
bcopy(bhyve_id, ®s[1], 4);

Modified: head/sys/amd64/vmm/x86.h
==
--- head/sys/amd64/vmm/x86.hThu May 14 21:59:23 2020(r361063)
+++ head/sys/amd64/vmm/x86.hThu May 14 22:18:12 2020(r361064)
@@ -41,6 +41,7 @@
 #defineCPUID__000A (0xA)
 #defineCPUID__000B (0xB)
 #defineCPUID__000D (0xD)
+#defineCPUID__0015 (0x15)
 #define CPUID_8000_(0x8000)
 #define CPUID_8000_0001(0x8001)
 #define CPUID_8000_0002(0x8002)
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"