]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
basic/virt: Detect PowerVM hypervisor
authorMichal Suchanek <msuchanek@suse.de>
Fri, 2 Oct 2020 09:05:23 +0000 (11:05 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 6 Oct 2020 06:24:12 +0000 (08:24 +0200)
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>
man/systemd-detect-virt.xml
man/systemd.unit.xml
src/basic/virt.c
src/basic/virt.h

index 9c66fa7afaf1a868708e64c22a94db678daa2690..36c4602d6965159ed86e0af79caa3e4a31ca3c79 100644 (file)
@@ -62,7 +62,7 @@
         </thead>
         <tbody>
           <row>
-            <entry valign="top" morerows="12">VM</entry>
+            <entry valign="top" morerows="13">VM</entry>
             <entry><varname>qemu</varname></entry>
             <entry>QEMU software virtualization, without KVM</entry>
           </row>
             <entry>Oracle VM VirtualBox (historically marketed by innotek and Sun Microsystems), for legacy and KVM hypervisor</entry>
           </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>
index 1ab6e2b0b94378669c57e617dce2235712bb451b..a845bc23b273cf5501dc1421ea226071255081ad 100644 (file)
           <literal>vmware</literal>,
           <literal>microsoft</literal>,
           <literal>oracle</literal>,
+          <literal>powervm</literal>,
           <literal>xen</literal>,
           <literal>bochs</literal>,
           <literal>uml</literal>,
index 80128cb3aaf1f211f58fac033e3b3322065374b4..bb908847f5b1f2b056cfb19654a7db9c649d39f3 100644 (file)
@@ -93,6 +93,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) {
@@ -679,6 +684,7 @@ static const char *const virtualization_table[_VIRTUALIZATION_MAX] = {
         [VIRTUALIZATION_BHYVE] = "bhyve",
         [VIRTUALIZATION_QNX] = "qnx",
         [VIRTUALIZATION_ACRN] = "acrn",
+        [VIRTUALIZATION_POWERVM] = "powervm",
         [VIRTUALIZATION_VM_OTHER] = "vm-other",
 
         [VIRTUALIZATION_SYSTEMD_NSPAWN] = "systemd-nspawn",
index 18aa5eff15316f22896b9601b2feced7ebb7c8d3..2f7f7203d2948331be265ee48fca0b2f76862fc4 100644 (file)
@@ -22,6 +22,7 @@ enum {
         VIRTUALIZATION_BHYVE,
         VIRTUALIZATION_QNX,
         VIRTUALIZATION_ACRN,
+        VIRTUALIZATION_POWERVM,
         VIRTUALIZATION_VM_OTHER,
         VIRTUALIZATION_VM_LAST = VIRTUALIZATION_VM_OTHER,