tracing: add k_realloc trace

For `k_realloc` add tracing feature.

Signed-off-by: Fin Maaß <f.maass@vogl-electronic.com>
This commit is contained in:
Fin Maaß 2024-05-13 09:17:24 +02:00 committed by Alberto Escolar
commit 8c37f14b98
9 changed files with 85 additions and 0 deletions

View file

@ -1690,6 +1690,25 @@
*/ */
#define sys_port_trace_k_heap_free(h) #define sys_port_trace_k_heap_free(h)
/**
* @brief Trace Heap realloc enter
* @param h Heap object
* @param ptr Pointer to reallocate
* @param bytes Bytes to reallocate
* @param timeout Timeout period
*/
#define sys_port_trace_k_heap_realloc_enter(h, ptr, bytes, timeout)
/**
* @brief Trace Heap realloc exit
* @param h Heap object
* @param ptr Pointer to reallocate
* @param bytes Bytes to reallocate
* @param timeout Timeout period
* @param ret Return value
*/
#define sys_port_trace_k_heap_realloc_exit(h, ptr, bytes, timeout, ret)
/** /**
* @brief Trace System Heap aligned alloc enter * @brief Trace System Heap aligned alloc enter
* @param heap Heap object * @param heap Heap object
@ -1743,6 +1762,19 @@
*/ */
#define sys_port_trace_k_heap_sys_k_calloc_exit(heap, ret) #define sys_port_trace_k_heap_sys_k_calloc_exit(heap, ret)
/**
* @brief Trace System heap realloc enter
* @param heap
*/
#define sys_port_trace_k_heap_sys_k_realloc_enter(heap, ptr)
/**
* @brief Trace System heap realloc exit
* @param heap Heap object
* @param ret Return value
*/
#define sys_port_trace_k_heap_sys_k_realloc_exit(heap, ptr, ret)
/** @} */ /* end of subsys_tracing_apis_heap */ /** @} */ /* end of subsys_tracing_apis_heap */
/** /**

View file

@ -123,6 +123,8 @@ void *k_heap_realloc(struct k_heap *heap, void *ptr, size_t bytes, k_timeout_t t
k_spinlock_key_t key = k_spin_lock(&heap->lock); k_spinlock_key_t key = k_spin_lock(&heap->lock);
SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_heap, realloc, heap, ptr, bytes, timeout);
__ASSERT(!arch_is_in_isr() || K_TIMEOUT_EQ(timeout, K_NO_WAIT), ""); __ASSERT(!arch_is_in_isr() || K_TIMEOUT_EQ(timeout, K_NO_WAIT), "");
while (ret == NULL) { while (ret == NULL) {
@ -138,6 +140,8 @@ void *k_heap_realloc(struct k_heap *heap, void *ptr, size_t bytes, k_timeout_t t
key = k_spin_lock(&heap->lock); key = k_spin_lock(&heap->lock);
} }
SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_heap, realloc, heap, ptr, bytes, timeout, ret);
k_spin_unlock(&heap->lock, key); k_spin_unlock(&heap->lock, key);
return ret; return ret;
} }

View file

@ -129,15 +129,22 @@ void *k_realloc(void *ptr, size_t size)
ptr = --heap_ref; ptr = --heap_ref;
heap = *heap_ref; heap = *heap_ref;
SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_heap_sys, k_realloc, heap, ptr);
if (size_add_overflow(size, sizeof(heap_ref), &size)) { if (size_add_overflow(size, sizeof(heap_ref), &size)) {
SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_heap_sys, k_realloc, heap, ptr, NULL);
return NULL; return NULL;
} }
ret = k_heap_realloc(heap, ptr, size, K_NO_WAIT); ret = k_heap_realloc(heap, ptr, size, K_NO_WAIT);
if (ret != NULL) { if (ret != NULL) {
heap_ref = ret; heap_ref = ret;
ret = ++heap_ref; ret = ++heap_ref;
} }
SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_heap_sys, k_realloc, heap, ptr, ret);
return ret; return ret;
} }

View file

@ -303,6 +303,8 @@ extern "C" {
#define sys_port_trace_k_heap_alloc_enter(heap, timeout) #define sys_port_trace_k_heap_alloc_enter(heap, timeout)
#define sys_port_trace_k_heap_alloc_exit(heap, timeout, ret) #define sys_port_trace_k_heap_alloc_exit(heap, timeout, ret)
#define sys_port_trace_k_heap_free(heap) #define sys_port_trace_k_heap_free(heap)
#define sys_port_trace_k_heap_realloc_enter(h, ptr, bytes, timeout)
#define sys_port_trace_k_heap_realloc_exit(h, ptr, bytes, timeout, ret)
#define sys_port_trace_k_heap_sys_k_aligned_alloc_enter(heap) #define sys_port_trace_k_heap_sys_k_aligned_alloc_enter(heap)
#define sys_port_trace_k_heap_sys_k_aligned_alloc_exit(heap, ret) #define sys_port_trace_k_heap_sys_k_aligned_alloc_exit(heap, ret)
#define sys_port_trace_k_heap_sys_k_malloc_enter(heap) #define sys_port_trace_k_heap_sys_k_malloc_enter(heap)
@ -311,6 +313,8 @@ extern "C" {
#define sys_port_trace_k_heap_sys_k_free_exit(heap, heap_ref) #define sys_port_trace_k_heap_sys_k_free_exit(heap, heap_ref)
#define sys_port_trace_k_heap_sys_k_calloc_enter(heap) #define sys_port_trace_k_heap_sys_k_calloc_enter(heap)
#define sys_port_trace_k_heap_sys_k_calloc_exit(heap, ret) #define sys_port_trace_k_heap_sys_k_calloc_exit(heap, ret)
#define sys_port_trace_k_heap_sys_k_realloc_enter(heap, ptr)
#define sys_port_trace_k_heap_sys_k_realloc_exit(heap, ptr, ret)
#define sys_port_trace_k_mem_slab_init(slab, rc) #define sys_port_trace_k_mem_slab_init(slab, rc)
#define sys_port_trace_k_mem_slab_alloc_enter(slab, timeout) #define sys_port_trace_k_mem_slab_alloc_enter(slab, timeout)

View file

@ -566,6 +566,14 @@ void sys_trace_thread_info(struct k_thread *thread);
#define sys_port_trace_k_heap_free(heap) \ #define sys_port_trace_k_heap_free(heap) \
SEGGER_SYSVIEW_RecordU32(TID_HEAP_FREE, (uint32_t)(uintptr_t)heap) SEGGER_SYSVIEW_RecordU32(TID_HEAP_FREE, (uint32_t)(uintptr_t)heap)
#define sys_port_trace_k_heap_realloc_enter(heap, ptr, bytes, timeout) \
SEGGER_SYSVIEW_RecordU32x4(TID_HEAP_REALLOC, (uint32_t)(uintptr_t)heap, \
(uint32_t)(uintptr_t)ptr, (uint32_t)bytes, \
(uint32_t)timeout.ticks)
#define sys_port_trace_k_heap_realloc_exit(heap, ptr, bytes, timeout, ret) \
SEGGER_SYSVIEW_RecordEndCallU32(TID_HEAP_REALLOC, (uint32_t)ret)
#define sys_port_trace_k_heap_sys_k_aligned_alloc_enter(heap) #define sys_port_trace_k_heap_sys_k_aligned_alloc_enter(heap)
#define sys_port_trace_k_heap_sys_k_aligned_alloc_exit(heap, ret) #define sys_port_trace_k_heap_sys_k_aligned_alloc_exit(heap, ret)
#define sys_port_trace_k_heap_sys_k_malloc_enter(heap) #define sys_port_trace_k_heap_sys_k_malloc_enter(heap)
@ -574,6 +582,8 @@ void sys_trace_thread_info(struct k_thread *thread);
#define sys_port_trace_k_heap_sys_k_free_exit(heap, heap_ref) #define sys_port_trace_k_heap_sys_k_free_exit(heap, heap_ref)
#define sys_port_trace_k_heap_sys_k_calloc_enter(heap) #define sys_port_trace_k_heap_sys_k_calloc_enter(heap)
#define sys_port_trace_k_heap_sys_k_calloc_exit(heap, ret) #define sys_port_trace_k_heap_sys_k_calloc_exit(heap, ret)
#define sys_port_trace_k_heap_sys_k_realloc_enter(heap, ptr)
#define sys_port_trace_k_heap_sys_k_realloc_exit(heap, ptr, ret)
#define sys_port_trace_k_mem_slab_init(slab, rc) \ #define sys_port_trace_k_mem_slab_init(slab, rc) \
SEGGER_SYSVIEW_RecordU32(TID_MSLAB_INIT, (uint32_t)(uintptr_t)slab) SEGGER_SYSVIEW_RecordU32(TID_MSLAB_INIT, (uint32_t)(uintptr_t)slab)

View file

@ -71,6 +71,7 @@ extern "C" {
#define TID_HEAP_ALLOC (45u + TID_OFFSET) #define TID_HEAP_ALLOC (45u + TID_OFFSET)
#define TID_HEAP_FREE (46u + TID_OFFSET) #define TID_HEAP_FREE (46u + TID_OFFSET)
#define TID_HEAP_ALIGNED_ALLOC (47u + TID_OFFSET) #define TID_HEAP_ALIGNED_ALLOC (47u + TID_OFFSET)
#define TID_HEAP_REALLOC (48u + TID_OFFSET)
#define TID_MSLAB_INIT (52u + TID_OFFSET) #define TID_MSLAB_INIT (52u + TID_OFFSET)
#define TID_MSLAB_ALLOC (53u + TID_OFFSET) #define TID_MSLAB_ALLOC (53u + TID_OFFSET)

View file

@ -361,6 +361,16 @@ void sys_trace_k_heap_free(struct k_heap *h, void *mem)
TRACING_STRING("%s: %p\n", __func__, h); TRACING_STRING("%s: %p\n", __func__, h);
} }
void sys_trace_k_heap_realloc_enter(struct k_heap *h, void *ptr, size_t bytes, k_timeout_t timeout)
{
TRACING_STRING("%s: %p\n", __func__, h);
}
void sys_trace_k_heap_realloc_exit(struct k_heap *h, void *ptr, size_t bytes, k_timeout_t timeout,
void *ret)
{
TRACING_STRING("%s: %p\n", __func__, h);
}
void sys_trace_k_heap_aligned_alloc_blocking(struct k_heap *h, size_t bytes, k_timeout_t timeout) void sys_trace_k_heap_aligned_alloc_blocking(struct k_heap *h, size_t bytes, k_timeout_t timeout)
{ {
TRACING_STRING("%s: %p\n", __func__, h); TRACING_STRING("%s: %p\n", __func__, h);

View file

@ -379,6 +379,10 @@
#define sys_port_trace_k_heap_alloc_exit(h, timeout, ret) \ #define sys_port_trace_k_heap_alloc_exit(h, timeout, ret) \
sys_trace_k_heap_alloc_exit(h, bytes, timeout, ret) sys_trace_k_heap_alloc_exit(h, bytes, timeout, ret)
#define sys_port_trace_k_heap_free(h) sys_trace_k_heap_free(h, mem) #define sys_port_trace_k_heap_free(h) sys_trace_k_heap_free(h, mem)
#define sys_port_trace_k_heap_realloc_enter(h, ptr, bytes, timeout) \
sys_trace_k_heap_realloc_enter(h, ptr, bytes, timeout)
#define sys_port_trace_k_heap_realloc_exit(h, ptr, bytes, timeout, ret) \
sys_trace_k_heap_realloc_exit(h, ptr, bytes, timeout, ret)
#define sys_port_trace_k_heap_sys_k_aligned_alloc_enter(heap) \ #define sys_port_trace_k_heap_sys_k_aligned_alloc_enter(heap) \
sys_trace_k_heap_sys_k_aligned_alloc_enter(heap, align, size) sys_trace_k_heap_sys_k_aligned_alloc_enter(heap, align, size)
#define sys_port_trace_k_heap_sys_k_aligned_alloc_exit(heap, ret) \ #define sys_port_trace_k_heap_sys_k_aligned_alloc_exit(heap, ret) \
@ -395,6 +399,10 @@
sys_trace_k_heap_sys_k_calloc_enter(heap, nmemb, size) sys_trace_k_heap_sys_k_calloc_enter(heap, nmemb, size)
#define sys_port_trace_k_heap_sys_k_calloc_exit(heap, ret) \ #define sys_port_trace_k_heap_sys_k_calloc_exit(heap, ret) \
sys_trace_k_heap_sys_k_calloc_exit(heap, nmemb, size, ret) sys_trace_k_heap_sys_k_calloc_exit(heap, nmemb, size, ret)
#define sys_port_trace_k_heap_sys_k_realloc_enter(heap, ptr) \
sys_trace_k_heap_sys_k_realloc_enter(heap, ptr, size)
#define sys_port_trace_k_heap_sys_k_realloc_exit(heap, ptr, ret) \
sys_trace_k_heap_sys_k_realloc_exit(heap, ptr, size, ret)
#define sys_port_trace_k_mem_slab_init(slab, rc) \ #define sys_port_trace_k_mem_slab_init(slab, rc) \
sys_trace_k_mem_slab_init(slab, buffer, block_size, num_blocks, rc) sys_trace_k_mem_slab_init(slab, buffer, block_size, num_blocks, rc)
@ -654,6 +662,9 @@ void sys_trace_k_heap_aligned_alloc_blocking(struct k_heap *h, size_t bytes, k_t
void sys_trace_k_heap_aligned_alloc_exit(struct k_heap *h, size_t bytes, k_timeout_t timeout, void sys_trace_k_heap_aligned_alloc_exit(struct k_heap *h, size_t bytes, k_timeout_t timeout,
void *ret); void *ret);
void sys_trace_k_heap_free(struct k_heap *h, void *mem); void sys_trace_k_heap_free(struct k_heap *h, void *mem);
void sys_trace_k_heap_realloc_enter(struct k_heap *h, void *ptr, size_t bytes, k_timeout_t timeout);
void sys_trace_k_heap_realloc_exit(struct k_heap *h, void *ptr, size_t bytes, k_timeout_t timeout,
void *ret);
void sys_trace_k_heap_sys_k_aligned_alloc_enter(struct k_heap *h, size_t align, size_t size); void sys_trace_k_heap_sys_k_aligned_alloc_enter(struct k_heap *h, size_t align, size_t size);
void sys_trace_k_heap_sys_k_aligned_alloc_exit(struct k_heap *h, size_t align, size_t size, void sys_trace_k_heap_sys_k_aligned_alloc_exit(struct k_heap *h, size_t align, size_t size,
void *ret); void *ret);
@ -663,6 +674,8 @@ void sys_trace_k_heap_sys_k_free_enter(struct k_heap *h, struct k_heap **heap_re
void sys_trace_k_heap_sys_k_free_exit(struct k_heap *h, struct k_heap **heap_ref); void sys_trace_k_heap_sys_k_free_exit(struct k_heap *h, struct k_heap **heap_ref);
void sys_trace_k_heap_sys_k_calloc_enter(struct k_heap *h, size_t nmemb, size_t size); void sys_trace_k_heap_sys_k_calloc_enter(struct k_heap *h, size_t nmemb, size_t size);
void sys_trace_k_heap_sys_k_calloc_exit(struct k_heap *h, size_t nmemb, size_t size, void *ret); void sys_trace_k_heap_sys_k_calloc_exit(struct k_heap *h, size_t nmemb, size_t size, void *ret);
void sys_trace_k_heap_sys_k_realloc_enter(struct k_heap *h, void *ptr, size_t bytes);
void sys_trace_k_heap_sys_k_realloc_exit(struct k_heap *h, void *ptr, size_t bytes, void *ret);
void sys_trace_k_mem_slab_init(struct k_mem_slab *slab, void *buffer, size_t block_size, void sys_trace_k_mem_slab_init(struct k_mem_slab *slab, void *buffer, size_t block_size,
uint32_t num_blocks, int ret); uint32_t num_blocks, int ret);

View file

@ -288,6 +288,8 @@ void sys_trace_idle(void);
#define sys_port_trace_k_heap_alloc_enter(heap, timeout) #define sys_port_trace_k_heap_alloc_enter(heap, timeout)
#define sys_port_trace_k_heap_alloc_exit(heap, timeout, ret) #define sys_port_trace_k_heap_alloc_exit(heap, timeout, ret)
#define sys_port_trace_k_heap_free(heap) #define sys_port_trace_k_heap_free(heap)
#define sys_port_trace_k_heap_realloc_enter(h, ptr, bytes, timeout)
#define sys_port_trace_k_heap_realloc_exit(h, ptr, bytes, timeout, ret)
#define sys_port_trace_k_heap_sys_k_aligned_alloc_enter(heap) #define sys_port_trace_k_heap_sys_k_aligned_alloc_enter(heap)
#define sys_port_trace_k_heap_sys_k_aligned_alloc_exit(heap, ret) #define sys_port_trace_k_heap_sys_k_aligned_alloc_exit(heap, ret)
#define sys_port_trace_k_heap_sys_k_malloc_enter(heap) #define sys_port_trace_k_heap_sys_k_malloc_enter(heap)
@ -296,6 +298,8 @@ void sys_trace_idle(void);
#define sys_port_trace_k_heap_sys_k_free_exit(heap, heap_ref) #define sys_port_trace_k_heap_sys_k_free_exit(heap, heap_ref)
#define sys_port_trace_k_heap_sys_k_calloc_enter(heap) #define sys_port_trace_k_heap_sys_k_calloc_enter(heap)
#define sys_port_trace_k_heap_sys_k_calloc_exit(heap, ret) #define sys_port_trace_k_heap_sys_k_calloc_exit(heap, ret)
#define sys_port_trace_k_heap_sys_k_realloc_enter(heap)
#define sys_port_trace_k_heap_sys_k_realloc_exit(heap, ret)
#define sys_port_trace_k_mem_slab_init(slab, rc) #define sys_port_trace_k_mem_slab_init(slab, rc)
#define sys_port_trace_k_mem_slab_alloc_enter(slab, timeout) #define sys_port_trace_k_mem_slab_alloc_enter(slab, timeout)