From patchwork Tue Oct 19 19:57:13 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: Refactor flush of per-CPU virtual TB cache Date: Tue, 19 Oct 2010 09:57:13 -0000 From: =?utf-8?Q?Llu=C3=ADs?= X-Patchwork-Id: 68904 Message-Id: <878w1qf5cc.fsf@ginnungagap.bsc.es> To: qemu-devel@nongnu.org Signed-off-by: LluĂ­s Vilanova --- exec-all.h | 2 ++ exec.c | 9 +++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/exec-all.h b/exec-all.h index 3a53fe6..2ae09c5 100644 --- a/exec-all.h +++ b/exec-all.h @@ -182,6 +182,8 @@ static inline unsigned int tb_phys_hash_func(tb_page_addr_t pc) TranslationBlock *tb_alloc(target_ulong pc); void tb_free(TranslationBlock *tb); +/** Flush the per-CPU virtual translation block cache. */ +void tb_flush_jmp_cache(CPUState *env); void tb_flush(CPUState *env); void tb_link_page(TranslationBlock *tb, tb_page_addr_t phys_pc, tb_page_addr_t phys_page2); diff --git a/exec.c b/exec.c index 1fbe91c..516960a 100644 --- a/exec.c +++ b/exec.c @@ -688,6 +688,11 @@ static void page_flush_tb(void) } } +void tb_flush_jmp_cache (CPUState * env) +{ + memset (env->tb_jmp_cache, 0, TB_JMP_CACHE_SIZE * sizeof (void *)); +} + /* flush all the translation blocks */ /* XXX: tb_flush is currently not thread safe */ void tb_flush(CPUState *env1) @@ -705,7 +710,7 @@ void tb_flush(CPUState *env1) nb_tbs = 0; for(env = first_cpu; env != NULL; env = env->next_cpu) { - memset (env->tb_jmp_cache, 0, TB_JMP_CACHE_SIZE * sizeof (void *)); + tb_flush_jmp_cache(env); } memset (tb_phys_hash, 0, CODE_GEN_PHYS_HASH_SIZE * sizeof (void *)); @@ -1941,7 +1946,7 @@ void tlb_flush(CPUState *env, int flush_global) } } - memset (env->tb_jmp_cache, 0, TB_JMP_CACHE_SIZE * sizeof (void *)); + tb_flush_jmp_cache(env); env->tlb_flush_addr = -1; env->tlb_flush_mask = 0;