[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH v5 01/31] cpu-exec: fix cpu_exec_nocache
From: |
Pavel Dovgalyuk |
Subject: |
[Qemu-devel] [RFC PATCH v5 01/31] cpu-exec: fix cpu_exec_nocache |
Date: |
Wed, 26 Nov 2014 13:38:52 +0300 |
User-agent: |
StGit/0.16 |
In icount mode cpu_exec_nocache function is used to execute part of the
existing TB. At the end of cpu_exec_nocache newly created TB is deleted.
Sometimes io_read function needs to recompile current TB and restart TB
lookup and execution. After that tb_find_fast function finds old (bigger)
TB again. This TB cannot be executed (because icount is not big enough)
and cpu_exec_nocache is called again. Such a loop continues over and over.
This patch deletes old TB and avoids finding it in the TB cache.
Signed-off-by: Pavel Dovgalyuk <address@hidden>
---
cpu-exec.c | 7 ++++++-
1 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/cpu-exec.c b/cpu-exec.c
index 3913de0..8830255 100644
--- a/cpu-exec.c
+++ b/cpu-exec.c
@@ -202,13 +202,18 @@ static void cpu_exec_nocache(CPUArchState *env, int
max_cycles,
{
CPUState *cpu = ENV_GET_CPU(env);
TranslationBlock *tb;
+ target_ulong pc = orig_tb->pc;
+ target_ulong cs_base = orig_tb->cs_base;
+ uint64_t flags = orig_tb->flags;
/* Should never happen.
We only end up here when an existing TB is too long. */
if (max_cycles > CF_COUNT_MASK)
max_cycles = CF_COUNT_MASK;
- tb = tb_gen_code(cpu, orig_tb->pc, orig_tb->cs_base, orig_tb->flags,
+ /* tb_gen_code can flush our orig_tb, invalidate it now */
+ tb_phys_invalidate(orig_tb, -1);
+ tb = tb_gen_code(cpu, pc, cs_base, flags,
max_cycles);
cpu->current_tb = tb;
/* execute the generated code */
- [Qemu-devel] [RFC PATCH v5 00/31] Deterministic replay and reverse execution, Pavel Dovgalyuk, 2014/11/26
- [Qemu-devel] [RFC PATCH v5 01/31] cpu-exec: fix cpu_exec_nocache,
Pavel Dovgalyuk <=
- [Qemu-devel] [RFC PATCH v5 02/31] acpi: accurate overflow check, Pavel Dovgalyuk, 2014/11/26
- [Qemu-devel] [RFC PATCH v5 03/31] replay: global variables and function stubs, Pavel Dovgalyuk, 2014/11/26
- [Qemu-devel] [RFC PATCH v5 04/31] sysemu: system functions for replay, Pavel Dovgalyuk, 2014/11/26
- [Qemu-devel] [RFC PATCH v5 05/31] replay: internal functions for replay log, Pavel Dovgalyuk, 2014/11/26
- [Qemu-devel] [RFC PATCH v5 06/31] cpu-exec: reset exception_index correctly, Pavel Dovgalyuk, 2014/11/26
- [Qemu-devel] [RFC PATCH v5 07/31] icount: implement icount requesting, Pavel Dovgalyuk, 2014/11/26
- [Qemu-devel] [RFC PATCH v5 08/31] icount: improve enable/disable ticks, Pavel Dovgalyuk, 2014/11/26
- [Qemu-devel] [RFC PATCH v5 09/31] replay: introduce icount event, Pavel Dovgalyuk, 2014/11/26