mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-29 13:23:54 -06:00
system/vl: more error exit into config enumeration code
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. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20250116160306.1709518-9-alex.bennee@linaro.org>
This commit is contained in:
parent
bb0c5be8e9
commit
77e911d0c7
1 changed files with 17 additions and 15 deletions
32
system/vl.c
32
system/vl.c
|
@ -1307,7 +1307,15 @@ static void add_device_config(int type, const char *cmdline)
|
||||||
QTAILQ_INSERT_TAIL(&device_configs, conf, next);
|
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;
|
struct device_config *conf;
|
||||||
int rc;
|
int rc;
|
||||||
|
@ -1319,10 +1327,10 @@ static int foreach_device_config(int type, int (*func)(const char *cmdline))
|
||||||
rc = func(conf->cmdline);
|
rc = func(conf->cmdline);
|
||||||
loc_pop(&conf->loc);
|
loc_pop(&conf->loc);
|
||||||
if (rc) {
|
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)
|
static void qemu_disable_default_devices(void)
|
||||||
|
@ -2044,12 +2052,9 @@ static void qemu_create_late_backends(void)
|
||||||
qemu_opts_foreach(qemu_find_opts("mon"),
|
qemu_opts_foreach(qemu_find_opts("mon"),
|
||||||
mon_init_func, NULL, &error_fatal);
|
mon_init_func, NULL, &error_fatal);
|
||||||
|
|
||||||
if (foreach_device_config(DEV_SERIAL, serial_parse) < 0)
|
foreach_device_config_or_exit(DEV_SERIAL, serial_parse);
|
||||||
exit(1);
|
foreach_device_config_or_exit(DEV_PARALLEL, parallel_parse);
|
||||||
if (foreach_device_config(DEV_PARALLEL, parallel_parse) < 0)
|
foreach_device_config_or_exit(DEV_DEBUGCON, debugcon_parse);
|
||||||
exit(1);
|
|
||||||
if (foreach_device_config(DEV_DEBUGCON, debugcon_parse) < 0)
|
|
||||||
exit(1);
|
|
||||||
|
|
||||||
/* now chardevs have been created we may have semihosting to connect */
|
/* now chardevs have been created we may have semihosting to connect */
|
||||||
qemu_semihosting_chardev_init();
|
qemu_semihosting_chardev_init();
|
||||||
|
@ -2667,8 +2672,7 @@ static void qemu_create_cli_devices(void)
|
||||||
|
|
||||||
/* init USB devices */
|
/* init USB devices */
|
||||||
if (machine_usb(current_machine)) {
|
if (machine_usb(current_machine)) {
|
||||||
if (foreach_device_config(DEV_USB, usb_parse) < 0)
|
foreach_device_config_or_exit(DEV_USB, usb_parse);
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* init generic devices */
|
/* init generic devices */
|
||||||
|
@ -2715,10 +2719,8 @@ static bool qemu_machine_creation_done(Error **errp)
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (foreach_device_config(DEV_GDB, gdbserver_start) < 0) {
|
foreach_device_config_or_exit(DEV_GDB, gdbserver_start);
|
||||||
error_setg(errp, "could not start gdbserver");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!vga_interface_created && !default_vga &&
|
if (!vga_interface_created && !default_vga &&
|
||||||
vga_interface_type != VGA_NONE) {
|
vga_interface_type != VGA_NONE) {
|
||||||
warn_report("A -vga option was passed but this machine "
|
warn_report("A -vga option was passed but this machine "
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue