vl: extract qemu_init_subsystems

Group a bunch of subsystem initializations that can be done right
after command line parsing.  Remove initializations that can be done
simply as global variable initializers.

Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Paolo Bonzini 2020-10-21 05:33:40 -04:00
parent e0d17dfd22
commit efd7ab22fb
1 changed files with 43 additions and 51 deletions

View File

@ -128,7 +128,7 @@ bool enable_mlock = false;
bool enable_cpu_pm = false;
int nb_nics;
NICInfo nd_table[MAX_NICS];
int autostart;
int autostart = 1;
static enum {
RTC_BASE_UTC,
RTC_BASE_LOCALTIME,
@ -1228,7 +1228,8 @@ struct VMChangeStateEntry {
int priority;
};
static QTAILQ_HEAD(, VMChangeStateEntry) vm_change_state_head;
static QTAILQ_HEAD(, VMChangeStateEntry) vm_change_state_head =
QTAILQ_HEAD_INITIALIZER(vm_change_state_head);
/**
* qemu_add_vm_change_state_handler_prio:
@ -2968,11 +2969,44 @@ static void qemu_maybe_daemonize(const char *pid_file)
qemu_add_exit_notifier(&qemu_unlink_pidfile_notifier);
}
static void qemu_init_subsystems(void)
{
Error *err;
os_set_line_buffering();
module_call_init(MODULE_INIT_TRACE);
qemu_init_cpu_list();
qemu_init_cpu_loop();
qemu_mutex_lock_iothread();
atexit(qemu_run_exit_notifiers);
module_call_init(MODULE_INIT_QOM);
module_call_init(MODULE_INIT_MIGRATION);
runstate_init();
precopy_infrastructure_init();
postcopy_infrastructure_init();
monitor_init_globals();
if (qcrypto_init(&err) < 0) {
error_reportf_err(err, "cannot initialize crypto: ");
exit(1);
}
os_setup_early_signal_handling();
bdrv_init_with_whitelist();
socket_init();
}
void qemu_init(int argc, char **argv, char **envp)
{
int i;
int snapshot, linux_boot;
int snapshot = 0;
int linux_boot;
const char *initrd_filename;
const char *kernel_filename, *kernel_cmdline;
const char *boot_order = NULL;
@ -2993,7 +3027,6 @@ void qemu_init(int argc, char **argv, char **envp)
ram_addr_t maxram_size;
uint64_t ram_slots = 0;
FILE *vmstate_dump_file = NULL;
Error *main_loop_err = NULL;
Error *err = NULL;
const char *mem_path = NULL;
bool have_custom_ram_size;
@ -3001,22 +3034,6 @@ void qemu_init(int argc, char **argv, char **envp)
QemuPluginList plugin_list = QTAILQ_HEAD_INITIALIZER(plugin_list);
int mem_prealloc = 0; /* force preallocation of physical target memory */
os_set_line_buffering();
error_init(argv[0]);
module_call_init(MODULE_INIT_TRACE);
qemu_init_cpu_list();
qemu_init_cpu_loop();
qemu_mutex_lock_iothread();
atexit(qemu_run_exit_notifiers);
qemu_init_exec_dir(argv[0]);
module_call_init(MODULE_INIT_QOM);
module_call_init(MODULE_INIT_MIGRATION);
qemu_add_opts(&qemu_drive_opts);
qemu_add_drive_opts(&qemu_legacy_drive_opts);
qemu_add_drive_opts(&qemu_common_drive_opts);
@ -3051,27 +3068,10 @@ void qemu_init(int argc, char **argv, char **envp)
qemu_add_opts(&qemu_fw_cfg_opts);
module_call_init(MODULE_INIT_OPTS);
runstate_init();
precopy_infrastructure_init();
postcopy_infrastructure_init();
monitor_init_globals();
error_init(argv[0]);
qemu_init_exec_dir(argv[0]);
if (qcrypto_init(&err) < 0) {
error_reportf_err(err, "cannot initialize crypto: ");
exit(1);
}
QTAILQ_INIT(&vm_change_state_head);
os_setup_early_signal_handling();
cpu_option = NULL;
snapshot = 0;
nb_nics = 0;
bdrv_init_with_whitelist();
autostart = 1;
qemu_init_subsystems();
/* first pass of option parsing */
optind = 1;
@ -3952,13 +3952,10 @@ void qemu_init(int argc, char **argv, char **envp)
qemu_process_help_options();
qemu_maybe_daemonize(pid_file);
if (qemu_init_main_loop(&main_loop_err)) {
error_report_err(main_loop_err);
exit(1);
}
qemu_init_main_loop(&error_fatal);
cpu_timers_init();
user_register_global_props();
replay_configure(icount_opts);
if (incoming && !preconfig_exit_requested) {
@ -3995,6 +3992,7 @@ void qemu_init(int argc, char **argv, char **envp)
}
cpu_exec_init_all();
page_size_init();
if (machine_class->hw_version) {
qemu_set_hw_version(machine_class->hw_version);
@ -4137,9 +4135,6 @@ void qemu_init(int argc, char **argv, char **envp)
exit(1);
}
page_size_init();
socket_init();
qemu_opts_foreach(qemu_find_opts("object"),
user_creatable_add_opts_foreach,
object_create_initial, &error_fatal);
@ -4256,9 +4251,6 @@ void qemu_init(int argc, char **argv, char **envp)
semihosting_arg_fallback(kernel_filename, kernel_cmdline);
}
/* initialize cpu timers and VCPU throttle modules */
cpu_timers_init();
if (default_net) {
QemuOptsList *net = qemu_find_opts("net");
qemu_opts_set(net, NULL, "type", "nic", &error_abort);