[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PATCH v3 4/7] ppc: open code cpu creation for machine types
From: |
Greg Kurz |
Subject: |
[Qemu-ppc] [PATCH v3 4/7] ppc: open code cpu creation for machine types |
Date: |
Wed, 06 Jul 2016 14:14:25 +0200 |
User-agent: |
StGit/0.17.1-dirty |
If we want to generate cpu_dt_id in the machine code, this must occur
before the cpu gets realized. We must open code the cpu creation to be
able to do this.
This patch just does that.
Signed-off-by: Greg Kurz <address@hidden>
---
v3: don't parse cpu features as it is done in a previous patch
---
hw/ppc/ppc.c | 32 +++++++++++++++++++++++++++++++-
1 file changed, 31 insertions(+), 1 deletion(-)
diff --git a/hw/ppc/ppc.c b/hw/ppc/ppc.c
index 313b3f0b9a51..0df32a9b3965 100644
--- a/hw/ppc/ppc.c
+++ b/hw/ppc/ppc.c
@@ -32,6 +32,7 @@
#include "sysemu/cpus.h"
#include "hw/timer/m48t59.h"
#include "qemu/log.h"
+#include "qapi/error.h"
#include "qemu/error-report.h"
#include "qapi/error.h"
#include "hw/loader.h"
@@ -1354,7 +1355,36 @@ PowerPCCPU *ppc_get_vcpu_by_dt_id(int cpu_dt_id)
PowerPCCPU *ppc_cpu_init(const char *cpu_model)
{
- return POWERPC_CPU(cpu_generic_init(TYPE_POWERPC_CPU, cpu_model));
+ PowerPCCPU *cpu;
+ ObjectClass *oc;
+ gchar **model_pieces;
+ Error *err = NULL;
+
+ model_pieces = g_strsplit(cpu_model, ",", 2);
+ if (!model_pieces[0]) {
+ error_report("Invalid/empty CPU model name");
+ return NULL;
+ }
+
+ oc = cpu_class_by_name(TYPE_POWERPC_CPU, model_pieces[0]);
+ if (oc == NULL) {
+ error_report("Unable to find CPU definition: %s", model_pieces[0]);
+ goto out;
+ }
+
+ cpu = POWERPC_CPU(object_new(object_class_get_name(oc)));
+ object_property_set_bool(OBJECT(cpu), true, "realized", &err);
+
+out:
+ g_strfreev(model_pieces);
+
+ if (err != NULL) {
+ error_report_err(err);
+ object_unref(OBJECT(cpu));
+ return NULL;
+ }
+
+ return cpu;
}
void ppc_cpu_parse_features(const char *cpu_model)
- [Qemu-ppc] [PATCH v3 0/7] ppc: compute cpu_dt_id in the machine code, Greg Kurz, 2016/07/06
- [Qemu-ppc] [PATCH v3 1/7] ppc: different creation paths for cpus in system and user mode, Greg Kurz, 2016/07/06
- [Qemu-ppc] [PATCH v3 2/7] ppc: move smp_threads sanity checks to spapr, Greg Kurz, 2016/07/06
- [Qemu-ppc] [PATCH v3 3/7] ppc: parse cpu features once, Greg Kurz, 2016/07/06
- [Qemu-ppc] [PATCH v3 4/7] ppc: open code cpu creation for machine types,
Greg Kurz <=
- [Qemu-ppc] [PATCH v3 5/7] ppc: each machine type to provide vcpu_dt_id, Greg Kurz, 2016/07/06
- [Qemu-ppc] [PATCH v3 6/7] ppc: drop vcpu_idt_id bits from the target code, Greg Kurz, 2016/07/06
- [Qemu-ppc] [PATCH v3 7/7] spapr: consolidate the logic of core cpu_dt_id, Greg Kurz, 2016/07/06