aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony Liguori <aliguori@us.ibm.com>2013-08-07 12:43:34 -0500
committerAnthony Liguori <aliguori@us.ibm.com>2013-08-07 12:43:34 -0500
commit6c0f48f5b6c4cf3e1ec8ec6fa7bfe1b97dc92a9c (patch)
tree91773fbd2b967fdd62f13066ab33efb650f4d910
parentcafffa545420a2c6dc33f9cb58401c606af59572 (diff)
parentcd7b87ffe9b6b7b0089ec8c71555f3b942bc6daf (diff)
Merge remote-tracking branch 'afaerber/tags/qom-cpu-for-anthony' into staging
QOM CPUState refactorings * Clean up X86CPU error handling # gpg: Signature made Tue 06 Aug 2013 01:57:34 PM CDT using RSA key ID 3E7E013F # gpg: Can't check signature: public key not found # By Andreas Färber # Via Andreas Färber * afaerber/tags/qom-cpu-for-anthony: target-i386: Fix X86CPU error handling
-rw-r--r--hw/i386/pc.c13
-rw-r--r--target-i386/cpu.c6
2 files changed, 11 insertions, 8 deletions
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index a2b9d889dd..6a0b042786 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -912,20 +912,19 @@ static X86CPU *pc_new_cpu(const char *cpu_model, int64_t apic_id,
X86CPU *cpu;
Error *local_err = NULL;
- cpu = cpu_x86_create(cpu_model, icc_bridge, errp);
- if (!cpu) {
- return cpu;
+ cpu = cpu_x86_create(cpu_model, icc_bridge, &local_err);
+ if (local_err != NULL) {
+ error_propagate(errp, local_err);
+ return NULL;
}
object_property_set_int(OBJECT(cpu), apic_id, "apic-id", &local_err);
object_property_set_bool(OBJECT(cpu), true, "realized", &local_err);
if (local_err) {
- if (cpu != NULL) {
- object_unref(OBJECT(cpu));
- cpu = NULL;
- }
error_propagate(errp, local_err);
+ object_unref(OBJECT(cpu));
+ cpu = NULL;
}
return cpu;
}
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index 71ab91531d..2efbeca8b2 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -1824,7 +1824,11 @@ X86CPU *cpu_x86_create(const char *cpu_model, DeviceState *icc_bridge,
}
out:
- error_propagate(errp, error);
+ if (error != NULL) {
+ error_propagate(errp, error);
+ object_unref(OBJECT(cpu));
+ cpu = NULL;
+ }
g_strfreev(model_pieces);
return cpu;
}