[OpenBIOS] [commit] r1004 - trunk/openbios-devel/arch/sparc32
repository service
svn at openbios.org
Sun Jan 2 01:06:42 CET 2011
Author: mcayland
Date: Sun Jan 2 01:06:40 2011
New Revision: 1004
URL: http://tracker.coreboot.org/trac/openbios/changeset/1004
Log:
Switch SPARC32 over to use OFMEM's malloc()/free() internally rather than using it's own implementation.
Also juggle the memory to take into account that the allocations are coming from OFMEM, and remove
posix_memalign2() since it is no longer required.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at siriusit.co.uk>
Tested-by: Blue Swirl <blauwirbel at gmail.com>
Reviewed-by: Blue Swirl <blauwirbel at gmail.com>
Modified:
trunk/openbios-devel/arch/sparc32/ldscript
trunk/openbios-devel/arch/sparc32/lib.c
trunk/openbios-devel/arch/sparc32/ofmem_sparc32.c
Modified: trunk/openbios-devel/arch/sparc32/ldscript
==============================================================================
--- trunk/openbios-devel/arch/sparc32/ldscript Sun Jan 2 01:06:34 2011 (r1003)
+++ trunk/openbios-devel/arch/sparc32/ldscript Sun Jan 2 01:06:40 2011 (r1004)
@@ -12,8 +12,7 @@
/* 16KB stack */
STACK_SIZE = 16384;
-/* 256k general alloc + 256k Forth dictionary + 16k Forth memory */
-VMEM_SIZE = (256 + 256 + 16) * 1024;
+VMEM_SIZE = 128 * 1024;
IOMEM_SIZE = 256 * 1024 + 768 * 1024;
SECTIONS
Modified: trunk/openbios-devel/arch/sparc32/lib.c
==============================================================================
--- trunk/openbios-devel/arch/sparc32/lib.c Sun Jan 2 01:06:34 2011 (r1003)
+++ trunk/openbios-devel/arch/sparc32/lib.c Sun Jan 2 01:06:40 2011 (r1004)
@@ -75,18 +75,6 @@
struct linux_mlist_v0 *ptmap;
struct linux_mlist_v0 *ptavail;
-static struct {
- char *next_malloc;
- int left;
- alloc_desc_t *mfree; /* list of free malloc blocks */
-
- range_t *phys_range;
- range_t *virt_range;
-
- translation_t *trans; /* this is really a translation_t */
-} ofmem;
-#define ALLOC_BLOCK (64 * 1024)
-
/* Private functions for mapping between physical/virtual addresses */
phys_addr_t
va2pa(unsigned long va)
@@ -108,112 +96,22 @@
return pa;
}
-// XXX should be posix_memalign
-static int
-posix_memalign2(void **memptr, size_t alignment, size_t size)
-{
- alloc_desc_t *d, **pp;
- char *ret;
-
- if( !size )
- return -1;
-
- size = (size + (alignment - 1)) & ~(alignment - 1);
- size += sizeof(alloc_desc_t);
-
- /* look in the freelist */
- for( pp=&ofmem.mfree; *pp && (**pp).size < size; pp = &(**pp).next )
- ;
-
- /* waste at most 4K by taking an entry from the freelist */
- if( *pp && (**pp).size < size + 0x1000 ) {
- ret = (char*)*pp + sizeof(alloc_desc_t);
- memset( ret, 0, (**pp).size - sizeof(alloc_desc_t) );
- *pp = (**pp).next;
- *memptr = ret;
- return 0;
- }
-
- if( !ofmem.next_malloc || ofmem.left < size) {
- unsigned long alloc_size = ALLOC_BLOCK;
- if (size > ALLOC_BLOCK)
- alloc_size = size;
- // Recover possible leftover
- if ((size_t)ofmem.left > sizeof(alloc_desc_t) + 4) {
- alloc_desc_t *d_leftover;
-
- d_leftover = (alloc_desc_t*)ofmem.next_malloc;
- d_leftover->size = ofmem.left - sizeof(alloc_desc_t);
- free((void *)((unsigned long)d_leftover +
- sizeof(alloc_desc_t)));
- }
-
- ofmem.next_malloc = mem_alloc(&cmem, alloc_size, 8);
- ofmem.left = alloc_size;
- }
-
- if( ofmem.left < size) {
- printk("out of malloc memory (%x)!\n", size );
- return -1;
- }
- d = (alloc_desc_t*) ofmem.next_malloc;
- ofmem.next_malloc += size;
- ofmem.left -= size;
-
- d->next = NULL;
- d->size = size;
-
- ret = (char*)d + sizeof(alloc_desc_t);
- memset( ret, 0, size - sizeof(alloc_desc_t) );
- *memptr = ret;
- return 0;
-}
-
-void *malloc(int size)
-{
- int ret;
- void *mem;
-
- ret = posix_memalign2(&mem, 8, size);
- if (ret != 0)
- return NULL;
- return mem;
-}
-
-void free(void *ptr)
+void *
+malloc(int size)
{
- alloc_desc_t **pp, *d;
-
- /* it is legal to free NULL pointers (size zero allocations) */
- if( !ptr )
- return;
-
- d = (alloc_desc_t*)((unsigned long)ptr - sizeof(alloc_desc_t));
- d->next = ofmem.mfree;
-
- /* insert in the (sorted) freelist */
- for( pp=&ofmem.mfree; *pp && (**pp).size < d->size ; pp = &(**pp).next )
- ;
- d->next = *pp;
- *pp = d;
+ return ofmem_malloc(size);
}
void *
realloc( void *ptr, size_t size )
{
- alloc_desc_t *d = (alloc_desc_t*)((unsigned long)ptr - sizeof(alloc_desc_t));
- char *p;
+ return ofmem_realloc(ptr, size);
+}
- if( !ptr )
- return malloc( size );
- if( !size ) {
- free( ptr );
- return NULL;
- }
- p = malloc( size );
- memcpy( p, ptr, MIN(d->size - sizeof(alloc_desc_t),size) );
- free( ptr );
- return p;
+void
+free(void *ptr)
+{
+ ofmem_free(ptr);
}
/*
Modified: trunk/openbios-devel/arch/sparc32/ofmem_sparc32.c
==============================================================================
--- trunk/openbios-devel/arch/sparc32/ofmem_sparc32.c Sun Jan 2 01:06:34 2011 (r1003)
+++ trunk/openbios-devel/arch/sparc32/ofmem_sparc32.c Sun Jan 2 01:06:40 2011 (r1004)
@@ -21,7 +21,7 @@
#define OF_MALLOC_BASE ((char*)OFMEM + ALIGN_SIZE(sizeof(ofmem_t), 8))
-#define MEMSIZE (256 * 1024)
+#define MEMSIZE (512 * 1024)
static union {
char memory[MEMSIZE];
ofmem_t ofmem;
More information about the OpenBIOS
mailing list