[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 19/29] vl: separate qemu_create_machine
From: |
Igor Mammedov |
Subject: |
Re: [PATCH 19/29] vl: separate qemu_create_machine |
Date: |
Wed, 18 Nov 2020 17:45:40 +0100 |
On Tue, 27 Oct 2020 14:21:34 -0400
Paolo Bonzini <pbonzini@redhat.com> wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
> softmmu/vl.c | 111 +++++++++++++++++++++++++++------------------------
> 1 file changed, 59 insertions(+), 52 deletions(-)
>
> diff --git a/softmmu/vl.c b/softmmu/vl.c
> index 0c390b979e..38ad3cc895 100644
> --- a/softmmu/vl.c
> +++ b/softmmu/vl.c
> @@ -133,6 +133,8 @@ static const char *boot_order;
> static const char *boot_once;
> static const char *incoming;
> static const char *loadvm;
> +static ram_addr_t maxram_size;
> +static uint64_t ram_slots;
> static int display_remote;
> static int snapshot;
> static QemuPluginList plugin_list = QTAILQ_HEAD_INITIALIZER(plugin_list);
> @@ -2791,8 +2793,13 @@ static void qemu_create_late_backends(void)
> qemu_semihosting_console_init();
> }
>
> -static bool set_memory_options(uint64_t *ram_slots, ram_addr_t *maxram_size,
> - MachineClass *mc)
> +static bool have_custom_ram_size(void)
> +{
> + QemuOpts *opts = qemu_find_opts_singleton("memory");
> + return !!qemu_opt_get(opts, "size");
> +}
> +
> +static void set_memory_options(MachineClass *mc)
> {
> uint64_t sz;
> const char *mem_str;
> @@ -2842,7 +2849,7 @@ static bool set_memory_options(uint64_t *ram_slots,
> ram_addr_t *maxram_size,
>
> /* store value for the future use */
> qemu_opt_set_number(opts, "size", ram_size, &error_abort);
> - *maxram_size = ram_size;
> + maxram_size = ram_size;
>
> if (qemu_opt_get(opts, "maxmem")) {
> uint64_t slots;
> @@ -2863,15 +2870,58 @@ static bool set_memory_options(uint64_t *ram_slots,
> ram_addr_t *maxram_size,
> exit(EXIT_FAILURE);
> }
>
> - *maxram_size = sz;
> - *ram_slots = slots;
> + maxram_size = sz;
> + ram_slots = slots;
> } else if (qemu_opt_get(opts, "slots")) {
> error_report("invalid -m option value: missing 'maxmem' option");
> exit(EXIT_FAILURE);
> }
>
> loc_pop(&loc);
> - return !!mem_str;
> +}
> +
> +static void qemu_create_machine(MachineClass *machine_class)
> +{
> + object_set_machine_compat_props(machine_class->compat_props);
> +
> + set_memory_options(machine_class);
> +
> + current_machine =
> MACHINE(object_new_with_class(OBJECT_CLASS(machine_class)));
> + if (machine_help_func(qemu_get_machine_opts(), current_machine)) {
> + exit(0);
> + }
> + object_property_add_child(object_get_root(), "machine",
> + OBJECT(current_machine));
> + object_property_add_child(container_get(OBJECT(current_machine),
> + "/unattached"),
> + "sysbus", OBJECT(sysbus_get_default()));
> +
> + if (machine_class->minimum_page_bits) {
> + if
> (!set_preferred_target_page_bits(machine_class->minimum_page_bits)) {
> + /* This would be a board error: specifying a minimum smaller than
> + * a target's compile-time fixed setting.
> + */
> + g_assert_not_reached();
> + }
> + }
> +
> + cpu_exec_init_all();
> +
> + if (machine_class->hw_version) {
> + qemu_set_hw_version(machine_class->hw_version);
> + }
> +
> + machine_smp_parse(current_machine,
> + qemu_opts_find(qemu_find_opts("smp-opts"), NULL), &error_fatal);
> +
> + /*
> + * Get the default machine options from the machine if it is not already
> + * specified either by the configuration file or by the command line.
> + */
> + if (machine_class->default_machine_opts) {
> + qemu_opts_set_defaults(qemu_find_opts("machine"),
> + machine_class->default_machine_opts, 0);
> + }
> }
>
> static int global_init_func(void *opaque, QemuOpts *opts, Error **errp)
> @@ -3412,10 +3462,7 @@ void qemu_init(int argc, char **argv, char **envp)
> const char *optarg;
> MachineClass *machine_class;
> bool userconfig = true;
> - ram_addr_t maxram_size;
> - uint64_t ram_slots = 0;
> FILE *vmstate_dump_file = NULL;
> - bool have_custom_ram_size;
>
> qemu_add_opts(&qemu_drive_opts);
> qemu_add_drive_opts(&qemu_legacy_drive_opts);
> @@ -4344,48 +4391,7 @@ void qemu_init(int argc, char **argv, char **envp)
>
> configure_rtc(qemu_find_opts_singleton("rtc"));
>
> - machine_class = select_machine();
> - object_set_machine_compat_props(machine_class->compat_props);
> -
> - have_custom_ram_size = set_memory_options(&ram_slots, &maxram_size,
> - machine_class);
> -
> - current_machine =
> MACHINE(object_new_with_class(OBJECT_CLASS(machine_class)));
> - if (machine_help_func(qemu_get_machine_opts(), current_machine)) {
> - exit(0);
> - }
> - object_property_add_child(object_get_root(), "machine",
> - OBJECT(current_machine));
> - object_property_add_child(container_get(OBJECT(current_machine),
> - "/unattached"),
> - "sysbus", OBJECT(sysbus_get_default()));
> -
> - if (machine_class->minimum_page_bits) {
> - if
> (!set_preferred_target_page_bits(machine_class->minimum_page_bits)) {
> - /* This would be a board error: specifying a minimum smaller than
> - * a target's compile-time fixed setting.
> - */
> - g_assert_not_reached();
> - }
> - }
> -
> - cpu_exec_init_all();
> -
> - if (machine_class->hw_version) {
> - qemu_set_hw_version(machine_class->hw_version);
> - }
> -
> - machine_smp_parse(current_machine,
> - qemu_opts_find(qemu_find_opts("smp-opts"), NULL), &error_fatal);
> -
> - /*
> - * Get the default machine options from the machine if it is not already
> - * specified either by the configuration file or by the command line.
> - */
> - if (machine_class->default_machine_opts) {
> - qemu_opts_set_defaults(qemu_find_opts("machine"),
> - machine_class->default_machine_opts, 0);
> - }
> + qemu_create_machine(select_machine());
>
> qemu_disable_default_devices();
> qemu_create_default_devices();
> @@ -4420,6 +4426,7 @@ void qemu_init(int argc, char **argv, char **envp)
> * called from configure_accelerator().
> */
>
> + machine_class = MACHINE_GET_CLASS(current_machine);
> if (!qtest_enabled() && machine_class->deprecation_reason) {
> error_report("Machine type '%s' is deprecated: %s",
> machine_class->name, machine_class->deprecation_reason);
> @@ -4473,7 +4480,7 @@ void qemu_init(int argc, char **argv, char **envp)
> exit(EXIT_FAILURE);
> }
> backend_size = object_property_get_uint(backend, "size",
> &error_abort);
> - if (have_custom_ram_size && backend_size != ram_size) {
> + if (have_custom_ram_size() && backend_size != ram_size) {
> error_report("Size specified by -m option must match size of
> "
> "explicitly specified 'memory-backend'
> property");
> exit(EXIT_FAILURE);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [PATCH 19/29] vl: separate qemu_create_machine,
Igor Mammedov <=