From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53769) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XXX0V-0005XW-Ux for qemu-devel@nongnu.org; Fri, 26 Sep 2014 11:00:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XXX0M-0000cE-SN for qemu-devel@nongnu.org; Fri, 26 Sep 2014 11:00:27 -0400 Received: from mail-wi0-x232.google.com ([2a00:1450:400c:c05::232]:60019) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XXX0M-0000XC-GY for qemu-devel@nongnu.org; Fri, 26 Sep 2014 11:00:18 -0400 Received: by mail-wi0-f178.google.com with SMTP id z2so11775434wiv.5 for ; Fri, 26 Sep 2014 08:00:12 -0700 (PDT) Sender: Paolo Bonzini Message-ID: <54257F79.5060909@redhat.com> Date: Fri, 26 Sep 2014 17:00:09 +0200 From: Paolo Bonzini MIME-Version: 1.0 References: <1409344310-5441-1-git-send-email-ehabkost@redhat.com> <1409344310-5441-3-git-send-email-ehabkost@redhat.com> In-Reply-To: <1409344310-5441-3-git-send-email-ehabkost@redhat.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2 02/17] accel: Move accel code to accel.c List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Eduardo Habkost , qemu-devel@nongnu.org Cc: Michael Mueller , "Michael S. Tsirkin" , Marcel Apfelbaum , Alexander Graf , Christian Borntraeger , "Jason J. Herne" , =?windows-1252?Q?Andreas_?= =?windows-1252?Q?F=E4rber?= Il 29/08/2014 22:31, Eduardo Habkost ha scritto: > Signed-off-by: Eduardo Habkost > --- > 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 > 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); >