qemu-devel
[Top][All Lists]
Advanced

[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);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]