summaryrefslogtreecommitdiff
path: root/src/shared
diff options
context:
space:
mode:
authorChris J Arges <chris.j.arges@canonical.com>2015-02-03 17:56:06 -0600
committerLennart Poettering <lennart@poettering.net>2015-02-04 00:59:58 +0100
commitd831deb512ab1d11aab156f69620db506c554170 (patch)
treead0771fc5413ee53e54cf6535ac64a0bfd8fcefe /src/shared
parent5fae368bda9419d9d378ea32077c8fd183dd4b81 (diff)
virt: add detect_vm_devicetree for powerpc arches
Check sysfs devicetree values in order to detect if we are running on a KVM hypervisor on a powerpc architecture.
Diffstat (limited to 'src/shared')
-rw-r--r--src/shared/virt.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/shared/virt.c b/src/shared/virt.c
index f10baab40..7c1381f4b 100644
--- a/src/shared/virt.c
+++ b/src/shared/virt.c
@@ -101,6 +101,22 @@ static int detect_vm_cpuid(const char **_id) {
return 0;
}
+static int detect_vm_devicetree(const char **_id) {
+#if defined(__powerpc__) || defined(__powerpc64__)
+ _cleanup_free_ char *hvtype = NULL;
+ int r;
+
+ r = read_one_line_file("/sys/firmware/devicetree/base/hypervisor/compatible", &hvtype);
+ if (r >= 0) {
+ if (streq(hvtype, "linux,kvm")) {
+ *_id = "kvm";
+ return 1;
+ }
+ }
+#endif
+ return 0;
+}
+
static int detect_vm_dmi(const char **_id) {
/* Both CPUID and DMI are x86 specific interfaces... */
@@ -204,6 +220,10 @@ int detect_vm(const char **id) {
if (r != 0)
goto finish;
+ r = detect_vm_devicetree(&_id);
+ if (r != 0)
+ goto finish;
+
if (_id) {
/* "other" */
r = 1;