From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48414) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XXcPz-0000Yf-QT for qemu-devel@nongnu.org; Fri, 26 Sep 2014 16:47:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XXcPt-0006PR-LU for qemu-devel@nongnu.org; Fri, 26 Sep 2014 16:47:07 -0400 Received: from mx1.redhat.com ([209.132.183.28]:19354) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XXcPt-0006Fd-Dw for qemu-devel@nongnu.org; Fri, 26 Sep 2014 16:47:01 -0400 From: Eduardo Habkost Date: Fri, 26 Sep 2014 17:45:31 -0300 Message-Id: <1411764332-23265-17-git-send-email-ehabkost@redhat.com> In-Reply-To: <1411764332-23265-1-git-send-email-ehabkost@redhat.com> References: <1411764332-23265-1-git-send-email-ehabkost@redhat.com> Subject: [Qemu-devel] [PATCH v3 16/17] accel: Create accel object when initializing machine List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Michael Mueller , Marcel Apfelbaum , "Michael S. Tsirkin" , Alexander Graf , Christian Borntraeger , "Jason J. Herne" , Paolo Bonzini , =?UTF-8?q?Andreas=20F=C3=A4rber?= Create an actual TYPE_ACCEL object when initializing a machine. This will allow accelerator classes to implement some initialization on instance_init, and to save state on the TYPE_ACCEL object. Reviewed-by: Paolo Bonzini Signed-off-by: Eduardo Habkost --- Changes v2 -> v3: * Squashed "accel: Create accel object when initializing machine" and "accel: Save AccelState on MachineState when initializing" in a single patch --- accel.c | 7 +++++++ include/hw/boards.h | 1 + include/qemu/typedefs.h | 2 ++ 3 files changed, 10 insertions(+) diff --git a/accel.c b/accel.c index 6087ab3..74e41da 100644 --- a/accel.c +++ b/accel.c @@ -32,6 +32,7 @@ #include "sysemu/qtest.h" #include "hw/xen/xen.h" #include "qom/object.h" +#include "hw/boards.h" int tcg_tb_size; static bool tcg_allowed = true; @@ -60,11 +61,17 @@ static AccelClass *accel_find(const char *opt_name) static int accel_init_machine(AccelClass *acc, MachineState *ms) { + ObjectClass *oc = OBJECT_CLASS(acc); + const char *cname = object_class_get_name(oc); + AccelState *accel = ACCEL(object_new(cname)); int ret; + ms->accelerator = accel; *(acc->allowed) = true; ret = acc->init_machine(ms); if (ret < 0) { + ms->accelerator = NULL; *(acc->allowed) = false; + object_unref(OBJECT(accel)); } return ret; } diff --git a/include/hw/boards.h b/include/hw/boards.h index dfb6718..8f0eeaf 100644 --- a/include/hw/boards.h +++ b/include/hw/boards.h @@ -133,6 +133,7 @@ struct MachineState { char *kernel_cmdline; char *initrd_filename; const char *cpu_model; + AccelState *accelerator; }; #endif diff --git a/include/qemu/typedefs.h b/include/qemu/typedefs.h index 04df51b..446af93 100644 --- a/include/qemu/typedefs.h +++ b/include/qemu/typedefs.h @@ -30,6 +30,8 @@ typedef struct MemoryListener MemoryListener; typedef struct MemoryMappingList MemoryMappingList; +typedef struct AccelState AccelState; + typedef struct QEMUMachine QEMUMachine; typedef struct MachineClass MachineClass; typedef struct MachineState MachineState; -- 1.9.3