From: Paolo Bonzini <pbonzini@redhat.com>
To: Eduardo Habkost <ehabkost@redhat.com>, qemu-devel@nongnu.org
Cc: "Michael Mueller" <mimu@linux.vnet.ibm.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
"Marcel Apfelbaum" <marcel.a@redhat.com>,
"Alexander Graf" <agraf@suse.de>,
"Christian Borntraeger" <borntraeger@de.ibm.com>,
"Jason J. Herne" <jjherne@linux.vnet.ibm.com>,
"Andreas Färber" <afaerber@suse.de>
Subject: Re: [Qemu-devel] [PATCH v2 02/17] accel: Move accel code to accel.c
Date: Fri, 26 Sep 2014 17:00:09 +0200 [thread overview]
Message-ID: <54257F79.5060909@redhat.com> (raw)
In-Reply-To: <1409344310-5441-3-git-send-email-ehabkost@redhat.com>
Il 29/08/2014 22:31, Eduardo Habkost ha scritto:
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
> hw/core/Makefile.objs | 1 +
> hw/core/accel.c | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++
This is not hw/core/, so please leave it in the root directory.
> include/hw/accel.h | 32 ++++++++++++++
... and please put this in include/sysemu/.
Apart from this,
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
> vl.c | 81 +-----------------------------------
> 4 files changed, 147 insertions(+), 80 deletions(-)
> create mode 100644 hw/core/accel.c
> create mode 100644 include/hw/accel.h
>
> diff --git a/hw/core/Makefile.objs b/hw/core/Makefile.objs
> index 17845df..6e56e47 100644
> --- a/hw/core/Makefile.objs
> +++ b/hw/core/Makefile.objs
> @@ -14,3 +14,4 @@ common-obj-$(CONFIG_SOFTMMU) += machine.o
> common-obj-$(CONFIG_SOFTMMU) += null-machine.o
> common-obj-$(CONFIG_SOFTMMU) += loader.o
> common-obj-$(CONFIG_SOFTMMU) += qdev-properties-system.o
> +common-obj-$(CONFIG_SOFTMMU) += accel.o
> diff --git a/hw/core/accel.c b/hw/core/accel.c
> new file mode 100644
> index 0000000..04da696
> --- /dev/null
> +++ b/hw/core/accel.c
> @@ -0,0 +1,113 @@
> +/*
> + * QEMU System Emulator, accelerator interfaces
> + *
> + * Copyright (c) 2003-2008 Fabrice Bellard
> + * Copyright (c) 2014 Red Hat Inc.
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a copy
> + * of this software and associated documentation files (the "Software"), to deal
> + * in the Software without restriction, including without limitation the rights
> + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> + * copies of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> + * THE SOFTWARE.
> + */
> +
> +#include "hw/accel.h"
> +#include "qemu-common.h"
> +#include "sysemu/arch_init.h"
> +#include "sysemu/sysemu.h"
> +#include "sysemu/kvm.h"
> +#include "sysemu/qtest.h"
> +#include "hw/xen/xen.h"
> +
> +int tcg_tb_size;
> +static bool tcg_allowed = true;
> +
> +static int tcg_init(MachineClass *mc)
> +{
> + tcg_exec_init(tcg_tb_size * 1024 * 1024);
> + return 0;
> +}
> +
> +static struct {
> + const char *opt_name;
> + const char *name;
> + int (*available)(void);
> + int (*init)(MachineClass *mc);
> + bool *allowed;
> +} accel_list[] = {
> + { "tcg", "tcg", tcg_available, tcg_init, &tcg_allowed },
> + { "xen", "Xen", xen_available, xen_init, &xen_allowed },
> + { "kvm", "KVM", kvm_available, kvm_init, &kvm_allowed },
> + { "qtest", "QTest", qtest_available, qtest_init_accel, &qtest_allowed },
> +};
> +
> +int configure_accelerator(MachineClass *mc)
> +{
> + const char *p;
> + char buf[10];
> + int i, ret;
> + bool accel_initialised = false;
> + bool init_failed = false;
> +
> + p = qemu_opt_get(qemu_get_machine_opts(), "accel");
> + if (p == NULL) {
> + /* Use the default "accelerator", tcg */
> + p = "tcg";
> + }
> +
> + while (!accel_initialised && *p != '\0') {
> + if (*p == ':') {
> + p++;
> + }
> + p = get_opt_name(buf, sizeof(buf), p, ':');
> + for (i = 0; i < ARRAY_SIZE(accel_list); i++) {
> + if (strcmp(accel_list[i].opt_name, buf) == 0) {
> + if (!accel_list[i].available()) {
> + printf("%s not supported for this target\n",
> + accel_list[i].name);
> + break;
> + }
> + *(accel_list[i].allowed) = true;
> + ret = accel_list[i].init(mc);
> + if (ret < 0) {
> + init_failed = true;
> + fprintf(stderr, "failed to initialize %s: %s\n",
> + accel_list[i].name,
> + strerror(-ret));
> + *(accel_list[i].allowed) = false;
> + } else {
> + accel_initialised = true;
> + }
> + break;
> + }
> + }
> + if (i == ARRAY_SIZE(accel_list)) {
> + fprintf(stderr, "\"%s\" accelerator does not exist.\n", buf);
> + }
> + }
> +
> + if (!accel_initialised) {
> + if (!init_failed) {
> + fprintf(stderr, "No accelerator found!\n");
> + }
> + exit(1);
> + }
> +
> + if (init_failed) {
> + fprintf(stderr, "Back to %s accelerator.\n", accel_list[i].name);
> + }
> +
> + return !accel_initialised;
> +}
> diff --git a/include/hw/accel.h b/include/hw/accel.h
> new file mode 100644
> index 0000000..5537d74
> --- /dev/null
> +++ b/include/hw/accel.h
> @@ -0,0 +1,32 @@
> +/* QEMU accelerator interfaces
> + *
> + * Copyright (c) 2014 Red Hat Inc
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a copy
> + * of this software and associated documentation files (the "Software"), to deal
> + * in the Software without restriction, including without limitation the rights
> + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> + * copies of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> + * THE SOFTWARE.
> + */
> +#ifndef HW_ACCEL_H
> +#define HW_ACCEL_H
> +
> +#include "qemu/typedefs.h"
> +
> +extern int tcg_tb_size;
> +
> +int configure_accelerator(MachineClass *mc);
> +
> +#endif
> diff --git a/vl.c b/vl.c
> index e49c115..911de91 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -61,6 +61,7 @@ int main(int argc, char **argv)
> #include "qemu/sockets.h"
> #include "hw/hw.h"
> #include "hw/boards.h"
> +#include "hw/accel.h"
> #include "hw/usb.h"
> #include "hw/pcmcia.h"
> #include "hw/i386/pc.h"
> @@ -212,11 +213,9 @@ static NotifierList exit_notifiers =
> static NotifierList machine_init_done_notifiers =
> NOTIFIER_LIST_INITIALIZER(machine_init_done_notifiers);
>
> -static bool tcg_allowed = true;
> bool xen_allowed;
> uint32_t xen_domid;
> enum xen_mode xen_mode = XEN_EMULATE;
> -static int tcg_tb_size;
>
> static int has_defaults = 1;
> static int default_serial = 1;
> @@ -2674,84 +2673,6 @@ static MachineClass *machine_parse(const char *name)
> exit(!name || !is_help_option(name));
> }
>
> -static int tcg_init(MachineClass *mc)
> -{
> - tcg_exec_init(tcg_tb_size * 1024 * 1024);
> - return 0;
> -}
> -
> -static struct {
> - const char *opt_name;
> - const char *name;
> - int (*available)(void);
> - int (*init)(MachineClass *mc);
> - bool *allowed;
> -} accel_list[] = {
> - { "tcg", "tcg", tcg_available, tcg_init, &tcg_allowed },
> - { "xen", "Xen", xen_available, xen_init, &xen_allowed },
> - { "kvm", "KVM", kvm_available, kvm_init, &kvm_allowed },
> - { "qtest", "QTest", qtest_available, qtest_init_accel, &qtest_allowed },
> -};
> -
> -static int configure_accelerator(MachineClass *mc)
> -{
> - const char *p;
> - char buf[10];
> - int i, ret;
> - bool accel_initialised = false;
> - bool init_failed = false;
> -
> - p = qemu_opt_get(qemu_get_machine_opts(), "accel");
> - if (p == NULL) {
> - /* Use the default "accelerator", tcg */
> - p = "tcg";
> - }
> -
> - while (!accel_initialised && *p != '\0') {
> - if (*p == ':') {
> - p++;
> - }
> - p = get_opt_name(buf, sizeof(buf), p, ':');
> - for (i = 0; i < ARRAY_SIZE(accel_list); i++) {
> - if (strcmp(accel_list[i].opt_name, buf) == 0) {
> - if (!accel_list[i].available()) {
> - printf("%s not supported for this target\n",
> - accel_list[i].name);
> - break;
> - }
> - *(accel_list[i].allowed) = true;
> - ret = accel_list[i].init(mc);
> - if (ret < 0) {
> - init_failed = true;
> - fprintf(stderr, "failed to initialize %s: %s\n",
> - accel_list[i].name,
> - strerror(-ret));
> - *(accel_list[i].allowed) = false;
> - } else {
> - accel_initialised = true;
> - }
> - break;
> - }
> - }
> - if (i == ARRAY_SIZE(accel_list)) {
> - fprintf(stderr, "\"%s\" accelerator does not exist.\n", buf);
> - }
> - }
> -
> - if (!accel_initialised) {
> - if (!init_failed) {
> - fprintf(stderr, "No accelerator found!\n");
> - }
> - exit(1);
> - }
> -
> - if (init_failed) {
> - fprintf(stderr, "Back to %s accelerator.\n", accel_list[i].name);
> - }
> -
> - return !accel_initialised;
> -}
> -
> void qemu_add_exit_notifier(Notifier *notify)
> {
> notifier_list_add(&exit_notifiers, notify);
>
next prev parent reply other threads:[~2014-09-26 15:00 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-29 20:31 [Qemu-devel] [PATCH v2 00/17] QOMify accelerator code Eduardo Habkost
2014-08-29 20:31 ` [Qemu-devel] [PATCH v2 01/17] vl.c: Small coding style fix Eduardo Habkost
2014-09-26 15:11 ` Paolo Bonzini
2014-08-29 20:31 ` [Qemu-devel] [PATCH v2 02/17] accel: Move accel code to accel.c Eduardo Habkost
2014-09-26 15:00 ` Paolo Bonzini [this message]
2014-08-29 20:31 ` [Qemu-devel] [PATCH v2 03/17] accel: Create AccelType typedef Eduardo Habkost
2014-09-26 15:00 ` Paolo Bonzini
2014-08-29 20:31 ` [Qemu-devel] [PATCH v2 04/17] accel: Simplify configure_accelerator() using AccelType *acc variable Eduardo Habkost
2014-09-26 15:00 ` Paolo Bonzini
2014-08-29 20:31 ` [Qemu-devel] [PATCH v2 05/17] accel: Move accel name lookup to separate function Eduardo Habkost
2014-09-26 15:01 ` Paolo Bonzini
2014-08-29 20:31 ` [Qemu-devel] [PATCH v2 06/17] accel: Use QOM classes for accel types Eduardo Habkost
2014-09-26 15:02 ` Paolo Bonzini
2014-08-29 20:31 ` [Qemu-devel] [PATCH v2 07/17] accel: Make AccelClass.available() optional Eduardo Habkost
2014-09-26 15:02 ` Paolo Bonzini
2014-08-29 20:31 ` [Qemu-devel] [PATCH v2 08/17] accel: Move KVM accel registration to kvm-all.c Eduardo Habkost
2014-09-26 15:03 ` Paolo Bonzini
2014-09-26 15:03 ` Paolo Bonzini
2014-08-29 20:31 ` [Qemu-devel] [PATCH v2 09/17] accel: Move Xen registration code to xen-common.c Eduardo Habkost
2014-09-26 15:04 ` Paolo Bonzini
2014-08-29 20:31 ` [Qemu-devel] [PATCH v2 10/17] accel: Move qtest accel registration to qtest.c Eduardo Habkost
2014-09-26 15:04 ` Paolo Bonzini
2014-09-26 15:06 ` Paolo Bonzini
2014-09-26 19:37 ` Eduardo Habkost
2014-08-29 20:31 ` [Qemu-devel] [PATCH v2 11/17] accel: Remove tcg_available() function Eduardo Habkost
2014-09-26 15:05 ` Paolo Bonzini
2014-08-29 20:31 ` [Qemu-devel] [PATCH v2 12/17] accel: Move accel init/allowed code to separate function Eduardo Habkost
2014-09-26 15:05 ` Paolo Bonzini
2014-08-29 20:31 ` [Qemu-devel] [PATCH v2 13/17] accel: Rename 'init' method to 'init_machine' Eduardo Habkost
2014-09-26 15:09 ` Paolo Bonzini
2014-09-26 16:42 ` Eduardo Habkost
2014-08-29 20:31 ` [Qemu-devel] [PATCH v2 14/17] accel: Pass MachineState object to accel init functions Eduardo Habkost
2014-09-26 15:10 ` Paolo Bonzini
2014-08-29 20:31 ` [Qemu-devel] [PATCH v2 15/17] accel: Create accel object when initializing machine Eduardo Habkost
2014-09-26 15:10 ` Paolo Bonzini
2014-08-29 20:31 ` [Qemu-devel] [PATCH v2 16/17] accel: Save AccelState on MachineState when initializing Eduardo Habkost
2014-09-26 15:11 ` Paolo Bonzini
2014-08-29 20:31 ` [Qemu-devel] [PATCH v2 17/17] kvm: Make KVMState be the TYPE_KVM_ACCEL instance struct Eduardo Habkost
2014-09-26 15:11 ` Paolo Bonzini
2014-09-26 15:12 ` [Qemu-devel] [PATCH v2 00/17] QOMify accelerator code Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=54257F79.5060909@redhat.com \
--to=pbonzini@redhat.com \
--cc=afaerber@suse.de \
--cc=agraf@suse.de \
--cc=borntraeger@de.ibm.com \
--cc=ehabkost@redhat.com \
--cc=jjherne@linux.vnet.ibm.com \
--cc=marcel.a@redhat.com \
--cc=mimu@linux.vnet.ibm.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.