From: Heiko Carstens Date: Tue, 6 Sep 2011 00:53:02 +0000 (+0200) Subject: lscpu: add Hypervisor to output X-Git-Tag: v2.21-rc1~440 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=10829cd73c0f0e226d10d75c8b8e00260a7708e8;p=thirdparty%2Futil-linux.git lscpu: add Hypervisor to output Some vendors have several hypervisors. Therefore it makes sense to not only print out the hypervisor vendor but also the name of the hypervisor. Signed-off-by: Heiko Carstens Signed-off-by: Karel Zak --- diff --git a/sys-utils/lscpu.c b/sys-utils/lscpu.c index 69e80eb3c1..601c8729c8 100644 --- a/sys-utils/lscpu.c +++ b/sys-utils/lscpu.c @@ -137,6 +137,7 @@ struct lscpu_desc { char *family; char *model; char *virtflag; /* virtualization flag (vmx, svm) */ + char *hypervisor; /* hypervisor software */ int hyper; /* hypervisor vendor ID */ int virtype; /* VIRT_PARA|FULL|NONE ? */ char *mhz; @@ -672,14 +673,31 @@ read_hypervisor(struct lscpu_desc *desc) char buf[BUFSIZ]; desc->hyper = HYPER_IBM; + desc->hypervisor = "PR/SM"; desc->virtype = VIRT_FULL; while (fgets(buf, sizeof(buf), fd) != NULL) { + char *str; + if (!strstr(buf, "Control Program:")) continue; if (!strstr(buf, "KVM")) desc->hyper = HYPER_IBM; else desc->hyper = HYPER_KVM; + str = strchr(buf, ':'); + if (!str) + continue; + if (asprintf(&str, str + 1) == -1) + errx(EXIT_FAILURE, _("failed to allocate memory")); + /* remove leading, trailing and repeating whitespace */ + while (*str == ' ') + str++; + desc->hypervisor = str; + str += strlen(str) - 1; + while ((*str == '\n') || (*str == ' ')) + *(str--) = '\0'; + while ((str = strstr(desc->hypervisor, " "))) + memmove(str, str + 1, strlen(str)); } fclose(fd); } @@ -1276,6 +1294,8 @@ print_summary(struct lscpu_desc *desc, struct lscpu_modifier *mod) else if (!strcmp(desc->virtflag, "vmx")) print_s(_("Virtualization:"), "VT-x"); } + if (desc->hypervisor) + print_s(_("Hypervisor:"), desc->hypervisor); if (desc->hyper) { print_s(_("Hypervisor vendor:"), hv_vendors[desc->hyper]); print_s(_("Virtualization type:"), virt_types[desc->virtype]); diff --git a/tests/expected/lscpu/lscpu-s390-lpar b/tests/expected/lscpu/lscpu-s390-lpar index 600fd3f09b..0799ab9c7d 100644 --- a/tests/expected/lscpu/lscpu-s390-lpar +++ b/tests/expected/lscpu/lscpu-s390-lpar @@ -8,6 +8,7 @@ Socket(s) per book: 6 Book(s): 4 Vendor ID: IBM/S390 BogoMIPS: 14367.00 +Hypervisor: PR/SM Hypervisor vendor: IBM Virtualization type: full Dispatching mode: vertical diff --git a/tests/expected/lscpu/lscpu-s390-zvm b/tests/expected/lscpu/lscpu-s390-zvm index 9ce22d49bb..04dcf7698a 100644 --- a/tests/expected/lscpu/lscpu-s390-zvm +++ b/tests/expected/lscpu/lscpu-s390-zvm @@ -7,6 +7,7 @@ Socket(s) per book: 1 Book(s): 4 Vendor ID: IBM/S390 BogoMIPS: 14367.00 +Hypervisor: z/VM 6.1.0 Hypervisor vendor: IBM Virtualization type: full Dispatching mode: horizontal