qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH 19/31] target-ppc/helper.c: LOG_MMU macro


From: Eduardo Habkost
Subject: [Qemu-devel] [PATCH 19/31] target-ppc/helper.c: LOG_MMU macro
Date: Fri, 12 Dec 2008 13:08:58 -0200

Create a LOG_MMU macro and use it instead of #ifdef DEBUG_MMU.

Signed-off-by: Eduardo Habkost <address@hidden>
---
 target-ppc/helper.c |   95 +++++++++++++--------------------------------------
 1 files changed, 24 insertions(+), 71 deletions(-)

diff --git a/target-ppc/helper.c b/target-ppc/helper.c
index 538d9f3..85e7612 100644
--- a/target-ppc/helper.c
+++ b/target-ppc/helper.c
@@ -38,6 +38,15 @@
 //#define DEBUG_EXCEPTIONS
 //#define FLUSH_ALL_TLBS
 
+#ifdef DEBUG_MMU
+#  define LOG_MMU(...) do {              \
+     if (loglevel)                       \
+       fprintf(logfile, ## __VA_ARGS__); \
+   } while (0)
+#else
+#  define LOG_MMU(...) do { } while (0)
+#endif
+
 /*****************************************************************************/
 /* PowerPC MMU emulation */
 
@@ -217,16 +226,10 @@ static always_inline int _pte_check (mmu_ctx_t *ctx, int 
is_64b,
             ret = check_prot(ctx->prot, rw, type);
             if (ret == 0) {
                 /* Access granted */
-#if defined (DEBUG_MMU)
-                if (loglevel != 0)
-                    fprintf(logfile, "PTE access granted !\n");
-#endif
+                LOG_MMU("PTE access granted !\n");
             } else {
                 /* Access right violation */
-#if defined (DEBUG_MMU)
-                if (loglevel != 0)
-                    fprintf(logfile, "PTE access rejected\n");
-#endif
+                LOG_MMU("PTE access rejected\n");
             }
         }
     }
