--- 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 ------------------------------------------------------------------------- This SF.net email is sponsored by the 2008 JavaOne(SM) Conference Don't miss this year's exciting event. There's still time to save $100. Use priority code J8TL2D2. http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone _______________________________________________ kvm-devel mailing list kvm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-devel