Currently if you try to ask for the list of CPUs for a target
architecture which does not specify a default machine type
you just get an error:
$ qemu-system-arm -cpu help
qemu-system-arm: No machine specified, and there is no default
Use -machine help to list supported machines
Since the list of CPUs doesn't depend on the machine, this is
unnecessarily unhelpful. "-device help" has a similar problem.
Move the checks for "did the user ask for -cpu help or -device help"
up so they precede the select_machine() call which checks that the
user specified a valid machine type.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
This has been on-and-off irritating me for years, and it's
embarrassing how simple the fix turns out to be...
---
softmmu/vl.c | 26 ++++++++++++++++----------
1 file changed, 16 insertions(+), 10 deletions(-)
diff --git a/softmmu/vl.c b/softmmu/vl.c
index ff2685dff84..6a285925b37 100644
--- a/softmmu/vl.c
+++ b/softmmu/vl.c
@@ -3789,6 +3789,22 @@ void qemu_init(int argc, char **argv, char **envp)
*/
loc_set_none();
+ /*
+ * Check for -cpu help and -device help before we call select_machine(),
+ * which will return an error if the architecture has no default machine
+ * type and the user did not specify one, so that the user doesn't need
+ * to say '-cpu help -machine something'.
+ */
+ if (cpu_option && is_help_option(cpu_option)) {
+ list_cpus(cpu_option);
+ exit(0);
+ }
+
+ if (qemu_opts_foreach(qemu_find_opts("device"),
+ device_help_func, NULL, NULL)) {
+ exit(0);
+ }
+
user_register_global_props();
replay_configure(icount_opts);
@@ -3877,11 +3893,6 @@ void qemu_init(int argc, char **argv, char **envp)
qemu_set_hw_version(machine_class->hw_version);
}
- if (cpu_option && is_help_option(cpu_option)) {
- list_cpus(cpu_option);
- exit(0);
- }
-
if (!trace_init_backends()) {
exit(1);
}
@@ -4112,11 +4123,6 @@ void qemu_init(int argc, char **argv, char **envp)
fsdev_init_func, NULL, &error_fatal);
#endif
- if (qemu_opts_foreach(qemu_find_opts("device"),
- device_help_func, NULL, NULL)) {
- exit(0);
- }
-
/*
* Note: we need to create block backends before
* machine_set_property(), so machine properties can refer to
--
2.20.1
Peter Maydell <peter.maydell@linaro.org> writes: > Currently if you try to ask for the list of CPUs for a target > architecture which does not specify a default machine type > you just get an error: > > $ qemu-system-arm -cpu help > qemu-system-arm: No machine specified, and there is no default > Use -machine help to list supported machines > > Since the list of CPUs doesn't depend on the machine, this is > unnecessarily unhelpful. "-device help" has a similar problem. > > Move the checks for "did the user ask for -cpu help or -device help" > up so they precede the select_machine() call which checks that the > user specified a valid machine type. > > Signed-off-by: Peter Maydell <peter.maydell@linaro.org> > --- > This has been on-and-off irritating me for years, and it's > embarrassing how simple the fix turns out to be... Same here. The patch works as advertized, thus: Reviewed-by: Markus Armbruster <armbru@redhat.com> Can you offer a completeness argument? We call is_help_option() and qemu_opt_has_help_opt() from quite a few places.
[Cc: Markus; he'd be pleasantly surprised with this, if he already hadn't noticed this, as he was also mildly annoyed about this the other day.] On Fri, Mar 13, 2020 at 05:24:47PM +0000, Peter Maydell wrote: > Currently if you try to ask for the list of CPUs for a target > architecture which does not specify a default machine type > you just get an error: > > $ qemu-system-arm -cpu help > qemu-system-arm: No machine specified, and there is no default > Use -machine help to list supported machines I just applied the patch and built on QEMU. With `qemu-system-arm`: $> ./arm-softmmu/qemu-system-arm -cpu help | head -5 Available CPUs: arm1026 arm1136 arm1136-r2 arm1176 $> ./arm-softmmu/qemu-system-arm -device help | head -5 Controller/Bridge/Hub devices: name "i82801b11-bridge", bus PCI name "ioh3420", bus PCI, desc "Intel IOH device id 3420 PCIE Root Port" name "pci-bridge", bus PCI, desc "Standard PCI Bridge" name "pci-bridge-seat", bus PCI, desc "Standard PCI Bridge (multiseat)" With `qemu-system-aarch64`: $> ./aarch64-softmmu/qemu-system-aarch64 -cpu help | head -5 Available CPUs: arm1026 arm1136 arm1136-r2 arm1176 $> ./aarch64-softmmu/qemu-system-aarch64 -device help | head -5 Controller/Bridge/Hub devices: name "i82801b11-bridge", bus PCI name "ioh3420", bus PCI, desc "Intel IOH device id 3420 PCIE Root Port" name "pci-bridge", bus PCI, desc "Standard PCI Bridge" name "pci-bridge-seat", bus PCI, desc "Standard PCI Bridge (multiseat)" > Since the list of CPUs doesn't depend on the machine, this is > unnecessarily unhelpful. "-device help" has a similar problem. > > Move the checks for "did the user ask for -cpu help or -device help" > up so they precede the select_machine() call which checks that the > user specified a valid machine type. > > Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Tested-by: Kashyap Chamarthy <kchamart@redhat.com> > --- > This has been on-and-off irritating me for years, and it's > embarrassing how simple the fix turns out to be... > --- > softmmu/vl.c | 26 ++++++++++++++++---------- > 1 file changed, 16 insertions(+), 10 deletions(-) [...] Thanks. :) -- /kashyap
© 2016 - 2024 Red Hat, Inc.