summaryrefslogtreecommitdiffstats
path: root/sys/kern/subr_param.c
diff options
context:
space:
mode:
authorivoras <ivoras@FreeBSD.org>2008-12-18 15:34:38 +0000
committerivoras <ivoras@FreeBSD.org>2008-12-18 15:34:38 +0000
commitc6f6eeca99882fa34c3be66a785f0e9113d1b481 (patch)
treed3914fb9be02a581738ae458cdfc4a658061be81 /sys/kern/subr_param.c
parenta6186ea60d2ec289878fbfa8117f1485cb733ddf (diff)
downloadFreeBSD-src-c6f6eeca99882fa34c3be66a785f0e9113d1b481.zip
FreeBSD-src-c6f6eeca99882fa34c3be66a785f0e9113d1b481.tar.gz
By popular request, stringify kern.vm_guest sysctl. Now it returns a
short, self-documenting string describing the detected virtual environment. Approved by: gnn (mentor) (earlier version)
Diffstat (limited to 'sys/kern/subr_param.c')
-rw-r--r--sys/kern/subr_param.c30
1 files changed, 27 insertions, 3 deletions
diff --git a/sys/kern/subr_param.c b/sys/kern/subr_param.c
index 35e5c74..6a0745f 100644
--- a/sys/kern/subr_param.c
+++ b/sys/kern/subr_param.c
@@ -75,6 +75,8 @@ __FBSDID("$FreeBSD$");
enum VM_GUEST { VM_GUEST_NO, VM_GUEST_VM, VM_GUEST_XEN };
+static int sysctl_kern_vm_guest(SYSCTL_HANDLER_ARGS);
+
int hz;
int tick;
int maxusers; /* base tunable */
@@ -88,7 +90,7 @@ int nswbuf;
int maxswzone; /* max swmeta KVA storage */
int maxbcache; /* max buffer cache KVA storage */
int maxpipekva; /* Limit on pipe KVA */
-int vm_guest; /* Running as virtual machine guest? */
+int vm_guest; /* Running as virtual machine guest? */
u_long maxtsiz; /* max text size */
u_long dfldsiz; /* initial data size limit */
u_long maxdsiz; /* max data size */
@@ -113,8 +115,9 @@ SYSCTL_ULONG(_kern, OID_AUTO, maxssiz, CTLFLAG_RDTUN, &maxssiz, 0,
"max stack size");
SYSCTL_ULONG(_kern, OID_AUTO, sgrowsiz, CTLFLAG_RDTUN, &sgrowsiz, 0,
"amount to grow stack");
-SYSCTL_INT(_kern, OID_AUTO, vm_guest, CTLFLAG_RD, &vm_guest, 0,
- "Running under a virtual machine?");
+SYSCTL_PROC(_kern, OID_AUTO, vm_guest, CTLFLAG_RD | CTLTYPE_STRING,
+ NULL, 0, sysctl_kern_vm_guest, "A",
+ "Virtual machine detected? (none|generic|xen)");
/*
* These have to be allocated somewhere; allocating
@@ -138,6 +141,17 @@ static const char *const vm_pnames[] = {
NULL
};
+static const char *const vm_guest_sysctl_names[] = {
+ "none",
+ "generic",
+ "xen",
+ NULL
+};
+
+
+/*
+ * Detect known Virtual Machine hosts by inspecting the emulated BIOS.
+ */
static enum VM_GUEST
detect_virtual(void)
{
@@ -266,3 +280,13 @@ init_param3(long kmempages)
maxpipekva = 512 * 1024;
TUNABLE_INT_FETCH("kern.ipc.maxpipekva", &maxpipekva);
}
+
+/*
+ * Sysctl stringiying handler for kern.vm_guest.
+ */
+static int
+sysctl_kern_vm_guest(SYSCTL_HANDLER_ARGS)
+{
+ return (SYSCTL_OUT(req, vm_guest_sysctl_names[vm_guest],
+ strlen(vm_guest_sysctl_names[vm_guest])));
+}
OpenPOWER on IntegriCloud