qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 1/4] Sparc: convert mmu_helper to trace framework
@ 2011-09-11 16:41 Blue Swirl
  2011-09-13  7:59 ` Stefan Hajnoczi
  0 siblings, 1 reply; 2+ messages in thread
From: Blue Swirl @ 2011-09-11 16:41 UTC (permalink / raw)
  To: qemu-devel, Stefan Hajnoczi

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
---
 target-sparc/mmu_helper.c |   64 ++++++++++++++-------------------------------
 trace-events              |   10 +++++++
 2 files changed, 30 insertions(+), 44 deletions(-)

diff --git a/target-sparc/mmu_helper.c b/target-sparc/mmu_helper.c
index 5743081..8cdc224 100644
--- a/target-sparc/mmu_helper.c
+++ b/target-sparc/mmu_helper.c
@@ -18,15 +18,7 @@
  */

 #include "cpu.h"
-
-//#define DEBUG_MMU
-
-#ifdef DEBUG_MMU
-#define DPRINTF_MMU(fmt, ...)                                   \
-    do { printf("MMU: " fmt , ## __VA_ARGS__); } while (0)
-#else
-#define DPRINTF_MMU(fmt, ...) do {} while (0)
-#endif
+#include "trace.h"

 /* Sparc MMU emulation */

@@ -538,10 +530,7 @@ static int get_physical_address_data(CPUState *env,
             if (TTE_IS_PRIV(env->dtlb[i].tte) && is_user) {
                 do_fault = 1;
                 sfsr |= SFSR_FT_PRIV_BIT; /* privilege violation */
-
-                DPRINTF_MMU("DFAULT at %" PRIx64 " context %" PRIx64
-                            " mmu_idx=%d tl=%d\n",
-                            address, context, mmu_idx, env->tl);
+                trace_mmu_helper_dfault(address, context, mmu_idx, env->tl);
             }
             if (rw == 4) {
                 if (TTE_IS_SIDEEFFECT(env->dtlb[i].tte)) {
@@ -562,9 +551,7 @@ static int get_physical_address_data(CPUState *env,
                 do_fault = 1;
                 env->exception_index = TT_DPROT;

-                DPRINTF_MMU("DPROT at %" PRIx64 " context %" PRIx64
-                            " mmu_idx=%d tl=%d\n",
-                            address, context, mmu_idx, env->tl);
+                trace_mmu_helper_dprot(address, context, mmu_idx, env->tl);
             }

             if (!do_fault) {
@@ -598,8 +585,7 @@ static int get_physical_address_data(CPUState *env,
         }
     }

-    DPRINTF_MMU("DMISS at %" PRIx64 " context %" PRIx64 "\n",
-                address, context);
+    trace_mmu_helper_dmiss(address, context);

     /*
      * On MMU misses:
@@ -662,8 +648,7 @@ static int get_physical_address_code(CPUState *env,

                 env->immu.tag_access = (address & ~0x1fffULL) | context;

-                DPRINTF_MMU("TFAULT at %" PRIx64 " context %" PRIx64 "\n",
-                            address, context);
+                trace_mmu_helper_tfault(address, context);

                 return 1;
             }
@@ -673,8 +658,7 @@ static int get_physical_address_code(CPUState *env,
         }
     }

-    DPRINTF_MMU("TMISS at %" PRIx64 " context %" PRIx64 "\n",
-                address, context);
+    trace_mmu_helper_tmiss(address, context);

     /* Context is stored in DMMU (dmmuregs[1]) also for IMMU */
     env->immu.tag_access = (address & ~0x1fffULL) | context;
@@ -691,21 +675,20 @@ static int get_physical_address(CPUState *env,
target_phys_addr_t *physical,
        everything when an entry is evicted.  */
     *page_size = TARGET_PAGE_SIZE;

-#if defined(DEBUG_MMU)
     /* safety net to catch wrong softmmu index use from dynamic code */
     if (env->tl > 0 && mmu_idx != MMU_NUCLEUS_IDX) {
-        DPRINTF_MMU("get_physical_address %s tl=%d mmu_idx=%d"
-                    " primary context=%" PRIx64
-                    " secondary context=%" PRIx64
-                " address=%" PRIx64
-                "\n",
-                (rw == 2 ? "CODE" : "DATA"),
-                env->tl, mmu_idx,
-                env->dmmu.mmu_primary_context,
-                env->dmmu.mmu_secondary_context,
-                address);
+        if (rw == 2) {
+            trace_mmu_helper_get_phys_addr_code(env->tl, mmu_idx,
+                                                env->dmmu.mmu_primary_context,
+
env->dmmu.mmu_secondary_context,
+                                                address);
+        } else {
+            trace_mmu_helper_get_phys_addr_data(env->tl, mmu_idx,
+                                                env->dmmu.mmu_primary_context,
+
env->dmmu.mmu_secondary_context,
+                                                address);
+        }
     }
-#endif

     if (rw == 2) {
         return get_physical_address_code(env, physical, prot, address,
@@ -732,16 +715,9 @@ int cpu_sparc_handle_mmu_fault(CPUState *env,
target_ulong address, int rw,
         vaddr = virt_addr + ((address & TARGET_PAGE_MASK) &
                              (TARGET_PAGE_SIZE - 1));

-        DPRINTF_MMU("Translate at %" PRIx64 " -> %" PRIx64 ","
-                    " vaddr %" PRIx64
-                    " mmu_idx=%d"
-                    " tl=%d"
-                    " primary context=%" PRIx64
-                    " secondary context=%" PRIx64
-                    "\n",
-                    address, paddr, vaddr, mmu_idx, env->tl,
-                    env->dmmu.mmu_primary_context,
-                    env->dmmu.mmu_secondary_context);
+        trace_mmu_helper_mmu_fault(address, paddr, mmu_idx, env->tl,
+                                   env->dmmu.mmu_primary_context,
+                                   env->dmmu.mmu_secondary_context);

         tlb_set_page(env, vaddr, paddr, prot, mmu_idx, page_size);
         return 0;
diff --git a/trace-events b/trace-events
index a8e7684..99a6c30 100644
--- a/trace-events
+++ b/trace-events
@@ -501,3 +501,13 @@ escc_sunkbd_event_in(int ch) "Untranslated keycode %2.2x"
 escc_sunkbd_event_out(int ch) "Translated keycode %2.2x"
 escc_kbd_command(int val) "Command %d"
 escc_sunmouse_event(int dx, int dy, int buttons_state) "dx=%d dy=%d
buttons=%01x"
+
+# target-sparc/mmu_helper.c
+mmu_helper_dfault(uint64_t address, uint64_t context, int mmu_idx,
uint32_t tl) "DFAULT at %"PRIx64" context %"PRIx64" mmu_idx=%d tl=%d"
+mmu_helper_dprot(uint64_t address, uint64_t context, int mmu_idx,
uint32_t tl) "DPROT at %"PRIx64" context %"PRIx64" mmu_idx=%d tl=%d"
+mmu_helper_dmiss(uint64_t address, uint64_t context) "DMISS at
%"PRIx64" context %"PRIx64
+mmu_helper_tfault(uint64_t address, uint64_t context) "TFAULT at
%"PRIx64" context %"PRIx64
+mmu_helper_tmiss(uint64_t address, uint64_t context) "TMISS at
%"PRIx64" context %"PRIx64
+mmu_helper_get_phys_addr_code(uint32_t tl, int mmu_idx, uint64_t
prim_context, uint64_t sec_context, uint64_t address) "tl=%d
mmu_idx=%d primary context=%"PRIx64" secondary context=%"PRIx64"
address=%"PRIx64
+mmu_helper_get_phys_addr_data(uint32_t tl, int mmu_idx, uint64_t
prim_context, uint64_t sec_context, uint64_t address) "tl=%d
mmu_idx=%d primary context=%"PRIx64" secondary context=%"PRIx64"
address=%"PRIx64
+mmu_helper_mmu_fault(uint64_t address, uint64_t paddr, int mmu_idx,
uint32_t tl, uint64_t prim_context, uint64_t sec_context) "Translate
at %"PRIx64" -> %"PRIx64", mmu_idx=%d tl=%d primary context=%"PRIx64"
secondary context=%"PRIx64
-- 
1.6.2.4

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [Qemu-devel] [PATCH 1/4] Sparc: convert mmu_helper to trace framework
  2011-09-11 16:41 [Qemu-devel] [PATCH 1/4] Sparc: convert mmu_helper to trace framework Blue Swirl
@ 2011-09-13  7:59 ` Stefan Hajnoczi
  0 siblings, 0 replies; 2+ messages in thread
