[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-block] [Qemu-devel] [RFC PATCH 5/6] vl: Create block backends
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [Qemu-block] [Qemu-devel] [RFC PATCH 5/6] vl: Create block backends before setting machine properties |
Date: |
Mon, 4 Mar 2019 17:14:32 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.5.1 |
On 2/25/19 7:37 PM, Markus Armbruster wrote:
> qemu-system-FOO's main() acts on command line arguments in its own
> idiosyncratic order. There's not much method to its madness.
> Whenever we find a case where one kind of command line argument needs
> to refer to something created for another kind later, we rejigger the
> order.
>
> Block devices get created long after machine properties get processed.
> Therefore, block device machine properties can be created, but not
> set. No such properties exist. But the next commit will create some.
> Time to rejigger again: create block devices earlier.
>
> Signed-off-by: Markus Armbruster <address@hidden>
> ---
> vl.c | 66 ++++++++++++++++++++++++++++++------------------------------
> 1 file changed, 33 insertions(+), 33 deletions(-)
>
> diff --git a/vl.c b/vl.c
> index 6ce3d2d448..5cb0810ffa 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -4232,6 +4232,39 @@ int main(int argc, char **argv, char **envp)
> exit(0);
> }
>
Can we extract this from the main, maybe as "parse_blockdev()"? This
will ease further rejigger :)
> + /* If the currently selected machine wishes to override the units-per-bus
> + * property of its default HBA interface type, do so now. */
> + if (machine_class->units_per_default_bus) {
> + override_max_devs(machine_class->block_default_type,
> + machine_class->units_per_default_bus);
> + }
> +
> + /* open the virtual block devices */
> + while (!QSIMPLEQ_EMPTY(&bdo_queue)) {
> + BlockdevOptions_queue *bdo = QSIMPLEQ_FIRST(&bdo_queue);
> +
> + QSIMPLEQ_REMOVE_HEAD(&bdo_queue, entry);
> + loc_push_restore(&bdo->loc);
> + qmp_blockdev_add(bdo->bdo, &error_fatal);
> + loc_pop(&bdo->loc);
> + qapi_free_BlockdevOptions(bdo->bdo);
> + g_free(bdo);
> + }
> + if (snapshot || replay_mode != REPLAY_MODE_NONE) {
> + qemu_opts_foreach(qemu_find_opts("drive"), drive_enable_snapshot,
> + NULL, NULL);
> + }
> + if (qemu_opts_foreach(qemu_find_opts("drive"), drive_init_func,
> + &machine_class->block_default_type, &error_fatal))
> {
> + /* We printed help */
> + exit(0);
> + }
> +
> + default_drive(default_cdrom, snapshot,
> machine_class->block_default_type, 2,
> + CDROM_OPTS);
> + default_drive(default_floppy, snapshot, IF_FLOPPY, 0, FD_OPTS);
> + default_drive(default_sdcard, snapshot, IF_SD, 0, SD_OPTS);
> +
Can you add a comment here such:
/*
* Arguments setting properties on devices has to be processed before
* the following qemu_opt_foreach(...machine_set_property...) call.
*/
> machine_opts = qemu_get_machine_opts();
> qemu_opt_foreach(machine_opts, machine_set_property, current_machine,
> &error_fatal);
> @@ -4355,39 +4388,6 @@ int main(int argc, char **argv, char **envp)
> ram_mig_init();
> dirty_bitmap_mig_init();
>
> - /* If the currently selected machine wishes to override the units-per-bus
> - * property of its default HBA interface type, do so now. */
> - if (machine_class->units_per_default_bus) {
> - override_max_devs(machine_class->block_default_type,
> - machine_class->units_per_default_bus);
> - }
> -
> - /* open the virtual block devices */
> - while (!QSIMPLEQ_EMPTY(&bdo_queue)) {
> - BlockdevOptions_queue *bdo = QSIMPLEQ_FIRST(&bdo_queue);
> -
> - QSIMPLEQ_REMOVE_HEAD(&bdo_queue, entry);
> - loc_push_restore(&bdo->loc);
> - qmp_blockdev_add(bdo->bdo, &error_fatal);
> - loc_pop(&bdo->loc);
> - qapi_free_BlockdevOptions(bdo->bdo);
> - g_free(bdo);
> - }
> - if (snapshot || replay_mode != REPLAY_MODE_NONE) {
> - qemu_opts_foreach(qemu_find_opts("drive"), drive_enable_snapshot,
> - NULL, NULL);
> - }
> - if (qemu_opts_foreach(qemu_find_opts("drive"), drive_init_func,
> - &machine_class->block_default_type, &error_fatal))
> {
> - /* We printed help */
> - exit(0);
> - }
> -
> - default_drive(default_cdrom, snapshot,
> machine_class->block_default_type, 2,
> - CDROM_OPTS);
> - default_drive(default_floppy, snapshot, IF_FLOPPY, 0, FD_OPTS);
> - default_drive(default_sdcard, snapshot, IF_SD, 0, SD_OPTS);
> -
> qemu_opts_foreach(qemu_find_opts("mon"),
> mon_init_func, NULL, &error_fatal);
>
Reviewed-by: Philippe Mathieu-Daudé <address@hidden>
- Re: [Qemu-block] [Qemu-devel] [RFC PATCH 5/6] vl: Create block backends before setting machine properties,
Philippe Mathieu-Daudé <=