From patchwork Mon Oct 4 09:23:06 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: add cacheflush in tcg_gen_code_search_pc. From: =?utf-8?b?5LmU5bSH?= X-Patchwork-Id: 66643 Message-Id: <1286184186-24431-1-git-send-email-qiaochong@loongson.cn> To: qemu-devel@nongnu.org Cc: qiaochong , aurelien@aurel32.net, rth@twiddle.net Date: Mon, 4 Oct 2010 17:23:06 +0800 Without cacheflush,qemu sometimes fail with segment fault on loongson cpu,which often happens when linux begin to run init.Because user porgram tlb refill,tlbl,tlbs,tlbm exception will often happen, cpu_restore_state,tcg_gen_code-pc will be called frequently. Signed-off-by: qiaochong --- tcg/tcg.c | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletions(-) diff --git a/tcg/tcg.c b/tcg/tcg.c index e0a9030..b5e274c 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -2120,7 +2120,12 @@ int tcg_gen_code(TCGContext *s, uint8_t *gen_code_buf) Return -1 if not found. */ int tcg_gen_code_search_pc(TCGContext *s, uint8_t *gen_code_buf, long offset) { - return tcg_gen_code_common(s, gen_code_buf, offset); + int ret; + ret = tcg_gen_code_common(s, gen_code_buf, offset); + /* flush instruction cache */ + flush_icache_range((unsigned long)gen_code_buf, + (unsigned long)s->code_ptr); + return ret; } #ifdef CONFIG_PROFILER