@@ -608,30 +611,22 @@ static always_inline int _find_pte (mmu_ctx_t *ctx, int 
is_64b, int h,
             pte0 = ldq_phys(base + (i * 16));
             pte1 =  ldq_phys(base + (i * 16) + 8);
             r = pte64_check(ctx, pte0, pte1, h, rw, type);
-#if defined (DEBUG_MMU)
-            if (loglevel != 0) {
-                fprintf(logfile, "Load pte from " ADDRX " => " ADDRX " " ADDRX
+            LOG_MMU("Load pte from " ADDRX " => " ADDRX " " ADDRX
                         " %d %d %d " ADDRX "\n",
                         base + (i * 16), pte0, pte1,
                         (int)(pte0 & 1), h, (int)((pte0 >> 1) & 1),
                         ctx->ptem);
-            }
-#endif
         } else
 #endif
         {
             pte0 = ldl_phys(base + (i * 8));
             pte1 =  ldl_phys(base + (i * 8) + 4);
             r = pte32_check(ctx, pte0, pte1, h, rw, type);
-#if defined (DEBUG_MMU)
-            if (loglevel != 0) {
-                fprintf(logfile, "Load pte from " ADDRX " => " ADDRX " " ADDRX
+            LOG_MMU("Load pte from " ADDRX " => " ADDRX " " ADDRX
                         " %d %d %d " ADDRX "\n",
                         base + (i * 8), pte0, pte1,
                         (int)(pte0 >> 31), h, (int)((pte0 >> 6) & 1),
                         ctx->ptem);
-            }
-#endif
         }
         switch (r) {
         case -3:
@@ -659,12 +654,8 @@ static always_inline int _find_pte (mmu_ctx_t *ctx, int 
is_64b, int h,
     }
     if (good != -1) {
     done:
-#if defined (DEBUG_MMU)
-        if (loglevel != 0) {
-            fprintf(logfile, "found PTE at addr " PADDRX " prot=%01x ret=%d\n",
+        LOG_MMU("found PTE at addr " PADDRX " prot=%01x ret=%d\n",
                     ctx->raddr, ctx->prot, ret);
-        }
-#endif
         /* Update page flags */
         pte1 = ctx->raddr;
         if (pte_update_flags(ctx, &pte1, ret, rw) == 1) {
@@ -910,11 +901,7 @@ static always_inline int get_segment (CPUState *env, 
mmu_ctx_t *ctx,
     pr = msr_pr;
 #if defined(TARGET_PPC64)
     if (env->mmu_model & POWERPC_MMU_64) {
-#if defined (DEBUG_MMU)
-        if (loglevel != 0) {
-            fprintf(logfile, "Check SLBs\n");
-        }
-#endif
+        LOG_MMU("Check SLBs\n");
         ret = slb_lookup(env, eaddr, &vsid, &page_mask, &attr);
         if (ret < 0)
             return ret;
@@ -940,22 +927,14 @@ static always_inline int get_segment (CPUState *env, 
mmu_ctx_t *ctx,
         vsid_sh = 6;
         sdr_sh = 16;
         sdr_mask = 0xFFC0;
-#if defined (DEBUG_MMU)
-        if (loglevel != 0) {
-            fprintf(logfile, "Check segment v=" ADDRX " %d " ADDRX
+        LOG_MMU("Check segment v=" ADDRX " %d " ADDRX
                     " nip=" ADDRX " lr=" ADDRX " ir=%d dr=%d pr=%d %d t=%d\n",
                     eaddr, (int)(eaddr >> 28), sr, env->nip,
                     env->lr, (int)msr_ir, (int)msr_dr, pr != 0 ? 1 : 0,
                     rw, type);
-        }
-#endif
     }
-#if defined (DEBUG_MMU)
-    if (loglevel != 0) {
-        fprintf(logfile, "pte segment: key=%d ds %d nx %d vsid " ADDRX "\n",
+    LOG_MMU("pte segment: key=%d ds %d nx %d vsid " ADDRX "\n",
                 ctx->key, ds, ctx->nx, vsid);
-    }
-#endif
     ret = -1;
     if (!ds) {
         /* Check if instruction fetch is allowed, if needed */
@@ -976,23 +955,15 @@ static always_inline int get_segment (CPUState *env, 
mmu_ctx_t *ctx,
                 hash = ((vsid ^ pgidx) << vsid_sh) & vsid_mask;
             }
             mask = (htab_mask << sdr_sh) | sdr_mask;
-#if defined (DEBUG_MMU)
-            if (loglevel != 0) {
-                fprintf(logfile, "sdr " PADDRX " sh %d hash " PADDRX
+            LOG_MMU("sdr " PADDRX " sh %d hash " PADDRX
                         " mask " PADDRX " " ADDRX "\n",
                         sdr, sdr_sh, hash, mask, page_mask);
-            }
-#endif
             ctx->pg_addr[0] = get_pgaddr(sdr, sdr_sh, hash, mask);
             /* Secondary table address */
             hash = (~hash) & vsid_mask;
-#if defined (DEBUG_MMU)
-            if (loglevel != 0) {
-                fprintf(logfile, "sdr " PADDRX " sh %d hash " PADDRX
+            LOG_MMU("sdr " PADDRX " sh %d hash " PADDRX
                         " mask " PADDRX "\n",
                         sdr, sdr_sh, hash, mask);
-            }
-#endif
             ctx->pg_addr[1] = get_pgaddr(sdr, sdr_sh, hash, mask);
 #if defined(TARGET_PPC64)
             if (env->mmu_model & POWERPC_MMU_64) {
@@ -1010,14 +981,10 @@ static always_inline int get_segment (CPUState *env, 
mmu_ctx_t *ctx,
                 /* Software TLB search */
                 ret = ppc6xx_tlb_check(env, ctx, eaddr, rw, type);
             } else {
-#if defined (DEBUG_MMU)
-                if (loglevel != 0) {
-                    fprintf(logfile, "0 sdr1=" PADDRX " vsid=" ADDRX " "
+                LOG_MMU("0 sdr1=" PADDRX " vsid=" ADDRX " "
                             "api=" ADDRX " hash=" PADDRX
                             " pg_addr=" PADDRX "\n",
                             sdr, vsid, pgidx, hash, ctx->pg_addr[0]);
-                }
-#endif
                 /* Primary table lookup */
                 ret = find_pte(env, ctx, 0, rw, type);
                 if (ret < 0) {
@@ -1055,17 +1022,11 @@ static always_inline int get_segment (CPUState *env, 
mmu_ctx_t *ctx,
             }
 #endif
         } else {
-#if defined (DEBUG_MMU)
-            if (loglevel != 0)
-                fprintf(logfile, "No access allowed\n");
-#endif
+            LOG_MMU("No access allowed\n");
             ret = -3;
         }
     } else {
-#if defined (DEBUG_MMU)
-        if (loglevel != 0)
-            fprintf(logfile, "direct store...\n");
-#endif
+        LOG_MMU("direct store...\n");
         /* Direct-store segment : absolutely *BUGGY* for now */
         switch (type) {
         case ACCESS_INT:
@@ -2044,11 +2005,7 @@ void ppc_store_asr (CPUPPCState *env, target_ulong value)
 
 void ppc_store_sdr1 (CPUPPCState *env, target_ulong value)
 {
-#if defined (DEBUG_MMU)
-    if (loglevel != 0) {
-        fprintf(logfile, "%s: " ADDRX "\n", __func__, value);
-    }
-#endif
+    LOG_MMU("%s: " ADDRX "\n", __func__, value);
     if (env->sdr1 != value) {
         /* XXX: for PowerPC 64, should check that the HTABSIZE value
          *      is <= 28
@@ -2060,12 +2017,8 @@ void ppc_store_sdr1 (CPUPPCState *env, target_ulong 
value)
 
 void ppc_store_sr (CPUPPCState *env, int srnum, target_ulong value)
 {
-#if defined (DEBUG_MMU)
-    if (loglevel != 0) {
-        fprintf(logfile, "%s: reg=%d " ADDRX " " ADDRX "\n",
+    LOG_MMU("%s: reg=%d " ADDRX " " ADDRX "\n",
                 __func__, srnum, value, env->sr[srnum]);
-    }
-#endif
     if (env->sr[srnum] != value) {
         env->sr[srnum] = value;
 #if !defined(FLUSH_ALL_TLBS) && 0
-- 
1.5.5.GIT





reply via email to

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