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;
#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
{
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. */
#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;
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);
+}