[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2] Fix the -accel parameter and the documentati
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH v2] Fix the -accel parameter and the documentation for 'hax' |
Date: |
Thu, 04 May 2017 09:11:50 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) |
Thomas Huth <address@hidden> writes:
> Since 'hax' is a possible accelerator nowadays, too, the '-accel'
> option should support it and we should mention this accelerator
> in the documentation, too.
>
> Signed-off-by: Thomas Huth <address@hidden>
> ---
> v2:
> - Use qemu_opt_set() instead of qemu_opts_parse_noisily()
> - Improve the documentation of the -accel option
>
> qemu-options.hx | 18 +++++++++---------
> vl.c | 23 +++++++++--------------
> 2 files changed, 18 insertions(+), 23 deletions(-)
>
> diff --git a/qemu-options.hx b/qemu-options.hx
> index 787b9c3..21f8ff2 100644
> --- a/qemu-options.hx
> +++ b/qemu-options.hx
> @@ -31,7 +31,7 @@ DEF("machine", HAS_ARG, QEMU_OPTION_machine, \
> "-machine [type=]name[,prop[=value][,...]]\n"
> " selects emulated machine ('-machine help' for list)\n"
> " property accel=accel1[:accel2[:...]] selects
> accelerator\n"
> - " supported accelerators are kvm, xen, tcg (default:
> tcg)\n"
> + " supported accelerators are kvm, xen, hax or tcg
> (default: tcg)\n"
The list of accelerators is approaching a length where sorting may make
sense. You decide.
> " kernel_irqchip=on|off|split controls accelerated
> irqchip support (default=off)\n"
> " vmport=on|off|auto controls emulation of vmport
> (default: auto)\n"
> " kvm_shadow_mem=size of KVM shadow MMU in bytes\n"
> @@ -52,9 +52,9 @@ available machines. Supported machine properties are:
> @table @option
> @item address@hidden:@var{accels2}[:...]]
> This is used to enable an accelerator. Depending on the target architecture,
> -kvm, xen, or tcg can be available. By default, tcg is used. If there is more
> -than one accelerator specified, the next one is used if the previous one
> fails
> -to initialize.
> +kvm, xen, hax or tcg can be available. By default, tcg is used. If there is
> +more than one accelerator specified, the next one is used if the previous one
> +fails to initialize.
> @item kernel_irqchip=on|off
> Controls in-kernel irqchip support for the chosen accelerator when available.
> @item gfx_passthru=on|off
> @@ -97,15 +97,15 @@ ETEXI
>
> DEF("accel", HAS_ARG, QEMU_OPTION_accel,
> "-accel [accel=]accelerator[,thread=single|multi]\n"
> - " select accelerator ('-accel help for list')\n"
> - " thread=single|multi (enable multi-threaded TCG)",
> QEMU_ARCH_ALL)
> + " select accelerator (kvm, xen, hax or tcg; use 'help'
> for a list)\n"
> + " thread=single|multi (enable multi-threaded TCG)",
> QEMU_ARCH_ALL)
Thanks for fixing help indentation while there.
> STEXI
> @item -accel @var{name}[,address@hidden,...]]
> @findex -accel
> This is used to enable an accelerator. Depending on the target architecture,
> -kvm, xen, or tcg can be available. By default, tcg is used. If there is more
> -than one accelerator specified, the next one is used if the previous one
> fails
> -to initialize.
> +kvm, xen, hax or tcg can be available. By default, tcg is used. If there is
> +more than one accelerator specified, the next one is used if the previous one
> +fails to initialize.
> @table @option
> @item thread=single|multi
> Controls number of TCG threads. When the TCG is multi-threaded there will be
> one
> diff --git a/vl.c b/vl.c
> index f46e070..0a1b931 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -3725,26 +3725,21 @@ int main(int argc, char **argv, char **envp)
> qdev_prop_register_global(&kvm_pit_lost_tick_policy);
> break;
> }
> - case QEMU_OPTION_accel:
> + case QEMU_OPTION_accel: {
> + QemuOpts *accel_opts;
Doesn't this shadow the @accel_opts declared in main()'s outermost
scope?
What's wrong with using @opts for its intended purpose here?
> +
> accel_opts = qemu_opts_parse_noisily(qemu_find_opts("accel"),
> optarg, true);
> optarg = qemu_opt_get(accel_opts, "accel");
Abusing optarg this way is not nice. It should be assigned to only once
per iteration, via lookup_opt(). Not your fault, but perhaps you'd like
to clean it up anyway.
Even more pointless abuse in case QEMU_OPTION_rotate. That one should
be converted to qemu_strtol(). Separate patch, and not required to get
my blessings for this one.
> -
> - olist = qemu_find_opts("machine");
> - if (strcmp("kvm", optarg) == 0) {
> - qemu_opts_parse_noisily(olist, "accel=kvm", false);
> - } else if (strcmp("xen", optarg) == 0) {
> - qemu_opts_parse_noisily(olist, "accel=xen", false);
> - } else if (strcmp("tcg", optarg) == 0) {
> - qemu_opts_parse_noisily(olist, "accel=tcg", false);
> - } else {
> - if (!is_help_option(optarg)) {
> - error_printf("Unknown accelerator: %s", optarg);
> - }
> - error_printf("Supported accelerators: kvm, xen, tcg\n");
> + if (!optarg || is_help_option(optarg)) {
> + error_printf("Possible accelerators: kvm, xen, hax,
> tcg\n");
> exit(1);
Not your patch's fault, but trivial to fix now: this should be exit(0),
as asking for help is not an error.
> }
> + accel_opts = qemu_opts_create(qemu_find_opts("machine"),
> NULL,
> + false, &error_abort);
> + qemu_opt_set(accel_opts, "accel", optarg, &error_abort);
The switch from qemu_opt_set() to qemu_opts_parse_noisily() makes
desugaring less explicit, but also less repetitive. Okay.
Hmm, where did the "Unknown accelerator" error go? Aha:
$ qemu-system-x86_64 -accel xxx
"xxx" accelerator not found.
No accelerator found!
Two error messages instead of one, and I don't care for the overexcited
'!', but that's all beyond this patch's scope.
> break;
> + }
> case QEMU_OPTION_usb:
> olist = qemu_find_opts("machine");
> qemu_opts_parse_noisily(olist, "usb=on", false);