From fbccecb3f0c92880df33bdf6f17d482f97b4de08 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 30 Apr 2018 12:24:57 +0200 Subject: virt: simplifications Let's simplify the code a bit. Let's reduce the number of redundant if checks a bit, (i.e. if we want to check for equality with VIRTUALIZATION_VM_OTHER there's no need to check for non-equality with VIRTUALIZATION_NONE first). As a very welcome side-effect this means we lose some lines of code and our level of indentation is reduced. No changes in behaviour. --- src/basic/virt.c | 78 +++++++++++++++++++++++++------------------------------- 1 file changed, 35 insertions(+), 43 deletions(-) (limited to 'src/basic/virt.c') diff --git a/src/basic/virt.c b/src/basic/virt.c index dfa55c710..3b2f1b917 100644 --- a/src/basic/virt.c +++ b/src/basic/virt.c @@ -312,8 +312,8 @@ static int detect_vm_zvm(void) { /* Returns a short identifier for the various VM implementations */ int detect_vm(void) { static thread_local int cached_found = _VIRTUALIZATION_INVALID; - int r, dmi; bool other = false; + int r, dmi; if (cached_found >= 0) return cached_found; @@ -337,21 +337,19 @@ int detect_vm(void) { r = detect_vm_cpuid(); if (r < 0) return r; - if (r != VIRTUALIZATION_NONE) { - if (r == VIRTUALIZATION_VM_OTHER) - other = true; - else - goto finish; - } + if (r == VIRTUALIZATION_VM_OTHER) + other = true; + else if (r != VIRTUALIZATION_NONE) + goto finish; - r = dmi; - if (r < 0) - return r; - if (r != VIRTUALIZATION_NONE) { - if (r == VIRTUALIZATION_VM_OTHER) - other = true; - else - goto finish; + /* Now, let's get back to DMI */ + if (dmi < 0) + return dmi; + if (dmi == VIRTUALIZATION_VM_OTHER) + other = true; + else if (dmi != VIRTUALIZATION_NONE) { + r = dmi; + goto finish; } /* x86 xen will most likely be detected by cpuid. If not (most likely @@ -363,42 +361,34 @@ int detect_vm(void) { r = detect_vm_xen(); if (r < 0) return r; - if (r != VIRTUALIZATION_NONE) { - if (r == VIRTUALIZATION_VM_OTHER) - other = true; - else - goto finish; - } + if (r == VIRTUALIZATION_VM_OTHER) + other = true; + else if (r != VIRTUALIZATION_NONE) + goto finish; r = detect_vm_hypervisor(); if (r < 0) return r; - if (r != VIRTUALIZATION_NONE) { - if (r == VIRTUALIZATION_VM_OTHER) - other = true; - else - goto finish; - } + if (r == VIRTUALIZATION_VM_OTHER) + other = true; + else if (r != VIRTUALIZATION_NONE) + goto finish; r = detect_vm_device_tree(); if (r < 0) return r; - if (r != VIRTUALIZATION_NONE) { - if (r == VIRTUALIZATION_VM_OTHER) - other = true; - else - goto finish; - } + if (r == VIRTUALIZATION_VM_OTHER) + other = true; + else if (r != VIRTUALIZATION_NONE) + goto finish; r = detect_vm_uml(); if (r < 0) return r; - if (r != VIRTUALIZATION_NONE) { - if (r == VIRTUALIZATION_VM_OTHER) - other = true; - else - goto finish; - } + if (r == VIRTUALIZATION_VM_OTHER) + other = true; + else if (r != VIRTUALIZATION_NONE) + goto finish; r = detect_vm_zvm(); if (r < 0) @@ -409,10 +399,12 @@ finish: * In order to detect the Dom0 as not virtualization we need to * double-check it */ if (r == VIRTUALIZATION_XEN) { - int ret = detect_vm_xen_dom0(); - if (ret < 0) - return ret; - if (ret > 0) + int dom0; + + dom0 = detect_vm_xen_dom0(); + if (dom0 < 0) + return dom0; + if (dom0 > 0) r = VIRTUALIZATION_NONE; } else if (r == VIRTUALIZATION_NONE && other) r = VIRTUALIZATION_VM_OTHER; -- cgit v1.2.3