Module Name: src
Committed By: maxv
Date: Sun Jun 5 13:44:48 UTC 2016
Modified Files:
src/sys/lib/libsa: alloc.c
Log Message:
Remove the ALLOC_FIRST_FIT and ALLOC_TRACE options. This is a rather simple
allocator, and it does not need to be that complicated.
To generate a diff of this commit:
cvs rdiff -u -r1.26 -r1.27 src/sys/lib/libsa/alloc.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/lib/libsa/alloc.c
diff -u src/sys/lib/libsa/alloc.c:1.26 src/sys/lib/libsa/alloc.c:1.27
--- src/sys/lib/libsa/alloc.c:1.26 Sat Jul 30 03:43:20 2011
+++ src/sys/lib/libsa/alloc.c Sun Jun 5 13:44:48 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: alloc.c,v 1.26 2011/07/30 03:43:20 jakllsch Exp $ */
+/* $NetBSD: alloc.c,v 1.27 2016/06/05 13:44:48 maxv Exp $ */
/*
* Copyright (c) 1993
@@ -103,11 +103,6 @@
*
* Compile options:
*
- * ALLOC_TRACE enable tracing of allocations/deallocations
-
- * ALLOC_FIRST_FIT use a first-fit allocation algorithm, rather than
- * the default best-fit algorithm.
- *
* HEAP_LIMIT heap limit address (defaults to "no limit").
*
* HEAP_START start address of heap (defaults to '&end').
@@ -138,6 +133,9 @@
* However, note that ALIGN(sizeof(unsigned int)) + ALIGN(data size) must
* be at least 'sizeof(struct fl)', so that blocks can be used as structures
* when on the free list.
+ *
+ * When HEAP_LIMIT is defined and the heap limit is reached, alloc() panics.
+ * Otherwise, it never fails.
*/
struct fl {
unsigned int size;
@@ -166,22 +164,10 @@ __compactcall void *
alloc(size_t size)
{
struct fl **f = &freelist, **bestf = NULL;
-#ifndef ALLOC_FIRST_FIT
unsigned int bestsize = 0xffffffff; /* greater than any real size */
-#endif
char *help;
int failed;
-#ifdef ALLOC_TRACE
- printf("alloc(%zu)", size);
-#endif
-
-#ifdef ALLOC_FIRST_FIT
- while (*f != (struct fl *)0 && (size_t)(*f)->size < size)
- f = &((*f)->next);
- bestf = f;
- failed = (*bestf == (struct fl *)0);
-#else
/* scan freelist */
while (*f) {
if ((size_t)(*f)->size >= size) {
@@ -199,7 +185,6 @@ alloc(size_t size)
/* no match in freelist if bestsize unchanged */
failed = (bestsize == 0xffffffff);
-#endif
if (failed) { /* nothing found */
/*
@@ -217,25 +202,16 @@ alloc(size_t size)
panic("heap full (%p+%zu)", help, size);
#endif
*(unsigned int *)(void *)help = (unsigned int)ALIGN(size);
-#ifdef ALLOC_TRACE
- printf("=%lx\n", (u_long)help + ALIGN(sizeof(unsigned int)));
-#endif
return help + ALIGN(sizeof(unsigned int));
}
/* we take the best fit */
f = bestf;
-#ifndef ALLOC_FIRST_FIT
found:
-#endif
/* remove from freelist */
help = (char *)(void *)*f;
*f = (*f)->next;
-#ifdef ALLOC_TRACE
- printf("=%lx (origsize %u)\n",
- (u_long)help + ALIGN(sizeof(unsigned int)), *(unsigned int *)help);
-#endif
return help + ALIGN(sizeof(unsigned int));
}
@@ -246,9 +222,6 @@ dealloc(void *ptr, size_t size)
struct fl *f =
(struct fl *)(void *)((char *)(void *)ptr -
ALIGN(sizeof(unsigned int)));
-#ifdef ALLOC_TRACE
- printf("dealloc(%lx, %zu) (origsize %u)\n", (u_long)ptr, size, f->size);
-#endif
#ifdef DEBUG
if (size > (size_t)f->size) {
printf("dealloc %zu bytes @%lx, should be <=%u\n",