qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH 20/31] target-ppc/helper.c: LOG_SWTLB macro


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

Create a LOG_SWTLB macro and use it instead of #ifdef DEBUG_SOFTWARE_TLB.

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

diff --git a/target-ppc/helper.c b/target-ppc/helper.c
index 85e7612..6e0123e 100644
--- a/target-ppc/helper.c
+++ b/target-ppc/helper.c
@@ -47,6 +47,16 @@
 #  define LOG_MMU(...) do { } while (0)
 #endif
 
+
+#ifdef DEBUG_SOFTWARE_TLB
+#  define LOG_SWTLB(...) do {            \
+     if (loglevel)                       \
+       fprintf(logfile, ## __VA_ARGS__); \
+   } while (0)
+#else
+#  define LOG_SWTLB(...) do { } while (0)
+#endif
+
 /*****************************************************************************/
 /* PowerPC MMU emulation */
 
@@ -330,12 +340,8 @@ static always_inline void __ppc6xx_tlb_invalidate_virt 
(CPUState *env,
         nr = ppc6xx_tlb_getnum(env, eaddr, way, is_code);
         tlb = &env->tlb[nr].tlb6;
         if (pte_is_valid(tlb->pte0) && (match_epn == 0 || eaddr == tlb->EPN)) {
-#if defined (DEBUG_SOFTWARE_TLB)
-            if (loglevel != 0) {
-                fprintf(logfile, "TLB invalidate %d/%d " ADDRX "\n",
+            LOG_SWTLB("TLB invalidate %d/%d " ADDRX "\n",
                         nr, env->nb_tlb, eaddr);
-            }
-#endif
             pte_invalidate(&tlb->pte0);
             tlb_flush_page(env, tlb->EPN);
         }
@@ -361,12 +367,8 @@ void ppc6xx_tlb_store (CPUState *env, target_ulong EPN, 
int way, int is_code,
 
     nr = ppc6xx_tlb_getnum(env, EPN, way, is_code);
     tlb = &env->tlb[nr].tlb6;
-#if defined (DEBUG_SOFTWARE_TLB)
-    if (loglevel != 0) {
-        fprintf(logfile, "Set TLB %d/%d EPN " ADDRX " PTE0 " ADDRX
+    LOG_SWTLB("Set TLB %d/%d EPN " ADDRX " PTE0 " ADDRX
                 " PTE1 " ADDRX "\n", nr, env->nb_tlb, EPN, pte0, pte1);
-    }
-#endif
     /* Invalidate any pending reference in Qemu for this virtual address */
     __ppc6xx_tlb_invalidate_virt(env, EPN, is_code, 1);
     tlb->pte0 = pte0;
@@ -392,27 +394,19 @@ static always_inline int ppc6xx_tlb_check (CPUState *env, 
mmu_ctx_t *ctx,
         tlb = &env->tlb[nr].tlb6;
         /* This test "emulates" the PTE index match for hardware TLBs */
         if ((eaddr & TARGET_PAGE_MASK) != tlb->EPN) {
-#if defined (DEBUG_SOFTWARE_TLB)
-            if (loglevel != 0) {
-                fprintf(logfile, "TLB %d/%d %s [" ADDRX " " ADDRX
+            LOG_SWTLB("TLB %d/%d %s [" ADDRX " " ADDRX
                         "] <> " ADDRX "\n",
                         nr, env->nb_tlb,
                         pte_is_valid(tlb->pte0) ? "valid" : "inval",
                         tlb->EPN, tlb->EPN + TARGET_PAGE_SIZE, eaddr);
-            }
-#endif
             continue;
         }
-#if defined (DEBUG_SOFTWARE_TLB)
-        if (loglevel != 0) {
-            fprintf(logfile, "TLB %d/%d %s " ADDRX " <> " ADDRX " " ADDRX
+        LOG_SWTLB("TLB %d/%d %s " ADDRX " <> " ADDRX " " ADDRX
                     " %c %c\n",
                     nr, env->nb_tlb,
                     pte_is_valid(tlb->pte0) ? "valid" : "inval",
                     tlb->EPN, eaddr, tlb->pte1,
                     rw ? 'S' : 'L', access_type == ACCESS_CODE ? 'I' : 'D');
-        }
-#endif
         switch (pte32_check(ctx, tlb->pte0, tlb->pte1, 0, rw, access_type)) {
         case -3:
             /* TLB inconsistency */
@@ -439,12 +433,8 @@ static always_inline int ppc6xx_tlb_check (CPUState *env, 
mmu_ctx_t *ctx,
     }
     if (best != -1) {
     done:
-#if defined (DEBUG_SOFTWARE_TLB)
-        if (loglevel != 0) {
-            fprintf(logfile, "found TLB at addr " PADDRX " prot=%01x ret=%d\n",
+        LOG_SWTLB("found TLB at addr " PADDRX " prot=%01x ret=%d\n",
                     ctx->raddr & TARGET_PAGE_MASK, ctx->prot, ret);
-        }
-#endif
         /* Update page flags */
         pte_update_flags(ctx, &env->tlb[best].tlb6.pte1, ret, rw);
     }
@@ -1084,13 +1074,9 @@ static always_inline int ppcemb_tlb_check (CPUState 
*env, ppcemb_tlb_t *tlb,
         return -1;
     }
     mask = ~(tlb->size - 1);
-#if defined (DEBUG_SOFTWARE_TLB)
-    if (loglevel != 0) {
-        fprintf(logfile, "%s: TLB %d address " ADDRX " PID %u <=> " ADDRX
+    LOG_SWTLB("%s: TLB %d address " ADDRX " PID %u <=> " ADDRX
                 " " ADDRX " %u\n",
                 __func__, i, address, pid, tlb->EPN, mask, (uint32_t)tlb->PID);
-    }
-#endif
     /* Check PID */
     if (tlb->PID != 0 && tlb->PID != pid)
         return -1;
@@ -1183,12 +1169,8 @@ static int mmu40x_get_physical_address (CPUState *env, 
mmu_ctx_t *ctx,
             continue;
         zsel = (tlb->attr >> 4) & 0xF;
         zpr = (env->spr[SPR_40x_ZPR] >> (28 - (2 * zsel))) & 0x3;
-#if defined (DEBUG_SOFTWARE_TLB)
-        if (loglevel != 0) {
-            fprintf(logfile, "%s: TLB %d zsel %d zpr %d rw %d attr %08x\n",
+        LOG_SWTLB("%s: TLB %d zsel %d zpr %d rw %d attr %08x\n",
                     __func__, i, zsel, zpr, rw, tlb->attr);
-        }
-#endif
         /* Check execute enable bit */
         switch (zpr) {
         case 0x2:
@@ -1218,23 +1200,15 @@ static int mmu40x_get_physical_address (CPUState *env, 
mmu_ctx_t *ctx,
         }
         if (ret >= 0) {
             ctx->raddr = raddr;
-#if defined (DEBUG_SOFTWARE_TLB)
-            if (loglevel != 0) {
-                fprintf(logfile, "%s: access granted " ADDRX " => " PADDRX
+            LOG_SWTLB("%s: access granted " ADDRX " => " PADDRX
                         " %d %d\n", __func__, address, ctx->raddr, ctx->prot,
                         ret);
-            }
-#endif
             return 0;
         }
     }
-#if defined (DEBUG_SOFTWARE_TLB)
-    if (loglevel != 0) {
-        fprintf(logfile, "%s: access refused " ADDRX " => " PADDRX
+    LOG_SWTLB("%s: access refused " ADDRX " => " PADDRX
                 " %d %d\n", __func__, address, raddr, ctx->prot,
                 ret);
-    }
-#endif
 
     return ret;
 }
-- 
1.5.5.GIT





reply via email to

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