]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lscpu: minor cleanup and improve hypervisor detection
authorRuediger Meier <ruediger.meier@ga-group.nl>
Tue, 20 May 2014 11:26:48 +0000 (11:26 +0000)
committerRuediger Meier <ruediger.meier@ga-group.nl>
Wed, 28 May 2014 23:27:25 +0000 (01:27 +0200)
- add HYPER_VBOX
- improve HYPER_VMWARE

This patch comes from openSUSE / SLE. Original author was probably
Petr Uzel.
Internal SUSE references: fate310255, sr226509

CC: Stanislav Brabec <sbrabec@suse.cz>
CC: Petr Uzel <petr.uzel@suse.cz>
Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
sys-utils/lscpu.c
sys-utils/lscpu.h

index ad1a6b35271975596c7f81f5632654c04b686f02..7203d0d7b7f3a3c6dc4021cff78d294f0d1c451b 100644 (file)
@@ -87,7 +87,26 @@ const char *hv_vendors[] = {
        [HYPER_UML]     = "User-mode Linux",
        [HYPER_INNOTEK] = "Innotek GmbH",
        [HYPER_HITACHI] = "Hitachi",
-       [HYPER_PARALLELS] = "Parallels"
+       [HYPER_PARALLELS] = "Parallels",
+       [HYPER_VBOX]    = "Oracle",
+};
+
+const int hv_vendor_pci[] = {
+       [HYPER_NONE]    = 0x0000,
+       [HYPER_XEN]     = 0x5853,
+       [HYPER_KVM]     = 0x0000,
+       [HYPER_MSHV]    = 0x1414,
+       [HYPER_VMWARE]  = 0x15ad,
+       [HYPER_VBOX]    = 0x80ee,
+};
+
+const int hv_graphics_pci[] = {
+       [HYPER_NONE]    = 0x0000,
+       [HYPER_XEN]     = 0x0001,
+       [HYPER_KVM]     = 0x0000,
+       [HYPER_MSHV]    = 0x5353,
+       [HYPER_VMWARE]  = 0x0710,
+       [HYPER_VBOX]    = 0xbeef,
 };
 
 /* CPU modes */
@@ -589,9 +608,15 @@ read_hypervisor(struct lscpu_desc *desc, struct lscpu_modifier *mod)
                desc->hyper = HYPER_XEN;
 
        /* Xen full-virt on non-x86_64 */
-       } else if (has_pci_device(0x5853, 0x0001)) {
+       } else if (has_pci_device( hv_vendor_pci[HYPER_XEN], hv_graphics_pci[HYPER_XEN])) {
                desc->hyper = HYPER_XEN;
                desc->virtype = VIRT_FULL;
+       } else if (has_pci_device( hv_vendor_pci[HYPER_VMWARE], hv_graphics_pci[HYPER_VMWARE])) {
+               desc->hyper = HYPER_VMWARE;
+               desc->virtype = VIRT_FULL;
+       } else if (has_pci_device( hv_vendor_pci[HYPER_VBOX], hv_graphics_pci[HYPER_VBOX])) {
+               desc->hyper = HYPER_VBOX;
+               desc->virtype = VIRT_FULL;
 
        /* IBM PR/SM */
        } else if (path_exist(_PATH_PROC_SYSINFO)) {
index 312038fccfff7b04e9f8c1230edfeaf725ae43c4..5dc965001dac45898b15a4879b1c32d5dde26dd6 100644 (file)
@@ -13,7 +13,8 @@ enum {
        HYPER_UML,
        HYPER_INNOTEK,          /* VBOX */
        HYPER_HITACHI,
-       HYPER_PARALLELS         /* OpenVZ/VIrtuozzo */
+       HYPER_PARALLELS,        /* OpenVZ/VIrtuozzo */
+       HYPER_VBOX,
 };
 
 extern int read_hypervisor_dmi(void);