All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: jsnow@redhat.com, berrange@redhat.com, ehabkost@redhat.com,
	imammedo@redhat.com
Subject: [RFC PATCH 00/22] cleanup qemu_init and make sense of command line processing
Date: Wed, 21 Oct 2020 16:56:54 -0400	[thread overview]
Message-ID: <20201021205716.2359430-1-pbonzini@redhat.com> (raw)

This series cleans up qemu_init, grouping together code that does
a similar function.  In particular:

* generic initialization of various subsystemd is placed in separate
functions

* code that was randomly placed in vl.c is moved to machine.c

* early options that affect the whole program are grouped
together (-sandbox, -name, -trace, -L)

* pure syntactic sugar options (-mem-prealloc, -watchdog)
are grouped together

* the creation of backends is split into an "early" (before -machine)
and a "late" (after -machine) part


The remaining code that I have not split deals mostly with setting
up the machine object; this includes -smp, -boot, -m, -numa.  With
this refactoring, one can (almost) see some clearly delimited phases:

* before the machine is created, only backends can be created
(e.g. early -object processing).  In principle more initialization
could be moved before the machine is created: the machine class is
available and it can be used to decide which default devices to create.

* after the machine is created, the accelerator needs to be established

* after the accelerator is established, board setup can
proceed and devices can be created


Apart from the obvious absence of commands like machine-set and accel-set
(and making chardev-add, blockdev-add etc. available in preconfig mode),
the following complications are the blockers for pure-QMP configuration
of machines:

* as usual, there is no hook into board creation code to communicate
the backends for on-board devices.  This is because serial_hd,
nd_table etc. don't have a QAPI/QMP representation.

* the current "preconfig" loop does not let you configure enough, since it
ends before devices can be created and the regular monitor loop only
starts after qdev_machine_creation_done.  Perhaps x-exit-preconfig would
execute everything up to (and excluding) qdev_machine_creation_done,
while the rest would be deferred to the first "cont" command using a vm
state change notifier.

Paolo

Paolo Bonzini (22):
  semihosting: fix order of initialization functions
  machine: remove deprecated -machine enforce-config-section option
  machine: move UP defaults to class_base_init
  machine: move SMP initialization from vl.c
  vl: extract validation of -smp to machine.c
  vl: remove bogus check
  trace: remove argument from trace_init_file
  vl: split various early command line options to a separate function
  vl: move various initialization routines out of qemu_init
  vl: extract qemu_init_subsystems
  vl: move prelaunch part of qemu_init to a new function
  vl: move bios_name out of softmmu/vl.c
  vl: extract various command line validation snippets to a new function
  vl: preconfig and loadvm are mutually exclusive
  vl: extract various command line desugaring snippets to a new function
  vl: create "-net nic -net user" default earlier
  vl: load plugins as late as possible
  vl: move semihosting command line fallback to qemu_finish_machine_init
  vl: extract default devices to separate functions
  vl: move CHECKPOINT_INIT after preconfig
  vl: separate qemu_create_early_backends
  vl: separate qemu_create_late_backends

 bsd-user/main.c                      |    6 +-
 docs/system/deprecated.rst           |   12 +-
 hw/core/machine.c                    |   68 +-
 include/hw/boards.h                  |    2 +-
 include/hw/qdev-core.h               |    8 -
 include/sysemu/sysemu.h              |    1 +
 linux-user/main.c                    |    6 +-
 migration/migration.c                |   12 +-
 qemu-img.c                           |    6 +-
 qemu-io.c                            |    6 +-
 qemu-nbd.c                           |    6 +-
 qemu-options.hx                      |    8 -
 scsi/qemu-pr-helper.c                |    6 +-
 softmmu/qdev-monitor.c               |    6 -
 softmmu/vl.c                         | 1249 +++++++++++++-------------
 storage-daemon/qemu-storage-daemon.c |    9 +-
 trace/control.c                      |   10 +-
 trace/control.h                      |   12 +-
 18 files changed, 704 insertions(+), 729 deletions(-)

-- 
2.26.2



             reply	other threads:[~2020-10-21 20:59 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-21 20:56 Paolo Bonzini [this message]
2020-10-21 20:56 ` [PATCH 01/22] semihosting: fix order of initialization functions Paolo Bonzini
2020-10-27 11:18   ` Alex Bennée
2020-10-27 13:32     ` Paolo Bonzini
2020-10-21 20:56 ` [PATCH 02/22] machine: remove deprecated -machine enforce-config-section option Paolo Bonzini
2020-10-22  5:09   ` Thomas Huth
2020-10-22  6:54     ` Paolo Bonzini
2020-10-21 20:56 ` [PATCH 03/22] machine: move UP defaults to class_base_init Paolo Bonzini
2020-10-22  5:11   ` Thomas Huth
2020-10-21 20:56 ` [PATCH 04/22] machine: move SMP initialization from vl.c Paolo Bonzini
2020-10-22  7:16   ` Philippe Mathieu-Daudé
2020-10-21 20:56 ` [PATCH 05/22] vl: extract validation of -smp to machine.c Paolo Bonzini
2020-10-21 20:57 ` [PATCH 06/22] vl: remove bogus check Paolo Bonzini
2020-10-21 20:57 ` [PATCH 07/22] trace: remove argument from trace_init_file Paolo Bonzini
2020-10-21 20:57 ` [PATCH 08/22] vl: split various early command line options to a separate function Paolo Bonzini
2020-10-21 20:57 ` [PATCH 09/22] vl: move various initialization routines out of qemu_init Paolo Bonzini
2020-10-21 20:57 ` [PATCH 10/22] vl: extract qemu_init_subsystems Paolo Bonzini
2020-10-21 20:57 ` [PATCH 11/22] vl: move prelaunch part of qemu_init to a new function Paolo Bonzini
2020-10-21 20:57 ` [PATCH 12/22] vl: move bios_name out of softmmu/vl.c Paolo Bonzini
2020-10-22  7:22   ` Philippe Mathieu-Daudé
2020-10-21 20:57 ` [PATCH 13/22] vl: extract various command line validation snippets to a new function Paolo Bonzini
2020-10-21 20:57 ` [PATCH 14/22] vl: preconfig and loadvm are mutually exclusive Paolo Bonzini
2020-10-21 20:57 ` [PATCH 15/22] vl: extract various command line desugaring snippets to a new function Paolo Bonzini
2020-10-21 20:57 ` [PATCH 16/22] vl: create "-net nic -net user" default earlier Paolo Bonzini
2020-10-21 20:57 ` [PATCH 17/22] vl: load plugins as late as possible Paolo Bonzini
2020-10-22  7:28   ` Philippe Mathieu-Daudé
2020-10-21 20:57 ` [PATCH 18/22] vl: move semihosting command line fallback to qemu_finish_machine_init Paolo Bonzini
2020-10-21 20:57 ` [PATCH 19/22] vl: extract default devices to separate functions Paolo Bonzini
2020-10-21 20:57 ` [PATCH 20/22] vl: move CHECKPOINT_INIT after preconfig Paolo Bonzini
2020-10-22  7:29   ` Philippe Mathieu-Daudé
2020-10-21 20:57 ` [PATCH 21/22] vl: separate qemu_create_early_backends Paolo Bonzini
2020-10-21 20:57 ` [PATCH 22/22] vl: separate qemu_create_late_backends Paolo Bonzini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201021205716.2359430-1-pbonzini@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=berrange@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=imammedo@redhat.com \
    --cc=jsnow@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.