|
Zbigniew Jędrzejewski-Szmek |
930e1b |
From 48a66a7f6a23ee71bcf54da5bd0bbd69a0710582 Mon Sep 17 00:00:00 2001
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
From: Lennart Poettering <lennart@poettering.net>
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
Date: Thu, 31 Oct 2013 16:23:06 +0100
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
Subject: [PATCH] virt: move caching of virtualization check results into
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
detect_vm() and detect_container()
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
After all, we ended up calling detect_container() more often than
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
detect_virtualization(), hence the former one should cache the results,
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
since the latter is only a wrapper around the former.
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
---
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
src/detect-virt/detect-virt.c | 2 +-
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
src/shared/virt.c | 180 ++++++++++++++++++++----------------------
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
2 files changed, 87 insertions(+), 95 deletions(-)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
diff --git a/src/detect-virt/detect-virt.c b/src/detect-virt/detect-virt.c
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
index bd3ee45..72ff2a8 100644
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
--- a/src/detect-virt/detect-virt.c
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+++ b/src/detect-virt/detect-virt.c
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
@@ -114,8 +114,8 @@ static int parse_argv(int argc, char *argv[]) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
int main(int argc, char *argv[]) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
const char *id = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- int r;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
int retval = EXIT_SUCCESS;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ int r;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
/* This is mostly intended to be used for scripts which want
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
* to detect whether we are being run in a virtualized
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
diff --git a/src/shared/virt.c b/src/shared/virt.c
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
index 4f8134a..537ccda 100644
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
--- a/src/shared/virt.c
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+++ b/src/shared/virt.c
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
@@ -60,6 +60,9 @@ int detect_vm(const char **id) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
/* http://msdn.microsoft.com/en-us/library/ff542428.aspx */
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
"Microsoft Hv\0" "microsoft\0";
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ static __thread int cached_found = -1;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ static __thread const char *cached_id = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
uint32_t eax, ecx;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
union {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
uint32_t sig32[3];
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
@@ -69,6 +72,15 @@ int detect_vm(const char **id) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
const char *j, *k;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
bool hypervisor;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
_cleanup_free_ char *hvtype = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ const char *_id = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ if (_likely_(cached_found >= 0)) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ if (id)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ *id = cached_id;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ return cached_found;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ }
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
/* Try high-level hypervisor sysfs file first:
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
*
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
@@ -76,10 +88,9 @@ int detect_vm(const char **id) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
r = read_one_line_file("/sys/hypervisor/type", &hvtype);
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
if (r >= 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
if (streq(hvtype, "xen")) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- if (id)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- *id = "xen";
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
-
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- return 1;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ _id = "xen";
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ r = 1;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ goto finish;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
}
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
} else if (r != -ENOENT)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
return r;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
@@ -125,17 +136,14 @@ int detect_vm(const char **id) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
NULSTR_FOREACH_PAIR(j, k, cpuid_vendor_table)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
if (streq(sig.text, j)) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
-
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- if (id)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- *id = k;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
-
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- return 1;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ _id = k;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ r = 1;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ goto finish;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
}
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
}
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
for (i = 0; i < ELEMENTSOF(dmi_vendors); i++) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
_cleanup_free_ char *s = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- const char *found = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
r = read_one_line_file(dmi_vendors[i], &s);
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
if (r < 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
@@ -146,22 +154,17 @@ int detect_vm(const char **id) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
}
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
NULSTR_FOREACH_PAIR(j, k, dmi_vendor_table)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- if (startswith(s, j))
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- found = k;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
-
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- if (found) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- if (id)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- *id = found;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
-
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- return 1;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- }
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ if (startswith(s, j)) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ _id = k;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ r = 1;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ goto finish;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ }
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
}
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
if (hypervisor || hvtype) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- if (id)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- *id = "other";
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
-
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- return 1;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ _id = "other";
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ r = 1;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ goto finish;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
}
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
#endif
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
@@ -171,17 +174,40 @@ int detect_vm(const char **id) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
return r;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
if (strstr(cpuinfo_contents, "\nvendor_id\t: User Mode Linux\n")) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- *id = "uml";
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- return 1;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ _id = "uml";
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ r = 1;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ goto finish;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
}
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- return 0;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ r = 0;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+finish:
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ cached_found = r;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ cached_id = _id;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ if (id)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ *id = _id;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ return r;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
}
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
int detect_container(const char **id) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ static __thread int cached_found = -1;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ static __thread const char *cached_id = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
_cleanup_free_ char *e = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ const char *_id = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
int r;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ if (_likely_(cached_found >= 0)) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ if (id)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ *id = cached_id;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ return cached_found;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ }
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
/* Unfortunately many of these operations require root access
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
* in one way or another */
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
@@ -189,95 +215,61 @@ int detect_container(const char **id) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
return r;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
if (r > 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
-
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- if (id)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- *id = "chroot";
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
-
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- return 1;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ _id = "chroot";
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ goto finish;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
}
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
/* /proc/vz exists in container and outside of the container,
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
* /proc/bc only outside of the container. */
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
if (access("/proc/vz", F_OK) >= 0 &&
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
access("/proc/bc", F_OK) < 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
-
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- if (id)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- *id = "openvz";
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
-
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- return 1;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ _id = "openvz";
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ r = 1;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ goto finish;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
}
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
r = getenv_for_pid(1, "container", &e);
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- if (r <= 0)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
return r;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ if (r == 0)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ goto finish;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
/* We only recognize a selected few here, since we want to
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
* enforce a redacted namespace */
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- if (streq(e, "lxc")) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- if (id)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- *id = "lxc";
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- } else if (streq(e, "lxc-libvirt")) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- if (id)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- *id = "lxc-libvirt";
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- } else if (streq(e, "systemd-nspawn")) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- if (id)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- *id = "systemd-nspawn";
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- } else {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- if (id)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- *id = "other";
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- }
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ if (streq(e, "lxc"))
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ _id ="lxc";
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ else if (streq(e, "lxc-libvirt"))
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ _id = "lxc-libvirt";
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ else if (streq(e, "systemd-nspawn"))
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ _id = "systemd-nspawn";
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ else
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ _id = "other";
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+finish:
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ cached_found = r;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ cached_id = _id;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ if (id)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ *id = _id;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
return r;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
}
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
/* Returns a short identifier for the various VM/container implementations */
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
Virtualization detect_virtualization(const char **id) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
-
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- static __thread Virtualization cached_virt = _VIRTUALIZATION_INVALID;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- static __thread const char *cached_id = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
-
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- const char *_id;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
int r;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- Virtualization v;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
-
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- if (_likely_(cached_virt >= 0)) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
-
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- if (id && cached_virt > 0)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- *id = cached_id;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- return cached_virt;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- }
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
-
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- r = detect_container(&_id);
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- if (r < 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- v = r;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- goto finish;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- } else if (r > 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- v = VIRTUALIZATION_CONTAINER;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- goto finish;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- }
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
-
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- r = detect_vm(&_id);
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- if (r < 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- v = r;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- goto finish;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- } else if (r > 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- v = VIRTUALIZATION_VM;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- goto finish;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- }
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
-
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- v = VIRTUALIZATION_NONE;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
-
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
-finish:
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- if (v > 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- cached_id = _id;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
-
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- if (id)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- *id = _id;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- }
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ r = detect_container(id);
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ return r;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ if (r > 0)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ return VIRTUALIZATION_CONTAINER;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- if (v >= 0)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- cached_virt = v;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ r = detect_vm(id);
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ return r;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ if (r > 0)
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ return VIRTUALIZATION_VM;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
- return v;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
+ return VIRTUALIZATION_NONE;
|
|
Zbigniew Jędrzejewski-Szmek |
930e1b |
}
|