svn commit: r185772 - head/sys/kern
Ivan Voras
ivoras at gmail.com
Mon Dec 8 11:01:16 PST 2008
Hi,
How about introducing a read-only sysctl, something like kern.in_vm
that would be
0 : none detected / as far as we can tell we're on bare metal
1 : if detect_virtual() returns 1
2 : Xen dom-U
3, etc... for future use, like VMWare VMI, etc.
?
(of course, for symmetry, if we ever support any hosting for full
virtualization, another sysctl might be introduced as a bitmap :) ).
2008/12/8 Jung-uk Kim <jkim at freebsd.org>:
> Author: jkim
> Date: Mon Dec 8 18:39:59 2008
> New Revision: 185772
> URL: http://svn.freebsd.org/changeset/base/185772
>
> Log:
> - Detect Bochs BIOS variants and use HZ_VM as well.
> - Free kernel environment variable after its use.
> - Fix style(9) nits.
>
> Modified:
> head/sys/kern/subr_param.c
>
> Modified: head/sys/kern/subr_param.c
> ==============================================================================
> --- head/sys/kern/subr_param.c Mon Dec 8 17:22:44 2008 (r185771)
> +++ head/sys/kern/subr_param.c Mon Dec 8 18:39:59 2008 (r185772)
> @@ -118,6 +118,13 @@ SYSCTL_ULONG(_kern, OID_AUTO, sgrowsiz,
> */
> struct buf *swbuf;
>
> +static const char *const vm_bnames[] = {
> + "QEMU", /* QEMU */
> + "Plex86", /* Plex86 */
> + "Bochs", /* Bochs */
> + NULL
> +};
> +
> static const char *const vm_pnames[] = {
> "VMware Virtual Platform", /* VMWare VM */
> "Virtual Machine", /* Microsoft VirtualPC */
> @@ -132,14 +139,25 @@ detect_virtual(void)
> char *sysenv;
> int i;
>
> + sysenv = getenv("smbios.bios.vendor");
> + if (sysenv != NULL) {
> + for (i = 0; vm_bnames[i] != NULL; i++)
> + if (strcmp(sysenv, vm_bnames[i]) == 0) {
> + freeenv(sysenv);
> + return (1);
> + }
> + freeenv(sysenv);
> + }
> sysenv = getenv("smbios.system.product");
> if (sysenv != NULL) {
> - for (i = 0; vm_pnames[i] != NULL; i++) {
> - if (strcmp(sysenv, vm_pnames[i]) == 0)
> - return 1;
> - }
> + for (i = 0; vm_pnames[i] != NULL; i++)
> + if (strcmp(sysenv, vm_pnames[i]) == 0) {
> + freeenv(sysenv);
> + return (1);
> + }
> + freeenv(sysenv);
> }
> - return 0;
> + return (0);
> }
>
> /*
> @@ -151,13 +169,8 @@ init_param1(void)
>
> hz = -1;
> TUNABLE_INT_FETCH("kern.hz", &hz);
> - if (hz == -1) {
> - if (detect_virtual()) {
> - hz = HZ_VM;
> - } else {
> - hz = HZ;
> - }
> - }
> + if (hz == -1)
> + hz = detect_virtual() ? HZ_VM : HZ;
> tick = 1000000 / hz;
>
> #ifdef VM_SWZONE_SIZE_MAX
>
More information about the svn-src-head
mailing list