Rework ofmem_malloc() so that it takes a second parameter specifying the alignment for the allocation and rename it to ofmem_malloc_align(). Then create ofmem_malloc() as a simple wrapper function onto ofmem_malloc_align() using a default alignment of CONFIG_OFMEM_MALLOC_ALIGN.
Signed-off-by: Mark Cave-Ayland mark.cave-ayland@siriusit.co.uk --- openbios-devel/include/libopenbios/ofmem.h | 1 + openbios-devel/libopenbios/ofmem_common.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/openbios-devel/include/libopenbios/ofmem.h b/openbios-devel/include/libopenbios/ofmem.h index 6472008..72247d9 100644 --- a/openbios-devel/include/libopenbios/ofmem.h +++ b/openbios-devel/include/libopenbios/ofmem.h @@ -76,6 +76,7 @@ extern int ofmem_map_page_range( phys_addr_t phys, ucell virt, ucell size, ucell mode );
/* malloc interface */ +extern void* ofmem_malloc_align( size_t size, int alignment ); extern void* ofmem_malloc( size_t size ); extern void ofmem_free( void *ptr ); extern void* ofmem_realloc( void *ptr, size_t size ); diff --git a/openbios-devel/libopenbios/ofmem_common.c b/openbios-devel/libopenbios/ofmem_common.c index a4e199c..e892260 100644 --- a/openbios-devel/libopenbios/ofmem_common.c +++ b/openbios-devel/libopenbios/ofmem_common.c @@ -86,7 +86,7 @@ print_trans( void ) /* OF private allocations */ /************************************************************************/
-void* ofmem_malloc( size_t size ) +void* ofmem_malloc_align( size_t size, int alignment ) { ofmem_t *ofmem = ofmem_arch_get_private(); alloc_desc_t *d, **pp; @@ -99,7 +99,7 @@ void* ofmem_malloc( size_t size ) if( !ofmem->next_malloc ) ofmem->next_malloc = (char*)ofmem_arch_get_malloc_base();
- size = ALIGN_SIZE(size + sizeof(alloc_desc_t), CONFIG_OFMEM_MALLOC_ALIGN); + size = ALIGN_SIZE(size + sizeof(alloc_desc_t), alignment);
/* look in the freelist */ for( pp=&ofmem->mfree; *pp && (**pp).size < size; pp = &(**pp).next ) { @@ -115,7 +115,7 @@ void* ofmem_malloc( size_t size )
top = ofmem_arch_get_heap_top();
- ret = (char *)ALIGN_PTR((uintptr_t)ofmem->next_malloc + sizeof(alloc_desc_t), CONFIG_OFMEM_MALLOC_ALIGN); + ret = (char *)ALIGN_PTR((uintptr_t)ofmem->next_malloc + sizeof(alloc_desc_t), alignment); if( pointer2cell((void *)ret) + size > top ) { printk("out of malloc memory (%x)!\n", size ); return NULL; @@ -132,6 +132,11 @@ void* ofmem_malloc( size_t size ) return (void *)ret; }
+void* ofmem_malloc( size_t size ) +{ + return ofmem_malloc_align( size, CONFIG_OFMEM_MALLOC_ALIGN ); +} + void ofmem_free( void *ptr ) { ofmem_t *ofmem = ofmem_arch_get_private();