From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1JrzTl-0007YU-Iz for qemu-devel@nongnu.org; Fri, 02 May 2008 13:55:29 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1JrzTk-0007Xq-86 for qemu-devel@nongnu.org; Fri, 02 May 2008 13:55:28 -0400 Received: from [199.232.76.173] (port=52464 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JrzTk-0007Xl-1n for qemu-devel@nongnu.org; Fri, 02 May 2008 13:55:28 -0400 Received: from mx1.redhat.com ([66.187.233.31]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1JrzTj-00073P-L7 for qemu-devel@nongnu.org; Fri, 02 May 2008 13:55:27 -0400 From: Glauber Costa Date: Fri, 2 May 2008 14:49:13 -0300 Message-Id: <1209750580546-git-send-email-gcosta@redhat.com> In-Reply-To: <1209750575402-git-send-email-gcosta@redhat.com> References: <12097505533742-git-send-email-gcosta@redhat.com> <1209750562292-git-send-email-gcosta@redhat.com> <12097505681610-git-send-email-gcosta@redhat.com> <1209750575402-git-send-email-gcosta@redhat.com> Subject: [Qemu-devel] [PATCH 4/4] [PATCH] wrap cache flushing functions into accel drivers 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: kvm-devel@lists.sourceforge.net, mtosatti@redhat.com --- exec-all.h | 16 ++++++++++++++-- exec.c | 12 ++---------- kqemu.c | 2 ++ 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/exec-all.h b/exec-all.h index 784d0ac..9925a80 100644 --- a/exec-all.h +++ b/exec-all.h @@ -578,6 +578,8 @@ typedef struct QEMUAccel { void (*cpu_interrupt)(CPUState *env); int (*exec_interrupt)(CPUState *env); void (*init_env)(CPUState *env); + void (*flush_cache)(CPUState *env, int global); + void (*flush_page)(CPUState *env, target_ulong addr); } QEMUAccel; extern QEMUAccel *current_accel; @@ -608,12 +610,22 @@ static inline void accel_init_env(CPUState *env) current_accel->init_env(env); } +static inline void accel_flush_cache(CPUState *env, int global) +{ + if (current_accel && current_accel->flush_cache) + current_accel->flush_cache(env, global); +} + +static inline void accel_flush_page(CPUState *env, target_ulong addr) +{ + if (current_accel && current_accel->flush_page) + current_accel->flush_page(env, addr); +} + #ifdef USE_KQEMU #define KQEMU_MODIFY_PAGE_MASK (0xff & ~(VGA_DIRTY_FLAG | CODE_DIRTY_FLAG)) int kqemu_cpu_exec(CPUState *env); -void kqemu_flush_page(CPUState *env, target_ulong addr); -void kqemu_flush(CPUState *env, int global); void kqemu_set_notdirty(CPUState *env, ram_addr_t ram_addr); void kqemu_modify_page(CPUState *env, ram_addr_t ram_addr); void kqemu_record_dump(void); diff --git a/exec.c b/exec.c index 93d9b01..b0f50e3 100644 --- a/exec.c +++ b/exec.c @@ -1393,11 +1393,7 @@ void tlb_flush(CPUState *env, int flush_global) #if !defined(CONFIG_SOFTMMU) munmap((void *)MMAP_AREA_START, MMAP_AREA_END - MMAP_AREA_START); #endif -#ifdef USE_KQEMU - if (env->kqemu_enabled) { - kqemu_flush(env, flush_global); - } -#endif + accel_flush_cache(env, flush_global); tlb_flush_count++; } @@ -1450,11 +1446,7 @@ void tlb_flush_page(CPUState *env, target_ulong addr) if (addr < MMAP_AREA_END) munmap((void *)addr, TARGET_PAGE_SIZE); #endif -#ifdef USE_KQEMU - if (env->kqemu_enabled) { - kqemu_flush_page(env, addr); - } -#endif + accel_flush_page(env, addr); } /* update the TLBs so that writes to code in the virtual page 'addr' diff --git a/kqemu.c b/kqemu.c index 95d8a94..f92b60d 100644 --- a/kqemu.c +++ b/kqemu.c @@ -173,6 +173,8 @@ QEMUAccel kqemu_accel = { .cpu_interrupt = kqemu_cpu_interrupt, .exec_interrupt = kqemu_exec_interrupt, .init_env = kqemu_init, + .flush_cache = kqemu_flush, + .flush_page = kqemu_flush_page, }; int kqemu_init(CPUState *env) -- 1.5.0.6