qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v3 01/10] tcg-runtime: add lookup_tb_ptr helper


From: Richard Henderson
Subject: Re: [Qemu-devel] [PATCH v3 01/10] tcg-runtime: add lookup_tb_ptr helper
Date: Wed, 26 Apr 2017 12:43:55 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.0

On 04/26/2017 12:29 PM, Alex Bennée wrote:

Emilio G. Cota <address@hidden> writes:

This paves the way for upcoming work.

Reviewed-by: Richard Henderson <address@hidden>
Signed-off-by: Emilio G. Cota <address@hidden>
---
  tcg-runtime.c     | 21 +++++++++++++++++++++
  tcg/tcg-runtime.h |  2 ++
  tcg/tcg.h         |  1 +
  3 files changed, 24 insertions(+)

diff --git a/tcg-runtime.c b/tcg-runtime.c
index 4c60c96..90d2d4b 100644
--- a/tcg-runtime.c
+++ b/tcg-runtime.c
@@ -27,6 +27,7 @@
  #include "exec/helper-proto.h"
  #include "exec/cpu_ldst.h"
  #include "exec/exec-all.h"
+#include "exec/tb-hash.h"

  /* 32-bit helpers */

@@ -141,6 +142,26 @@ uint64_t HELPER(ctpop_i64)(uint64_t arg)
      return ctpop64(arg);
  }

+void *HELPER(lookup_tb_ptr)(CPUArchState *env, target_ulong addr)
+{
+    CPUState *cpu = ENV_GET_CPU(env);
+    TranslationBlock *tb;
+    target_ulong cs_base, pc;
+    uint32_t flags;
+
+    if (unlikely(atomic_read(&cpu->exit_request))) {
+        goto out_epilogue;
+    }
+    cpu_get_tb_cpu_state(env, &pc, &cs_base, &flags);
+    tb = atomic_rcu_read(&cpu->tb_jmp_cache[tb_jmp_cache_hash_func(addr)]);
+    if (likely(tb && tb->pc == addr && tb->cs_base == cs_base &&
+               tb->flags == flags)) {

Should we also not be checking the TB hasn't been invalidated: tb->invalid?

We don't check in tb_find.

I guess we're assuming that such have been purged from the tb_jmp_cache. That said, tb_phys_invalidate assumes tb_locked, and I don't immediately remember how all that is supposed to tie together.


r~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]