Zbigniew Jędrzejewski-Szmek 43ff24
From 4b41b0d24b5efe70a5d6a39ff7b1f6571a7315b5 Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 43ff24
From: Thomas Blume <Thomas.Blume@suse.com>
Zbigniew Jędrzejewski-Szmek 43ff24
Date: Fri, 18 Jul 2014 09:13:36 -0400
Zbigniew Jędrzejewski-Szmek 43ff24
Subject: [PATCH] systemd-detect-virt: detect s390 virtualization
Zbigniew Jędrzejewski-Szmek 43ff24
Zbigniew Jędrzejewski-Szmek 43ff24
A system that is running on a logical partition (LPAR) provided by
Zbigniew Jędrzejewski-Szmek 43ff24
PR/SM has access to physical hardware (except CPU). It is true that
Zbigniew Jędrzejewski-Szmek 43ff24
PR/SM abstracts the hardware, but only for sharing purposes.
Zbigniew Jędrzejewski-Szmek 43ff24
Zbigniew Jędrzejewski-Szmek 43ff24
Details are statet at:
Zbigniew Jędrzejewski-Szmek 43ff24
Zbigniew Jędrzejewski-Szmek 43ff24
http://publib.boulder.ibm.com/infocenter/eserver/v1r2/topic/eicaz/eicazzlpar.htm
Zbigniew Jędrzejewski-Szmek 43ff24
Zbigniew Jędrzejewski-Szmek 43ff24
-->--
Zbigniew Jędrzejewski-Szmek 43ff24
In other words, PR/SM transforms physical resources into virtual resources so
Zbigniew Jędrzejewski-Szmek 43ff24
that many logical partitions can share the same physical resources.
Zbigniew Jędrzejewski-Szmek 43ff24
--<--
Zbigniew Jędrzejewski-Szmek 43ff24
Zbigniew Jędrzejewski-Szmek 43ff24
Still, from the OS point of view, the shared virtual resource is real
Zbigniew Jędrzejewski-Szmek 43ff24
hardware. ConditionVirtualization must be set to false if the OS runs
Zbigniew Jędrzejewski-Szmek 43ff24
directly on PR/SM (e.g. in an LPAR).
Zbigniew Jędrzejewski-Szmek 43ff24
Zbigniew Jędrzejewski-Szmek 43ff24
[zj: reorder code so that variables are not allocated when #if-def is
Zbigniew Jędrzejewski-Szmek 43ff24
false. Add commit message.]
Zbigniew Jędrzejewski-Szmek 43ff24
Zbigniew Jędrzejewski-Szmek 43ff24
(cherry picked from commit f41925b4e442a34c93ad120ef1426c974a047ed1)
Zbigniew Jędrzejewski-Szmek 43ff24
---
Zbigniew Jędrzejewski-Szmek 43ff24
 man/systemd.unit.xml |  1 +
Zbigniew Jędrzejewski-Szmek 43ff24
 src/shared/virt.c    | 17 +++++++++++++++++
Zbigniew Jędrzejewski-Szmek 43ff24
 2 files changed, 18 insertions(+)
Zbigniew Jędrzejewski-Szmek 43ff24
Zbigniew Jędrzejewski-Szmek 43ff24
diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
Zbigniew Jędrzejewski-Szmek 43ff24
index f66c580a37..e66be4ee51 100644
Zbigniew Jędrzejewski-Szmek 43ff24
--- a/man/systemd.unit.xml
Zbigniew Jędrzejewski-Szmek 43ff24
+++ b/man/systemd.unit.xml
Zbigniew Jędrzejewski-Szmek 43ff24
@@ -995,6 +995,7 @@
Zbigniew Jędrzejewski-Szmek 43ff24
                                 virtualization solution, or one of
Zbigniew Jędrzejewski-Szmek 43ff24
                                 <varname>qemu</varname>,
Zbigniew Jędrzejewski-Szmek 43ff24
                                 <varname>kvm</varname>,
Zbigniew Jędrzejewski-Szmek 43ff24
+                                <varname>zvm</varname>,
Zbigniew Jędrzejewski-Szmek 43ff24
                                 <varname>vmware</varname>,
Zbigniew Jędrzejewski-Szmek 43ff24
                                 <varname>microsoft</varname>,
Zbigniew Jędrzejewski-Szmek 43ff24
                                 <varname>oracle</varname>,
Zbigniew Jędrzejewski-Szmek 43ff24
diff --git a/src/shared/virt.c b/src/shared/virt.c
Zbigniew Jędrzejewski-Szmek 43ff24
index 20a8d7c5bf..b4368952ff 100644
Zbigniew Jędrzejewski-Szmek 43ff24
--- a/src/shared/virt.c
Zbigniew Jędrzejewski-Szmek 43ff24
+++ b/src/shared/virt.c
Zbigniew Jędrzejewski-Szmek 43ff24
@@ -220,6 +220,23 @@ int detect_vm(const char **id) {
Zbigniew Jędrzejewski-Szmek 43ff24
                 goto finish;
Zbigniew Jędrzejewski-Szmek 43ff24
         }
Zbigniew Jędrzejewski-Szmek 43ff24
 
Zbigniew Jędrzejewski-Szmek 43ff24
+#if defined(__s390__)
Zbigniew Jędrzejewski-Szmek 43ff24
+        {
Zbigniew Jędrzejewski-Szmek 43ff24
+                _cleanup_free_ char *t = NULL;
Zbigniew Jędrzejewski-Szmek 43ff24
+
Zbigniew Jędrzejewski-Szmek 43ff24
+                r = get_status_field("/proc/sysinfo", "VM00 Control Program:", &t);
Zbigniew Jędrzejewski-Szmek 43ff24
+                if (r >= 0) {
Zbigniew Jędrzejewski-Szmek 43ff24
+                        if (streq(t, "z/VM"))
Zbigniew Jędrzejewski-Szmek 43ff24
+                                _id = "zvm";
Zbigniew Jędrzejewski-Szmek 43ff24
+                        else
Zbigniew Jędrzejewski-Szmek 43ff24
+                                _id = "kvm";
Zbigniew Jędrzejewski-Szmek 43ff24
+                        r = 1;
Zbigniew Jędrzejewski-Szmek 43ff24
+
Zbigniew Jędrzejewski-Szmek 43ff24
+                        goto finish;
Zbigniew Jędrzejewski-Szmek 43ff24
+                }
Zbigniew Jędrzejewski-Szmek 43ff24
+        }
Zbigniew Jędrzejewski-Szmek 43ff24
+#endif
Zbigniew Jędrzejewski-Szmek 43ff24
+
Zbigniew Jędrzejewski-Szmek 43ff24
         r = 0;
Zbigniew Jędrzejewski-Szmek 43ff24
 
Zbigniew Jędrzejewski-Szmek 43ff24
 finish: