All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: qemu-devel@nongnu.org
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
	qemu-trivial@nongnu.org, crosthwaitepeter@gmail.com,
	pbonzini@redhat.com, "Alex Bennée" <alex.bennee@linaro.org>,
	aurelien@aurel32.net, rth@twiddle.net
Subject: [Qemu-devel] [PATCH v4 05/11] qemu-log: Improve the "exec" TB execution logging
Date: Mon,  3 Aug 2015 10:14:45 +0100	[thread overview]
Message-ID: <1438593291-27109-6-git-send-email-alex.bennee@linaro.org> (raw)
In-Reply-To: <1438593291-27109-1-git-send-email-alex.bennee@linaro.org>

From: Peter Maydell <peter.maydell@linaro.org>

Improve the TB execution logging so that it is easier to identify
what is happening from trace logs:
 * move the "Trace" logging of executed TBs into cpu_tb_exec()
   so that it is emitted if and only if we actually execute a TB,
   and for consistency for the CPU state logging
 * log when we link two TBs together via tb_add_jump()
 * log when cpu_tb_exec() returns early from a chain of TBs

The new style logging looks like this:

Trace 0x7fb7cc822ca0 [ffffffc0000dce00]
Linking TBs 0x7fb7cc822ca0 [ffffffc0000dce00] index 0 -> 0x7fb7cc823110 [ffffffc0000dce10]
Trace 0x7fb7cc823110 [ffffffc0000dce10]
Trace 0x7fb7cc823420 [ffffffc000302688]
Trace 0x7fb7cc8234a0 [ffffffc000302698]
Trace 0x7fb7cc823520 [ffffffc0003026a4]
Trace 0x7fb7cc823560 [ffffffc0000dce44]
Linking TBs 0x7fb7cc823560 [ffffffc0000dce44] index 1 -> 0x7fb7cc8235d0 [ffffffc0000dce70]
Trace 0x7fb7cc8235d0 [ffffffc0000dce70]
Abandoned execution of TB chain before 0x7fb7cc8235d0 [ffffffc0000dce70]
Trace 0x7fb7cc8235d0 [ffffffc0000dce70]
Trace 0x7fb7cc822fd0 [ffffffc0000dd52c]

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
[AJB: reword patch title]
---
 cpu-exec.c              | 20 +++++++++++---------
 include/exec/exec-all.h |  3 +++
 2 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/cpu-exec.c b/cpu-exec.c
index 75694f3..a039f1a 100644
--- a/cpu-exec.c
+++ b/cpu-exec.c
@@ -175,10 +175,14 @@ void cpu_reload_memory_map(CPUState *cpu)
 #endif
 
 /* Execute a TB, and fix up the CPU state afterwards if necessary */
