[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 08/37] system/vl: more error exit into config enumeration code
From: |
Alex Bennée |
Subject: |
[PATCH v3 08/37] system/vl: more error exit into config enumeration code |
Date: |
Thu, 16 Jan 2025 16:02:37 +0000 |
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.
Message-Id: <20250109170619.2271193-9-alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
v3
- split overly long line
---
system/vl.c | 32 +++++++++++++++++---------------
1 file changed, 17 insertions(+), 15 deletions(-)
diff --git a/system/vl.c b/system/vl.c
index be029c52ef..22c1444da4 100644
--- a/system/vl.c
+++ b/system/vl.c
@@ -1307,7 +1307,15 @@ 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 +1327,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 +2052,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();
@@ -2667,8 +2672,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 */
@@ -2715,10 +2719,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 "
--
2.39.5
- [PATCH v3 04/37] semihosting/uaccess: Include missing 'exec/cpu-all.h' header, (continued)
- [PATCH v3 04/37] semihosting/uaccess: Include missing 'exec/cpu-all.h' header, Alex Bennée, 2025/01/16
- [PATCH v3 21/37] configure: reenable plugins by default for 32-bit hosts, Alex Bennée, 2025/01/16
- [PATCH v3 02/37] semihosting/uaccess: Briefly document returned values, Alex Bennée, 2025/01/16
- [PATCH v3 09/37] system: squash usb_parse into a single function, Alex Bennée, 2025/01/16
- [PATCH v3 10/37] system: propagate Error to gdbserver_start (and other device setups), Alex Bennée, 2025/01/16
- [PATCH v3 14/37] tests/tcg/plugins/mem: fix 32-bit build, Alex Bennée, 2025/01/16
- [PATCH v3 30/37] include/exec: remove warning_printed from MemoryRegion, Alex Bennée, 2025/01/16
- [PATCH v3 06/37] semihosting/console: Avoid including 'cpu.h', Alex Bennée, 2025/01/16
- [PATCH v3 37/37] scripts/nsis.py: Run dependency check for each DLL file only once, Alex Bennée, 2025/01/16
- [PATCH v3 11/37] tests/tcg/plugins/insn: remove unused callback parameter, Alex Bennée, 2025/01/16
- [PATCH v3 08/37] system/vl: more error exit into config enumeration code,
Alex Bennée <=
- [PATCH v3 16/37] contrib/plugins/cache: fix 32-bit build, Alex Bennée, 2025/01/16
- [PATCH v3 29/37] include/exec: fix some copy and paste errors in kdoc, Alex Bennée, 2025/01/16
- Re: [PATCH v3 00/37] maintainer updates for jan '25 (semihosting, gdb, plugins, docs) pre-PR-FINAL, Alex Bennée, 2025/01/16
- [PATCH v3 22/37] accel/tcg: also suppress asynchronous IRQs for cpu_io_recompile, Alex Bennée, 2025/01/16
- [PATCH v3 32/37] docs/devel: add git-publish for patch submitting, Alex Bennée, 2025/01/16
- [PATCH v3 26/37] plugins: fix kdoc annotation, Alex Bennée, 2025/01/16
- [PATCH v3 19/37] contrib/plugins/hwprofile: fix 32-bit build, Alex Bennée, 2025/01/16
- [PATCH v3 36/37] docs: add a glossary, Alex Bennée, 2025/01/16
- [PATCH v3 27/37] editorconfig: update for perl scripts, Alex Bennée, 2025/01/16
- [PATCH v3 35/37] docs/devel: add a codebase section, Alex Bennée, 2025/01/16