From: Stefan Hajnoczi @ 2011-09-13  7:59 UTC (permalink / raw)
  To: Blue Swirl; +Cc: qemu-devel

On Sun, Sep 11, 2011 at 04:41:10PM +0000, Blue Swirl wrote:
> +mmu_helper_dmiss(uint64_t address, uint64_t context) "DMISS at
> %"PRIx64" context %"PRIx64
> +mmu_helper_tfault(uint64_t address, uint64_t context) "TFAULT at
> %"PRIx64" context %"PRIx64
> +mmu_helper_tmiss(uint64_t address, uint64_t context) "TMISS at
> %"PRIx64" context %"PRIx64

>From docs/tracing.txt:

  format strings must begin and end with double quotes.  When using
  portability macros, ensure they are preceded and followed by double
  quotes:
  "value %"PRIx64""

This is a parser limitation in scripts/tracetool.  We could change it to
treat everything after the trace event arguments as the format string,
but today it explicitly looks for a pattern like ".*".

I've added this to my tracing TODO list and it should be possible to
lift the limitation soon.  For now, please make sure the format string
begins and ends with double quote.

Stefan

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2011-09-13  7:59 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-09-11 16:41 [Qemu-devel] [PATCH 1/4] Sparc: convert mmu_helper to trace framework Blue Swirl
2011-09-13  7:59 ` Stefan Hajnoczi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).