[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[libvirt] [PATCH v2 4/7] qemu: get arch name from <cpu> element



The qemu32 CPU model is chosen based on the <os arch=...> name when
creating the QEMU command line for a 64-bit host.  For the opposite
transformation we can test the guest CPU model for the "lm" feature.
If it is absent, def->os.arch needs to be corrected.

Signed-off-by: Paolo Bonzini <pbonzini redhat com>
---
 src/qemu/qemu_command.c |   18 ++++++++++++++++++
 1 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index fc337f7..7fe8c48 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -6830,6 +6830,24 @@ qemuParseCommandLineCPU(virDomainDefPtr dom,
         }
     } while ((p = next));
 
+    if (STREQ(dom->os.arch, "x86_64")) {
+        bool is_32bit = false;
+        union cpuData *cpuData = NULL;
+        int ret;
+
+        ret = cpuEncode("x86_64", cpu, NULL, &cpuData,
+                        NULL, NULL, NULL, NULL);
+        if (ret < 0)
+            goto error;
+
+        is_32bit = (cpuHasFeature("x86_64", cpuData, "lm") != 1);
+        cpuDataFree("x86_64", cpuData);
+
+        if (is_32bit) {
+            VIR_FREE(dom->os.arch);
+            dom->os.arch = strdup("i686");
+        }
+    }
     return 0;
 
 syntax:
-- 
1.7.7.6



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]