@@ -20,6 +20,8 @@
#include "qemu/osdep.h"
#include "hw/boards.h"
#include "qapi/error.h"
+#include "qapi/opts-visitor.h"
+#include "qapi/qapi-visit-machine.h"
unsigned int machine_topo_get_sockets(const MachineState *ms)
{
@@ -571,9 +573,9 @@ static void parse_hybrid_core(MachineState *ms,
}
}
-void set_hybrid_options(MachineState *ms,
- const HybridOptions *config,
- Error **errp)
+static void set_hybrid_options(MachineState *ms,
+ const HybridOptions *config,
+ Error **errp)
{
MachineClass *mc = MACHINE_GET_CLASS(ms);
@@ -601,6 +603,34 @@ void set_hybrid_options(MachineState *ms,
}
}
+static int parse_hybrid(void *opaque, QemuOpts *opts, Error **errp)
+{
+ g_autoptr(HybridOptions) config = NULL;
+ MachineState *ms = MACHINE(opaque);
+ Error *err = NULL;
+ Visitor *v = opts_visitor_new(opts);
+
+ visit_type_HybridOptions(v, NULL, &config, errp);
+ visit_free(v);
+ if (!config) {
+ return -1;
+ }
+
+ set_hybrid_options(ms, config, &err);
+
+ if (err) {
+ error_propagate(errp, err);
+ return -1;
+ }
+
+ return 0;
+}
+
+void parse_hybrid_opts(MachineState *ms)
+{
+ qemu_opts_foreach(qemu_find_opts("hybrid"), parse_hybrid, ms, &error_fatal);
+}
+
void machine_free_hybrid_topology(MachineState *ms)
{
HybridCluster *cluster;
@@ -37,9 +37,7 @@ void machine_set_cpu_numa_node(MachineState *machine,
void machine_parse_smp_config(MachineState *ms,
const SMPConfiguration *config, Error **errp);
int machine_parse_hybrid_core_type(MachineState *ms, const char *coretype);
-void set_hybrid_options(MachineState *ms,
- const HybridOptions *config,
- Error **errp);
+void parse_hybrid_opts(MachineState *ms);
void machine_free_hybrid_topology(MachineState *ms);
void machine_validate_hybrid_topology(MachineState *ms, Error **errp);
void machine_consolidate_hybrid_topology(MachineState *ms);