@@ -1645,6 +1645,16 @@ void machine_run_board_init(MachineState *machine, const char *mem_path, Error *
accel_init_interfaces(ACCEL_GET_CLASS(machine->accelerator));
machine_class->init(machine);
+}
+
+void machine_run_board_post_init(MachineState *machine, Error **errp)
+{
+ MachineClass *machine_class = MACHINE_GET_CLASS(machine);
+
+ if (machine_class->post_init) {
+ machine_class->post_init(machine);
+ }
+
phase_advance(PHASE_MACHINE_INITIALIZED);
}
@@ -33,6 +33,7 @@ const char *machine_class_default_cpu_type(MachineClass *mc);
void machine_add_audiodev_property(MachineClass *mc);
void machine_run_board_init(MachineState *machine, const char *mem_path, Error **errp);
+void machine_run_board_post_init(MachineState *machine, Error **errp);
bool machine_usb(MachineState *machine);
int machine_phandle_start(MachineState *machine);
bool machine_dump_guest_core(MachineState *machine);
@@ -271,6 +272,7 @@ struct MachineClass {
const char *deprecation_reason;
void (*init)(MachineState *state);
+ void (*post_init)(MachineState *state);
void (*reset)(MachineState *state, ShutdownCause reason);
void (*wakeup)(MachineState *state);
int (*kvm_type)(MachineState *machine, const char *arg);
@@ -2659,12 +2659,14 @@ static void qemu_init_board(void)
/* process plugin before CPUs are created, but once -smp has been parsed */
qemu_plugin_load_list(&plugin_list, &error_fatal);
- /* From here on we enter MACHINE_PHASE_INITIALIZED. */
machine_run_board_init(current_machine, mem_path, &error_fatal);
/* Create CPU topology device if any. */
qemu_add_cli_devices_early();
+ /* From here on we enter MACHINE_PHASE_INITIALIZED. */
+ machine_run_board_post_init(current_machine, &error_fatal);
+
drive_check_orphaned();
realtime_init();
Split machine initialization and machine_run_board_init() into two parts around qemu_add_cli_devices_early(), allowing initialization to continue after the CPU creation from the CLI. This enables machine to place the initialization steps with CPU dependencies in post_init(). Signed-off-by: Zhao Liu <zhao1.liu@intel.com> --- hw/core/machine.c | 10 ++++++++++ include/hw/boards.h | 2 ++ system/vl.c | 4 +++- 3 files changed, 15 insertions(+), 1 deletion(-)