freedreno/decode: Add rnn_reginfo_free() helper
authorRob Clark <robdclark@chromium.org>
Thu, 29 Dec 2022 19:07:17 +0000 (11:07 -0800)
committerMarge Bot <emma+marge@anholt.net>
Tue, 3 Jan 2023 21:56:28 +0000 (21:56 +0000)
Simplify things a bit.. and fix a few places that just leaked the
rnndecaddrinfo.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20456>

src/freedreno/decode/cffdec.c
src/freedreno/decode/crashdec-mempool.c
src/freedreno/decode/crashdec.c
src/freedreno/decode/rddecompiler.c
src/freedreno/decode/rnnutil.c
src/freedreno/decode/rnnutil.h
src/freedreno/decode/script.c

index 05eebf0..a5706f1 100644 (file)
@@ -859,10 +859,7 @@ dump_register_val(uint32_t regbase, uint32_t dword, int level)
       printf("%s<%04x>: %08x\n", levels[level], regbase, dword);
    }
 
-   if (info) {
-      free(info->name);
-      free(info);
-   }
+   rnn_reginfo_free(info);
 }
 
 static void
index 98404ff..51f9159 100644 (file)
@@ -39,6 +39,7 @@ dump_mem_pool_reg_write(unsigned reg, uint32_t data, unsigned context,
          printf("\t\t\t");
          dump_register(rnn_pipe, reg, data);
       }
+      rnn_reginfo_free(info);
    } else {
       printf("\t\twrite %s (%05x) context %d\n", regname(reg, 1), reg, context);
       dump_register_val(reg, data, 2);
index 1da27c6..640f8d4 100644 (file)
@@ -469,6 +469,7 @@ dump_register(struct rnn *rnn, uint32_t offset, uint32_t value)
    } else {
       printf("<%04x>: %08x\n", offset, value);
    }
+   rnn_reginfo_free(info);
 }
 
 static void
index 0669148..593cfd6 100644 (file)
@@ -266,6 +266,8 @@ decompile_register(uint32_t regbase, uint32_t *dwords, uint16_t cnt, int level)
       printlvl(level, "pkt4(cs, %u, (%u), %u);\n", regbase, cnt, dword);
    }
 
+   rnn_reginfo_free(info);
+
    return 1;
 }
 
index d280389..6c7b000 100644 (file)
@@ -144,12 +144,22 @@ rnn_regname(struct rnn *rnn, uint32_t regbase, int color)
    return NULL;
 }
 
+/* call rnn_reginfo_free() to free the result */
 struct rnndecaddrinfo *
 rnn_reginfo(struct rnn *rnn, uint32_t regbase)
 {
    return rnndec_decodeaddr(rnn->vc, finddom(rnn, regbase), regbase, 0);
 }
 
+void
+rnn_reginfo_free(struct rnndecaddrinfo *info)
+{
+   if (!info)
+      return;
+   free(info->name);
+   free(info);
+}
+
 const char *
 rnn_enumname(struct rnn *rnn, const char *name, uint32_t val)
 {
index b288323..6651096 100644 (file)
@@ -55,6 +55,7 @@ void rnn_load(struct rnn *rnn, const char *gpuname);
 uint32_t rnn_regbase(struct rnn *rnn, const char *name);
 const char *rnn_regname(struct rnn *rnn, uint32_t regbase, int color);
 struct rnndecaddrinfo *rnn_reginfo(struct rnn *rnn, uint32_t regbase);
+void rnn_reginfo_free(struct rnndecaddrinfo *info);
 const char *rnn_enumname(struct rnn *rnn, const char *name, uint32_t val);
 
 struct rnndelem *rnn_regelem(struct rnn *rnn, const char *name);
index c2bf75d..956102b 100644 (file)
@@ -393,10 +393,7 @@ l_rnn_reg_meta_tostring(lua_State *L)
    }
    lua_pushstring(L, decoded);
    free(decoded);
-   if (info) {
-      free(info->name);
-      free(info);
-   }
+   rnn_reginfo_free(info);
    return 1;
 }
 
@@ -519,10 +516,7 @@ l_rnn_regval(lua_State *L)
    }
    lua_pushstring(L, decoded);
    free(decoded);
-   if (info) {
-      free(info->name);
-      free(info);
-   }
+   rnn_reginfo_free(info);
    return 1;
 }