diff --git a/lib/os/heap-validate.c b/lib/os/heap-validate.c index ac9bef13856..433c586b206 100644 --- a/lib/os/heap-validate.c +++ b/lib/os/heap-validate.c @@ -343,7 +343,7 @@ void heap_print_info(struct z_heap *h, bool dump_chunks) if (count) { printk("%9d %12d %12d %12zd %12zd\n", i, (1 << i) - 1 + min_chunk_size(h), count, - largest, largest * CHUNK_UNIT - chunk_header_bytes(h)); + largest, chunksz_to_bytes(h, largest)); } } @@ -355,11 +355,9 @@ void heap_print_info(struct z_heap *h, bool dump_chunks) if (c == 0 || c == h->end_chunk) { /* those are always allocated for internal purposes */ } else if (chunk_used(h, c)) { - allocated_bytes += chunk_size(h, c) * CHUNK_UNIT - - chunk_header_bytes(h); + allocated_bytes += chunksz_to_bytes(h, chunk_size(h, c)); } else if (!solo_free_header(h, c)) { - free_bytes += chunk_size(h, c) * CHUNK_UNIT - - chunk_header_bytes(h); + free_bytes += chunksz_to_bytes(h, chunk_size(h, c)); } if (dump_chunks) { printk("chunk %4zd: [%c] size=%-4zd left=%-4zd right=%zd\n", diff --git a/lib/os/heap.c b/lib/os/heap.c index 22ecce05914..6cf9ed6dd7b 100644 --- a/lib/os/heap.c +++ b/lib/os/heap.c @@ -367,8 +367,7 @@ void *sys_heap_aligned_realloc(struct sys_heap *heap, void *ptr, void *ptr2 = sys_heap_aligned_alloc(heap, align, bytes); if (ptr2 != NULL) { - size_t prev_size = chunk_size(h, c) * CHUNK_UNIT - - chunk_header_bytes(h) - align_gap; + size_t prev_size = chunksz_to_bytes(h, chunk_size(h, c)) - align_gap; memcpy(ptr2, ptr, MIN(prev_size, bytes)); sys_heap_free(heap, ptr); diff --git a/lib/os/heap.h b/lib/os/heap.h index 416d9c24c55..2b0b2b5521b 100644 --- a/lib/os/heap.h +++ b/lib/os/heap.h @@ -228,6 +228,11 @@ static inline int min_chunk_size(struct z_heap *h) return bytes_to_chunksz(h, 1); } +static inline size_t chunksz_to_bytes(struct z_heap *h, size_t chunksz) +{ + return chunksz * CHUNK_UNIT - chunk_header_bytes(h); +} + static inline int bucket_idx(struct z_heap *h, size_t sz) { size_t usable_sz = sz - min_chunk_size(h) + 1;