[OpenBIOS] [PATCH 2/5] Introduce ofmem_malloc_align() function for arbitrary alignment.
Mark Cave-Ayland
mark.cave-ayland at siriusit.co.uk
Tue Dec 21 11:38:37 CET 2010
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 at 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();
--
1.7.1
More information about the OpenBIOS
mailing list