vppinfra: forward declare clib_mem_heap_t 79/43879/2
authorDamjan Marion <[email protected]>
Fri, 10 Oct 2025 22:13:55 +0000 (00:13 +0200)
committerDamjan Marion <[email protected]>
Mon, 13 Oct 2025 13:22:32 +0000 (13:22 +0000)
Change-Id: Ie18a342722401d5b0f0c542110c3ff3d7b1a7e28
Type: improvement
Signed-off-by: Damjan Marion <[email protected]>
src/vlib/stats/provider_mem.c
src/vppinfra/mem.h
src/vppinfra/mem_dlmalloc.c

index f3a3f5d..e102ea4 100644 (file)
@@ -54,13 +54,17 @@ vlib_stats_register_mem_heap (clib_mem_heap_t *heap)
 
   vec_add1 (memory_heaps_vec, heap);
 
-  r.entry_index = idx = vlib_stats_add_counter_vector ("/mem/%s", heap->name);
+  r.entry_index = idx =
+    vlib_stats_add_counter_vector ("/mem/%U", format_clib_mem_heap_name, heap);
   vlib_stats_validate (idx, 0, STAT_MEM_RELEASABLE);
 
   /* Create symlink */
-  vlib_stats_add_symlink (idx, STAT_MEM_USED, "/mem/%s/used", heap->name);
-  vlib_stats_add_symlink (idx, STAT_MEM_TOTAL, "/mem/%s/total", heap->name);
-  vlib_stats_add_symlink (idx, STAT_MEM_FREE, "/mem/%s/free", heap->name);
+  vlib_stats_add_symlink (idx, STAT_MEM_USED, "/mem/%U/used",
+                         format_clib_mem_heap_name, heap);
+  vlib_stats_add_symlink (idx, STAT_MEM_TOTAL, "/mem/%U/total",
+                         format_clib_mem_heap_name, heap);
+  vlib_stats_add_symlink (idx, STAT_MEM_FREE, "/mem/%U/free",
+                         format_clib_mem_heap_name, heap);
 
   r.private_data = vec_len (memory_heaps_vec) - 1;
   r.collect_fn = stat_provider_mem_usage_update_fn;
index 8939780..5ce7dae 100644 (file)
@@ -109,26 +109,8 @@ typedef enum
 #undef _
 } clib_mem_heap_flag_t;
 
-typedef struct
-{
-  /* base address */
-  void *base;
-
-  /* dlmalloc mspace */
-  void *mspace;
-
-  /* heap size */
-  uword size;
-
-  /* page size (log2) */
-  clib_mem_page_sz_t log2_page_sz:8;
-
-  /* flags */
-  clib_mem_heap_flag_t flags:8;
-
-  /* name - _MUST_ be last */
-  char name[0];
-} clib_mem_heap_t;
+struct clib_mem_heap_t;
+typedef struct clib_mem_heap_t clib_mem_heap_t;
 
 typedef struct
 {
@@ -354,6 +336,7 @@ uword clib_mem_get_heap_free_space (clib_mem_heap_t * heap);
 
 u8 *format_clib_mem_usage (u8 * s, va_list * args);
 u8 *format_clib_mem_heap (u8 * s, va_list * va);
+u8 *format_clib_mem_heap_name (u8 *s, va_list *va);
 u8 *format_clib_mem_page_stats (u8 * s, va_list * va);
 
 /* Allocate virtual address space. */
index 7944240..68413d5 100644 (file)
 #include <vppinfra/elf_clib.h>
 #include <vppinfra/stack.h>
 
+struct clib_mem_heap_t
+{
+  /* base address */
+  void *base;
+
+  /* dlmalloc mspace */
+  void *mspace;
+
+  /* heap size */
+  uword size;
+
+  /* page size (log2) */
+  clib_mem_page_sz_t log2_page_sz : 8;
+
+  /* flags */
+  clib_mem_heap_flag_t flags : 8;
+
+  /* name - _MUST_ be last */
+  char name[0];
+};
+
 typedef struct
 {
   clib_spinlock_t lock;
@@ -823,3 +844,9 @@ clib_mem_free_s (void *p)
   memset_s_inline (p, size, 0, size);
   clib_mem_free (p);
 }
+__clib_export u8 *
+format_clib_mem_heap_name (u8 *s, va_list *va)
+{
+  clib_mem_heap_t *h = va_arg (*va, clib_mem_heap_t *);
+  return format (s, "%s", h->name);
+}