diff mbox series

[19/29] vl: separate qemu_create_machine

Message ID 20201027182144.3315885-20-pbonzini@redhat.com
State Accepted
Commit f5c9fcb82d37fe26aca1b8f68e1439ca3fd37587
Headers show
Series cleanup qemu_init and make sense of command line processing | expand

Commit Message

Paolo Bonzini Oct. 27, 2020, 6:21 p.m. UTC
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 softmmu/vl.c | 111 +++++++++++++++++++++++++++------------------------
 1 file changed, 59 insertions(+), 52 deletions(-)

Comments

Igor Mammedov Nov. 18, 2020, 4:45 p.m. UTC | #1
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);
diff mbox series

Patch

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