-static inline tcg_target_ulong cpu_tb_exec(CPUState *cpu, uint8_t *tb_ptr)
+static inline tcg_target_ulong cpu_tb_exec(CPUState *cpu, TranslationBlock *itb)
 {
     CPUArchState *env = cpu->env_ptr;
     uintptr_t next_tb;
+    uint8_t *tb_ptr = itb->tc_ptr;
+
+    qemu_log_mask(CPU_LOG_EXEC, "Trace %p [" TARGET_FMT_lx "] %s\n",
+                  itb->tc_ptr, itb->pc, lookup_symbol(itb->pc));
 
 #if defined(DEBUG_DISAS)
     if (qemu_loglevel_mask(CPU_LOG_TB_CPU)) {
@@ -209,6 +213,10 @@ static inline tcg_target_ulong cpu_tb_exec(CPUState *cpu, uint8_t *tb_ptr)
          */
         CPUClass *cc = CPU_GET_CLASS(cpu);
         TranslationBlock *tb = (TranslationBlock *)(next_tb & ~TB_EXIT_MASK);
+        qemu_log_mask(CPU_LOG_EXEC,
+                      "Abandoned execution of TB chain before %p ["
+                      TARGET_FMT_lx "] %s\n",
+                      itb->tc_ptr, itb->pc, lookup_symbol(itb->pc));
         if (cc->synchronize_from_tb) {
             cc->synchronize_from_tb(cpu, tb);
         } else {
@@ -247,7 +255,7 @@ static void cpu_exec_nocache(CPUState *cpu, int max_cycles,
     cpu->current_tb = tb;
     /* execute the generated code */
     trace_exec_tb_nocache(tb, tb->pc);
-    cpu_tb_exec(cpu, tb->tc_ptr);
+    cpu_tb_exec(cpu, tb);
     cpu->current_tb = NULL;
     tb_phys_invalidate(tb, -1);
     tb_free(tb);
@@ -356,7 +364,6 @@ int cpu_exec(CPUState *cpu)
 #endif
     int ret, interrupt_request;
     TranslationBlock *tb;
-    uint8_t *tc_ptr;
     uintptr_t next_tb;
     SyncClocks sc;
 
@@ -491,10 +498,6 @@ int cpu_exec(CPUState *cpu)
                     next_tb = 0;
                     tcg_ctx.tb_ctx.tb_invalidated_flag = 0;
                 }
-                if (qemu_loglevel_mask(CPU_LOG_EXEC)) {
-                    qemu_log("Trace %p [" TARGET_FMT_lx "] %s\n",
-                             tb->tc_ptr, tb->pc, lookup_symbol(tb->pc));
-                }
                 /* see if we can patch the calling TB. When the TB
                    spans two pages, we cannot safely do a direct
                    jump. */
@@ -513,9 +516,8 @@ int cpu_exec(CPUState *cpu)
                 barrier();
                 if (likely(!cpu->exit_request)) {
                     trace_exec_tb(tb, tb->pc);
-                    tc_ptr = tb->tc_ptr;
                     /* execute the generated code */
-                    next_tb = cpu_tb_exec(cpu, tc_ptr);
+                    next_tb = cpu_tb_exec(cpu, tb);
                     switch (next_tb & TB_EXIT_MASK) {
                     case TB_EXIT_REQUESTED:
                         /* Something asked us to stop executing
diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h
index 7ac8e7e..361d3d2 100644
--- a/include/exec/exec-all.h
+++ b/include/exec/exec-all.h
@@ -282,6 +282,9 @@ static inline void tb_add_jump(TranslationBlock *tb, int n,
 {
     /* NOTE: this test is only needed for thread safety */
     if (!tb->jmp_next[n]) {
+        qemu_log_mask(CPU_LOG_EXEC, "Linking TBs %p [" TARGET_FMT_lx
+                      "] index %d -> %p [" TARGET_FMT_lx "]\n",
+                      tb->tc_ptr, tb->pc, n, tb_next->tc_ptr, tb_next->pc);
         /* patch the native jump address */
         tb_set_jmp_target(tb, n, (uintptr_t)tb_next->tc_ptr);
 
-- 
2.5.0

  parent reply	other threads:[~2015-08-03  9:15 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-03  9:14 [Qemu-devel] [PATCH v4 00/11] qemu-log, perfmap and other logging tweaks Alex Bennée
2015-08-03  9:14 ` [Qemu-devel] [PATCH v4 01/11] tcg: add ability to dump /tmp/perf-<pid>.map files Alex Bennée
2015-08-03 13:40   ` Paolo Bonzini
2015-08-04  7:39     ` Alex Bennée
2015-08-04 10:02       ` Paolo Bonzini
2015-08-04 11:59       ` Aurelien Jarno
2015-08-04 12:55         ` Alex Bennée
2015-08-04 19:01           ` Aurelien Jarno
2015-08-04 12:15   ` Aurelien Jarno
2015-08-03  9:14 ` [Qemu-devel] [PATCH v4 02/11] tcg: light re-factor and pass down TranslationBlock Alex Bennée
2015-08-04 12:36   ` Aurelien Jarno
2016-02-03 18:38     ` Alex Bennée
2015-08-03  9:14 ` [Qemu-devel] [PATCH v4 03/11] qemu-log: correct help text for -d cpu Alex Bennée
2015-08-04 12:16   ` Aurelien Jarno
2015-08-04 15:11     ` Alex Bennée
2015-08-04 15:15       ` Peter Maydell
2015-08-04 15:21         ` Richard Henderson
2015-08-04 17:22           ` Alex Bennée
2015-08-04 18:09             ` Richard Henderson
2015-08-04 19:08               ` Alex Bennée
2015-08-04 19:16                 ` Richard Henderson
2015-09-15 19:28                   ` Peter Maydell
2015-09-15 19:41                     ` Richard Henderson
2015-08-03  9:14 ` [Qemu-devel] [PATCH v4 04/11] qemu-log: Avoid function call for disabled qemu_log_mask logging Alex Bennée
2015-08-04 12:17   ` Aurelien Jarno
2015-08-03  9:14 ` Alex Bennée [this message]
2015-08-04 12:17   ` [Qemu-devel] [PATCH v4 05/11] qemu-log: Improve the "exec" TB execution logging Aurelien Jarno
2015-08-10 19:40   ` Christopher Covington
2016-02-03 18:45     ` Alex Bennée
2015-08-03  9:14 ` [Qemu-devel] [PATCH v4 06/11] qemu-log: support simple pid substitution in logfile Alex Bennée
2015-08-04 12:17   ` Aurelien Jarno
2015-08-03  9:14 ` [Qemu-devel] [PATCH v4 07/11] qemu-log: new option -dfilter to limit output Alex Bennée
2015-08-04 12:21   ` Aurelien Jarno
2015-08-10 16:59   ` Christopher Covington
2015-08-10 18:30     ` Alex Bennée
2015-08-03  9:14 ` [Qemu-devel] [PATCH v4 08/11] qemu-log: dfilter-ise exec, out_asm, and op_opt Alex Bennée
2015-08-04 12:22   ` Aurelien Jarno
2015-08-03  9:14 ` [Qemu-devel] [PATCH v4 09/11] target-arm: dfilter support for in_asm, op, opt_op Alex Bennée
2015-08-04 12:23   ` Aurelien Jarno
2015-08-04 14:44   ` Richard Henderson
2015-08-04 17:26     ` Alex Bennée
2015-08-04 18:11       ` Richard Henderson
2015-08-03  9:14 ` [Qemu-devel] [PATCH v4 10/11] vl.c: log system invocation when enabled Alex Bennée
2015-08-04 12:30   ` Aurelien Jarno
2015-08-04 12:40   ` Peter Maydell
2015-08-04 12:46     ` Aurelien Jarno
2015-08-04 13:14       ` Peter Maydell
2015-08-04 15:12         ` Alex Bennée
2015-08-03  9:14 ` [Qemu-devel] [PATCH v4 11/11] cputlb: modernise the debug support Alex Bennée
2015-08-04 12:33   ` Aurelien Jarno
2016-02-03 18:54     ` Alex Bennée
2016-02-03 19:05       ` Peter Maydell
2016-02-04  7:03         ` Alex Bennée
2015-09-11  7:54 ` [Qemu-devel] [PATCH v4 00/11] qemu-log, perfmap and other logging tweaks Michael Tokarev
2015-09-11 14:07   ` Alex Bennée

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1438593291-27109-6-git-send-email-alex.bennee@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=aurelien@aurel32.net \
    --cc=crosthwaitepeter@gmail.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-trivial@nongnu.org \
    --cc=rth@twiddle.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.