On Mon, Jan 23, 2012 at 14:11:08 +0100, Paolo Bonzini wrote:
The qemu32 CPU model is chosen based on the <os arch=...> name
when
creating the QEMU command line. Reflect the kvm32/kvm64/qemu32/qemu64
CPU models in the <os> element when doing the opposite transformation.
To do this, we need to not look at def->os.arch until after the
command-line has been parsed.
At the same time, avoid creating an empty <cpu> element when the QEMU
command-line specifies the default CPU model for the guest arch.
Signed-off-by: Paolo Bonzini <pbonzini(a)redhat.com>
---
src/qemu/qemu_command.c | 70 +++++++++++++++++++++++++++++++----------------
1 files changed, 46 insertions(+), 24 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index aaccf62..7c4460e 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
...
@@ -6831,6 +6832,21 @@ qemuParseCommandLineCPU(virDomainDefPtr dom,
}
} while ((p = next));
+ if (model) {
+ if (STREQ(model, "qemu32") || STREQ(model, "kvm32")) {
+ dom->os.arch = strdup("i686");
+ VIR_FREE(model);
+ } else if (STREQ(model, "qemu64") || STREQ(model, "kvm64"))
{
+ dom->os.arch = strdup("x86_64");
+ VIR_FREE(model);
+ } else {
+ if (!cpu && !(cpu = qemuInitGuestCPU(dom)))
+ goto error;
+
+ cpu->model = model;
+ }
+ }
+
I think we could just set cpu->model even if the model used in qemu command
line was {qemu,kvm}{32,64}. That would probably mean we need to add some of
the models in cpu_map.xml, though.
return 0;
syntax:
...
@@ -7542,6 +7544,26 @@ virDomainDefPtr
qemuParseCommandLine(virCapsPtr caps,
}
}
+ if (!def->os.arch) {
+ if (STRPREFIX(def->emulator, "qemu"))
+ path = def->emulator;
+ else
+ path = strstr(def->emulator, "qemu");
+ if (path &&
+ STRPREFIX(path, "qemu-system-"))
+ def->os.arch = strdup(path + strlen("qemu-system-"));
+ else
+ def->os.arch = strdup("i686");
+ if (!def->os.arch)
+ goto no_memory;
+ }
+
+ if (STREQ(def->os.arch, "i686")||STREQ(def->os.arch,
"x86_64"))
+ def->features = (1 << VIR_DOMAIN_FEATURE_ACPI)
+ /*| (1 << VIR_DOMAIN_FEATURE_APIC)*/;
I know you were just copy&pasting, but while doing that, you could also make
this last statement a bit more readable and add spaces around "||" and either
use {} or remove the last line (the comment).
+
+ def->features &= ~disabled_features;
+
#undef WANT_VALUE
if (def->ndisks > 0 && ceph_args) {
char *hosts, *port, *saveptr = NULL, *token;
Otherwise the patch looks good.
Jirka