From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KqCWa-0001b7-PM for qemu-devel@nongnu.org; Wed, 15 Oct 2008 15:59:17 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KqCWY-0001a0-OE for qemu-devel@nongnu.org; Wed, 15 Oct 2008 15:59:16 -0400 Received: from [199.232.76.173] (port=36805 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KqCWY-0001Zn-Dw for qemu-devel@nongnu.org; Wed, 15 Oct 2008 15:59:14 -0400 Received: from mx2.redhat.com ([66.187.237.31]:49541) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KqCWX-0001O9-Lz for qemu-devel@nongnu.org; Wed, 15 Oct 2008 15:59:14 -0400 From: Glauber Costa Date: Wed, 15 Oct 2008 19:55:15 -0200 Message-Id: <1224107718-19128-19-git-send-email-glommer@redhat.com> In-Reply-To: <1224107718-19128-1-git-send-email-glommer@redhat.com> References: <1224107718-19128-1-git-send-email-glommer@redhat.com> Subject: [Qemu-devel] [PATCH 18/21] get_env accel wrapper Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: aliguori@us.ibm.com, jan.kiszka@siemens.com, jes@sgi.com, avi@qumranet.com, Glauber Costa , dmitry.baryshkov@siemens.com From: Glauber Costa Allow the current accelerator to provide it's own, customized address of the CPUState structure used for the env variable. Signed-off-by: Glauber Costa --- accel.c | 6 ++++++ accel.h | 7 +++++++ kqemu.c | 1 + target-i386/helper.c | 2 +- 4 files changed, 15 insertions(+), 1 deletions(-) diff --git a/accel.c b/accel.c index 6517af2..08329a4 100644 --- a/accel.c +++ b/accel.c @@ -14,6 +14,11 @@ int noaccel_info(CPUState *env, char *buf) return sprintf(buf, "no accelerator present.\n"); } +CPUState *noaccel_get_env(void) +{ + return qemu_mallocz(sizeof(CPUState)); +} + #define accel_nop ((void *)_accel_nop) /* Accelerator wrapper for the no-accel (raw qemu) case */ @@ -21,6 +26,7 @@ QEMUAccel noaccel = { .name = "none", .cpu_interrupt = accel_nop, .init_env = accel_nop, + .get_env = noaccel_get_env, .start = accel_nop, .flush_cache = accel_nop, .flush_page = accel_nop, diff --git a/accel.h b/accel.h index 5f04163..1d5986a 100644 --- a/accel.h +++ b/accel.h @@ -4,6 +4,7 @@ typedef struct QEMUAccel { char *name; void (*cpu_interrupt)(CPUState *env); + CPUState *(*get_env)(void); void (*init_env)(CPUState *env); int (*start)(void); void (*flush_cache)(CPUState *env, int global); @@ -35,6 +36,7 @@ extern QEMUAccel kqemu_accel; extern QEMUCont *head; void *qemu_mallocz(size_t size); +extern CPUState *noaccel_get_env(void); static inline int register_qemu_accel(QEMUAccel *accel) { @@ -91,6 +93,11 @@ static inline int accel_start(void) return status; } +static inline CPUState *accel_get_env(void) +{ + return current_accel->get_env(); +} + static inline void accel_init_env(CPUState *env) { current_accel->init_env(env); diff --git a/kqemu.c b/kqemu.c index 58e9e3f..d543e29 100644 --- a/kqemu.c +++ b/kqemu.c @@ -453,6 +453,7 @@ QEMUAccel kqemu_accel = { .name = "KQEMU", .cpu_interrupt = kqemu_cpu_interrupt, .init_env = kqemu_init_env, + .get_env = noaccel_get_env, .start = kqemu_start, .flush_cache = kqemu_flush, .flush_page = kqemu_flush_page, diff --git a/target-i386/helper.c b/target-i386/helper.c index d15e3f9..8fc33c6 100644 --- a/target-i386/helper.c +++ b/target-i386/helper.c @@ -98,7 +98,7 @@ CPUX86State *cpu_x86_init(const char *cpu_model) CPUX86State *env; static int inited; - env = qemu_mallocz(sizeof(CPUX86State)); + env = accel_get_env(); if (!env) return NULL; cpu_exec_init(env); -- 1.5.5.1