]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
virt: correctly detect QEMU emulated pSeries guests
authorFrantisek Sumsal <frantisek@sumsal.cz>
Wed, 1 Mar 2023 12:57:03 +0000 (13:57 +0100)
committerLuca Boccassi <luca.boccassi@gmail.com>
Wed, 1 Mar 2023 16:52:27 +0000 (16:52 +0000)
Resolves: #26629

src/basic/virt.c

index c2eae4c52d2f9372a17e19bd9c17f30e033bf200..ca3edaf3b54a03bd656ea1fd6b6c1e3e398a5b78 100644 (file)
@@ -102,6 +102,7 @@ static Virtualization detect_vm_device_tree(void) {
         r = read_one_line_file("/proc/device-tree/hypervisor/compatible", &hvtype);
         if (r == -ENOENT) {
                 _cleanup_closedir_ DIR *dir = NULL;
+                _cleanup_free_ char *compat = NULL;
 
                 if (access("/proc/device-tree/ibm,partition-name", F_OK) == 0 &&
                     access("/proc/device-tree/hmc-managed?", F_OK) == 0 &&
@@ -123,6 +124,14 @@ static Virtualization detect_vm_device_tree(void) {
                                 return VIRTUALIZATION_QEMU;
                         }
 
+                r = read_one_line_file("/proc/device-tree/compatible", &compat);
+                if (r < 0 && r != -ENOENT)
+                        return r;
+                if (r >= 0 && streq(compat, "qemu,pseries")) {
+                        log_debug("Virtualization %s found in /proc/device-tree/compatible", compat);
+                        return VIRTUALIZATION_QEMU;
+                }
+
                 log_debug("No virtualization found in /proc/device-tree/*");
                 return VIRTUALIZATION_NONE;
         } else if (r < 0)