Message ID | 20250109170619.2271193-9-alex.bennee@linaro.org |
---|---|
State | New |
Headers | show |
Series | maintainer updates for jan '25 (semihosting, gdb, plugins) | expand |
On 1/9/25 09:06, Alex Bennée wrote: > All of the failures to configure devices will result in QEMU exiting > with an error code. In preparation for passing Error * down the chain > re-name the iterator to foreach_device_config_or_exit and exit using > &error_fatal instead of returning a failure indication. > > Signed-off-by: Alex Bennée <alex.bennee@linaro.org> > --- > system/vl.c | 31 ++++++++++++++++--------------- > 1 file changed, 16 insertions(+), 15 deletions(-) > > diff --git a/system/vl.c b/system/vl.c > index 0843b7ab49..25d9968ccc 100644 > --- a/system/vl.c > +++ b/system/vl.c > @@ -1307,7 +1307,14 @@ static void add_device_config(int type, const char *cmdline) > QTAILQ_INSERT_TAIL(&device_configs, conf, next); > } > > -static int foreach_device_config(int type, int (*func)(const char *cmdline)) > +/** > + * foreach_device_config_or_exit(): process per-device configs > + * @type: device_config type > + * @func: device specific config function, returning pass/fail > + * > + * Any failure is fatal and we exit with an error message. > + */ > +static void foreach_device_config_or_exit(int type, int (*func)(const char *cmdline)) > { > struct device_config *conf; > int rc; > @@ -1319,10 +1326,10 @@ static int foreach_device_config(int type, int (*func)(const char *cmdline)) > rc = func(conf->cmdline); > loc_pop(&conf->loc); > if (rc) { > - return rc; > + error_setg(&error_fatal, "failed to configure: %s", conf->cmdline); > + exit(1); > } > } > - return 0; > } > > static void qemu_disable_default_devices(void) > @@ -2044,12 +2051,9 @@ static void qemu_create_late_backends(void) > qemu_opts_foreach(qemu_find_opts("mon"), > mon_init_func, NULL, &error_fatal); > > - if (foreach_device_config(DEV_SERIAL, serial_parse) < 0) > - exit(1); > - if (foreach_device_config(DEV_PARALLEL, parallel_parse) < 0) > - exit(1); > - if (foreach_device_config(DEV_DEBUGCON, debugcon_parse) < 0) > - exit(1); > + foreach_device_config_or_exit(DEV_SERIAL, serial_parse); > + foreach_device_config_or_exit(DEV_PARALLEL, parallel_parse); > + foreach_device_config_or_exit(DEV_DEBUGCON, debugcon_parse); > > /* now chardevs have been created we may have semihosting to connect */ > qemu_semihosting_chardev_init(); > @@ -2670,8 +2674,7 @@ static void qemu_create_cli_devices(void) > > /* init USB devices */ > if (machine_usb(current_machine)) { > - if (foreach_device_config(DEV_USB, usb_parse) < 0) > - exit(1); > + foreach_device_config_or_exit(DEV_USB, usb_parse); > } > > /* init generic devices */ > @@ -2718,10 +2721,8 @@ static bool qemu_machine_creation_done(Error **errp) > exit(1); > } > > - if (foreach_device_config(DEV_GDB, gdbserver_start) < 0) { > - error_setg(errp, "could not start gdbserver"); > - return false; > - } > + foreach_device_config_or_exit(DEV_GDB, gdbserver_start); > + > if (!vga_interface_created && !default_vga && > vga_interface_type != VGA_NONE) { > warn_report("A -vga option was passed but this machine " Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
diff --git a/system/vl.c b/system/vl.c index 0843b7ab49..25d9968ccc 100644 --- a/system/vl.c +++ b/system/vl.c @@ -1307,7 +1307,14 @@ static void add_device_config(int type, const char *cmdline) QTAILQ_INSERT_TAIL(&device_configs, conf, next); } -static int foreach_device_config(int type, int (*func)(const char *cmdline)) +/** + * foreach_device_config_or_exit(): process per-device configs + * @type: device_config type + * @func: device specific config function, returning pass/fail + * + * Any failure is fatal and we exit with an error message. + */ +static void foreach_device_config_or_exit(int type, int (*func)(const char *cmdline)) { struct device_config *conf; int rc; @@ -1319,10 +1326,10 @@ static int foreach_device_config(int type, int (*func)(const char *cmdline)) rc = func(conf->cmdline); loc_pop(&conf->loc); if (rc) { - return rc; + error_setg(&error_fatal, "failed to configure: %s", conf->cmdline); + exit(1); } } - return 0; } static void qemu_disable_default_devices(void) @@ -2044,12 +2051,9 @@ static void qemu_create_late_backends(void) qemu_opts_foreach(qemu_find_opts("mon"), mon_init_func, NULL, &error_fatal); - if (foreach_device_config(DEV_SERIAL, serial_parse) < 0) - exit(1); - if (foreach_device_config(DEV_PARALLEL, parallel_parse) < 0) - exit(1); - if (foreach_device_config(DEV_DEBUGCON, debugcon_parse) < 0) - exit(1); + foreach_device_config_or_exit(DEV_SERIAL, serial_parse); + foreach_device_config_or_exit(DEV_PARALLEL, parallel_parse); + foreach_device_config_or_exit(DEV_DEBUGCON, debugcon_parse); /* now chardevs have been created we may have semihosting to connect */ qemu_semihosting_chardev_init(); @@ -2670,8 +2674,7 @@ static void qemu_create_cli_devices(void) /* init USB devices */ if (machine_usb(current_machine)) { - if (foreach_device_config(DEV_USB, usb_parse) < 0) - exit(1); + foreach_device_config_or_exit(DEV_USB, usb_parse); } /* init generic devices */ @@ -2718,10 +2721,8 @@ static bool qemu_machine_creation_done(Error **errp) exit(1); } - if (foreach_device_config(DEV_GDB, gdbserver_start) < 0) { - error_setg(errp, "could not start gdbserver"); - return false; - } + foreach_device_config_or_exit(DEV_GDB, gdbserver_start); + if (!vga_interface_created && !default_vga && vga_interface_type != VGA_NONE) { warn_report("A -vga option was passed but this machine "
All of the failures to configure devices will result in QEMU exiting with an error code. In preparation for passing Error * down the chain re-name the iterator to foreach_device_config_or_exit and exit using &error_fatal instead of returning a failure indication. Signed-off-by: Alex Bennée <alex.bennee@linaro.org> --- system/vl.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-)