diff options
author | Michal Suchanek <msuchanek@suse.de> | 2020-10-02 11:05:23 +0200 |
---|---|---|
committer | The Plumber <50238977+systemd-rhel-bot@users.noreply.github.com> | 2021-06-22 14:29:35 +0200 |
commit | 48dacf8d30cd61b72939e9c3419acced4b2fde74 (patch) | |
tree | 3f0a0197bed7b572514141988067b2ac592ac95a | |
parent | 91ed691ff73d4d71fae8f6896a1bba73e6a76bba (diff) | |
download | systemd-48dacf8d30cd61b72939e9c3419acced4b2fde74.tar.gz |
basic/virt: Detect PowerVM hypervisor
Currently systemd-detect-virt fails to detect running under PowerVM.
Add code to detect PowerVM based on code in util-linux.
Signed-off-by: Michal Suchanek <msuchanek@suse.de>
(cherry picked from commit 3224e38bb6b3287ca253cbafb460a150544d5818)
Resolves: #1937989
-rw-r--r-- | man/systemd-detect-virt.xml | 7 | ||||
-rw-r--r-- | src/basic/virt.c | 6 | ||||
-rw-r--r-- | src/basic/virt.h | 1 |
3 files changed, 13 insertions, 1 deletions
diff --git a/man/systemd-detect-virt.xml b/man/systemd-detect-virt.xml index c4763fd561..6beb2c2aa1 100644 --- a/man/systemd-detect-virt.xml +++ b/man/systemd-detect-virt.xml @@ -65,7 +65,7 @@ </thead> <tbody> <row> - <entry valign="top" morerows="11">VM</entry> + <entry valign="top" morerows="12">VM</entry> <entry><varname>qemu</varname></entry> <entry>QEMU software virtualization, without KVM</entry> </row> @@ -96,6 +96,11 @@ </row> <row> + <entry><varname>powervm</varname></entry> + <entry>IBM PowerVM hypervisor - comes as firmware with some IBM POWER servers</entry> + </row> + + <row> <entry><varname>xen</varname></entry> <entry>Xen hypervisor (only domU, not dom0)</entry> </row> diff --git a/src/basic/virt.c b/src/basic/virt.c index dfa1525219..0b88005ed6 100644 --- a/src/basic/virt.c +++ b/src/basic/virt.c @@ -92,6 +92,11 @@ static int detect_vm_device_tree(void) { _cleanup_closedir_ DIR *dir = NULL; struct dirent *dent; + if (access("/proc/device-tree/ibm,partition-name", F_OK) == 0 && + access("/proc/device-tree/hmc-managed?", F_OK) == 0 && + access("/proc/device-tree/chosen/qemu,graphic-width", F_OK) != 0) + return VIRTUALIZATION_POWERVM; + dir = opendir("/proc/device-tree"); if (!dir) { if (errno == ENOENT) { @@ -635,6 +640,7 @@ static const char *const virtualization_table[_VIRTUALIZATION_MAX] = { [VIRTUALIZATION_PARALLELS] = "parallels", [VIRTUALIZATION_BHYVE] = "bhyve", [VIRTUALIZATION_QNX] = "qnx", + [VIRTUALIZATION_POWERVM] = "powervm", [VIRTUALIZATION_VM_OTHER] = "vm-other", [VIRTUALIZATION_SYSTEMD_NSPAWN] = "systemd-nspawn", diff --git a/src/basic/virt.h b/src/basic/virt.h index c4cf4bfeab..640b3ed779 100644 --- a/src/basic/virt.h +++ b/src/basic/virt.h @@ -21,6 +21,7 @@ enum { VIRTUALIZATION_PARALLELS, VIRTUALIZATION_BHYVE, VIRTUALIZATION_QNX, + VIRTUALIZATION_POWERVM, VIRTUALIZATION_VM_OTHER, VIRTUALIZATION_VM_LAST = VIRTUALIZATION_VM_OTHER, |