builtin-run: Abstract argument validation into a separate function
kvm_cmd_run_init() is a complex function which parses the command line
arguments, configures various aspects of a VM (the size of the RAM, the
number of CPUs, the network, the active console, the kernel command line,
creates a custom rootfs, etc), and after the recent patches, also does a
few checks against mutually exclusive kvmtool arguments.
Make the function just that little bit easier to read by moving the
argument validation into a separate function.
No functional change intended.
Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com>
Link: https://lore.kernel.org/r/20210923144505.60776-5-alexandru.elisei@arm.com
Signed-off-by: Will Deacon <will@kernel.org>
diff --git a/builtin-run.c b/builtin-run.c
index 6a55e34..2a14723 100644
--- a/builtin-run.c
+++ b/builtin-run.c
@@ -455,6 +455,19 @@
close(fd);
}
+static void kvm_run_validate_cfg(struct kvm *kvm)
+{
+ if (kvm->cfg.kernel_filename && kvm->cfg.firmware_filename)
+ die("Only one of --kernel or --firmware can be specified");
+
+ if ((kvm->cfg.vnc && (kvm->cfg.sdl || kvm->cfg.gtk)) ||
+ (kvm->cfg.sdl && kvm->cfg.gtk))
+ die("Only one of --vnc, --sdl or --gtk can be specified");
+
+ if (kvm->cfg.firmware_filename && kvm->cfg.initrd_filename)
+ pr_warning("Ignoring initrd file when loading a firmware image");
+}
+
static struct kvm *kvm_cmd_run_init(int argc, const char **argv)
{
static char real_cmdline[2048], default_name[20];
@@ -511,14 +524,10 @@
}
+ kvm_run_validate_cfg(kvm);
+
kvm->nr_disks = kvm->cfg.image_count;
- if (kvm->cfg.kernel_filename && kvm->cfg.firmware_filename)
- die("Only one of --kernel or --firmware can be specified");
-
- if (kvm->cfg.firmware_filename && kvm->cfg.initrd_filename)
- pr_warning("Ignoring initrd file when loading a firmware image");
-
if (!kvm->cfg.kernel_filename && !kvm->cfg.firmware_filename) {
kvm->cfg.kernel_filename = find_kernel();
@@ -552,13 +561,6 @@
if (!kvm->cfg.console)
kvm->cfg.console = DEFAULT_CONSOLE;
- video = kvm->cfg.vnc || kvm->cfg.sdl || kvm->cfg.gtk;
- if (video) {
- if ((kvm->cfg.vnc && (kvm->cfg.sdl || kvm->cfg.gtk)) ||
- (kvm->cfg.sdl && kvm->cfg.gtk))
- die("Only one of --vnc, --sdl or --gtk can be specified");
- }
-
if (!strncmp(kvm->cfg.console, "virtio", 6))
kvm->cfg.active_console = CONSOLE_VIRTIO;
else if (!strncmp(kvm->cfg.console, "serial", 6))
@@ -586,6 +588,8 @@
if (!kvm->cfg.network)
kvm->cfg.network = DEFAULT_NETWORK;
+ video = kvm->cfg.vnc || kvm->cfg.sdl || kvm->cfg.gtk;
+
memset(real_cmdline, 0, sizeof(real_cmdline));
kvm__arch_set_cmdline(real_cmdline, video);