From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KqCWe-0001dM-Tn for qemu-devel@nongnu.org; Wed, 15 Oct 2008 15:59:21 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KqCWc-0001c1-JX for qemu-devel@nongnu.org; Wed, 15 Oct 2008 15:59:20 -0400 Received: from [199.232.76.173] (port=36808 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KqCWb-0001bV-LR for qemu-devel@nongnu.org; Wed, 15 Oct 2008 15:59:17 -0400 Received: from mx2.redhat.com ([66.187.237.31]:49555) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KqCWa-0001Ox-Jj for qemu-devel@nongnu.org; Wed, 15 Oct 2008 15:59:17 -0400 From: Glauber Costa Date: Wed, 15 Oct 2008 19:55:17 -0200 Message-Id: <1224107718-19128-21-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 20/21] check wether kqemu is enabled in open code 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: jan.kiszka@siemens.com, aliguori@us.ibm.com, jes@sgi.com, avi@qumranet.com, dmitry.baryshkov@siemens.com kqemu is still too much spread around. The proper fix usually involves rethinking a bit of kqemu logic so for now, just check whether or not kqemu is enabled. If the kqemu accelerator is not present, consider it not. Otherwise, check env field. Signed-off-by: Glauber Costa --- cpu-exec.c | 2 +- exec-all.h | 7 +++++-- kqemu.c | 21 +++++++++++++++++++++ 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/cpu-exec.c b/cpu-exec.c index ce4e8a2..a9609d4 100644 --- a/cpu-exec.c +++ b/cpu-exec.c @@ -606,7 +606,7 @@ int cpu_exec(CPUState *env1) { if (next_tb != 0 && #ifdef USE_KQEMU - (env->kqemu_enabled != 2) && + (!kqemu_kernel_enabled(env)) && #endif tb->page_addr[1] == -1) { tb_add_jump((TranslationBlock *)(next_tb & ~3), next_tb & 3, tb); diff --git a/exec-all.h b/exec-all.h index d64d587..6230a37 100644 --- a/exec-all.h +++ b/exec-all.h @@ -370,16 +370,19 @@ void kqemu_set_phys_mem(uint64_t start_addr, ram_addr_t size, void kqemu_cpu_interrupt(CPUState *env); void kqemu_record_dump(void); +int kqemu_is_enabled(CPUState *env); +int kqemu_kernel_enabled(CPUState *env); + extern uint32_t kqemu_comm_base; static inline int kqemu_is_ok(CPUState *env) { - return(env->kqemu_enabled && + return(kqemu_is_enabled(env) && (env->cr[0] & CR0_PE_MASK) && !(env->hflags & HF_INHIBIT_IRQ_MASK) && (env->eflags & IF_MASK) && !(env->eflags & VM_MASK) && - (env->kqemu_enabled == 2 || + (kqemu_kernel_enabled(env) || ((env->hflags & HF_CPL_MASK) == 3 && (env->eflags & IOPL_MASK) != IOPL_MASK))); } diff --git a/kqemu.c b/kqemu.c index d543e29..8b4561c 100644 --- a/kqemu.c +++ b/kqemu.c @@ -250,6 +250,27 @@ void kqemu_init_env(CPUState *env) env->kqemu_enabled = kqemu_allowed; } +/* FIXME: Should not be needed, since ideally, QEMUAccel would avoid all kqemu tests + * altogether + */ +int kqemu_is_enabled(CPUState *env) +{ + if (strcasecmp(current_accel->name, "kqemu")) { + return 0; + } + + return env->kqemu_enabled; + +} + +int kqemu_kernel_enabled(CPUState *env) +{ + if (strcasecmp(current_accel->name, "kqemu")) { + return 0; + } + return env->kqemu_enabled == 2; +} + void kqemu_flush_page(CPUState *env, target_ulong addr) { #if defined(DEBUG) -- 1.5.5.1