diff mbox series

[1/1] vl: make -accel help to list enabled accelerators only

Message ID 20190530215755.328-2-wainersm@redhat.com (mailing list archive)
State New, archived
Headers show
Series -accel should list enabled accelerators | expand

Commit Message

Wainer dos Santos Moschetta May 30, 2019, 9:57 p.m. UTC
Currently, -accel help shows all possible accelerators regardless
if they are enabled in the binary or not. That is a different
semantic from -cpu and -machine helps, for example. So this change
makes it to list only the accelerators which support is compiled
in the binary target.

Note that it does not check if the accelerator is enabled in the
host, so the help message's header was rewritten to emphasize
that. Also qtest is not displayed given that it is used for
internal testing purpose only.

Signed-off-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
---
 vl.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

Comments

Paolo Bonzini May 31, 2019, 9:38 a.m. UTC | #1
On 30/05/19 23:57, Wainer dos Santos Moschetta wrote:
> Currently, -accel help shows all possible accelerators regardless
> if they are enabled in the binary or not. That is a different
> semantic from -cpu and -machine helps, for example. So this change
> makes it to list only the accelerators which support is compiled
> in the binary target.
> 
> Note that it does not check if the accelerator is enabled in the
> host, so the help message's header was rewritten to emphasize
> that. Also qtest is not displayed given that it is used for
> internal testing purpose only.
> 
> Signed-off-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
> ---
>  vl.c | 18 +++++++++++++++++-
>  1 file changed, 17 insertions(+), 1 deletion(-)
> 
> diff --git a/vl.c b/vl.c
> index 2e69c9fef2..e5d40c01f8 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -3575,7 +3575,23 @@ int main(int argc, char **argv, char **envp)
>                                                       optarg, true);
>                  optarg = qemu_opt_get(accel_opts, "accel");
>                  if (!optarg || is_help_option(optarg)) {
> -                    printf("Possible accelerators: kvm, xen, hax, tcg\n");
> +                    printf("Accelerators supported in QEMU binary:\n");
> +                    GSList *el, *accel_list = object_class_get_list(TYPE_ACCEL,
> +                                                                    false);
> +                    for (el = accel_list; el; el = el->next) {
> +                        gchar *typename = g_strdup(object_class_get_name(
> +                                                   OBJECT_CLASS(el->data)));
> +                        /* omit qtest which is used for tests only */
> +                        if (g_strcmp0(typename, ACCEL_CLASS_NAME("qtest")) &&
> +                            g_str_has_suffix(typename, ACCEL_CLASS_SUFFIX)) {
> +                            gchar **optname = g_strsplit(typename,
> +                                                         ACCEL_CLASS_SUFFIX, 0);
> +                            printf("%s\n", optname[0]);
> +                            g_free(optname);
> +                        }
> +                        g_free(typename);
> +                    }
> +                    g_slist_free(accel_list);
>                      exit(0);
>                  }
>                  opts = qemu_opts_create(qemu_find_opts("machine"), NULL,
> 

Queued, thanks!

Paolo
diff mbox series

Patch

diff --git a/vl.c b/vl.c
index 2e69c9fef2..e5d40c01f8 100644
--- a/vl.c
+++ b/vl.c
@@ -3575,7 +3575,23 @@  int main(int argc, char **argv, char **envp)
                                                      optarg, true);
                 optarg = qemu_opt_get(accel_opts, "accel");
                 if (!optarg || is_help_option(optarg)) {
-                    printf("Possible accelerators: kvm, xen, hax, tcg\n");
+                    printf("Accelerators supported in QEMU binary:\n");
+                    GSList *el, *accel_list = object_class_get_list(TYPE_ACCEL,
+                                                                    false);
+                    for (el = accel_list; el; el = el->next) {
+                        gchar *typename = g_strdup(object_class_get_name(
+                                                   OBJECT_CLASS(el->data)));
+                        /* omit qtest which is used for tests only */
+                        if (g_strcmp0(typename, ACCEL_CLASS_NAME("qtest")) &&
+                            g_str_has_suffix(typename, ACCEL_CLASS_SUFFIX)) {
+                            gchar **optname = g_strsplit(typename,
+                                                         ACCEL_CLASS_SUFFIX, 0);
+                            printf("%s\n", optname[0]);
+                            g_free(optname);
+                        }
+                        g_free(typename);
+                    }
+                    g_slist_free(accel_list);
                     exit(0);
                 }
                 opts = qemu_opts_create(qemu_find_opts("machine"), NULL,