summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/kern/kern_malloc.c34
-rw-r--r--sys/sys/malloc.h35
2 files changed, 35 insertions, 34 deletions
diff --git a/sys/kern/kern_malloc.c b/sys/kern/kern_malloc.c
index 9e3269356ee..9c94a64657e 100644
--- a/sys/kern/kern_malloc.c
+++ b/sys/kern/kern_malloc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kern_malloc.c,v 1.79 2009/02/22 19:57:59 miod Exp $ */
+/* $OpenBSD: kern_malloc.c,v 1.80 2009/08/25 17:59:43 miod Exp $ */
/* $NetBSD: kern_malloc.c,v 1.15.4.2 1996/06/13 17:10:56 cgd Exp $ */
/*
@@ -43,6 +43,38 @@
#include <uvm/uvm_extern.h>
+static __inline__ long BUCKETINDX(size_t sz)
+{
+#ifdef SMALL_KERNEL
+ long b;
+
+ if (sz-- == 0)
+ return MINBUCKET;
+
+ for (b = MINBUCKET; b < MINBUCKET + 15; b++)
+ if ((sz >> b) == 0)
+ break;
+#else
+ long b, d;
+
+ /* note that this relies upon MINALLOCSIZE being 1 << MINBUCKET */
+ b = 7 + MINBUCKET; d = 4;
+ while (d != 0) {
+ if (sz <= (1 << b))
+ b -= d;
+ else
+ b += d;
+ d >>= 1;
+ }
+ if (sz <= (1 << b))
+ b += 0;
+ else
+ b += 1;
+#endif
+
+ return b;
+}
+
static struct vm_map kmem_map_store;
struct vm_map *kmem_map = NULL;
diff --git a/sys/sys/malloc.h b/sys/sys/malloc.h
index 06e0c2ed0ce..31786d0cfd1 100644
--- a/sys/sys/malloc.h
+++ b/sys/sys/malloc.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: malloc.h,v 1.95 2008/12/29 14:20:19 oga Exp $ */
+/* $OpenBSD: malloc.h,v 1.96 2009/08/25 17:59:45 miod Exp $ */
/* $NetBSD: malloc.h,v 1.39 1998/07/12 19:52:01 augustss Exp $ */
/*
@@ -359,39 +359,8 @@ struct kmembuckets {
};
#ifdef _KERNEL
+
#define MINALLOCSIZE (1 << MINBUCKET)
-#define BUCKETINDX(size) \
- ((size) <= (MINALLOCSIZE * 128) \
- ? (size) <= (MINALLOCSIZE * 8) \
- ? (size) <= (MINALLOCSIZE * 2) \
- ? (size) <= (MINALLOCSIZE * 1) \
- ? (MINBUCKET + 0) \
- : (MINBUCKET + 1) \
- : (size) <= (MINALLOCSIZE * 4) \
- ? (MINBUCKET + 2) \
- : (MINBUCKET + 3) \
- : (size) <= (MINALLOCSIZE* 32) \
- ? (size) <= (MINALLOCSIZE * 16) \
- ? (MINBUCKET + 4) \
- : (MINBUCKET + 5) \
- : (size) <= (MINALLOCSIZE * 64) \
- ? (MINBUCKET + 6) \
- : (MINBUCKET + 7) \
- : (size) <= (MINALLOCSIZE * 2048) \
- ? (size) <= (MINALLOCSIZE * 512) \
- ? (size) <= (MINALLOCSIZE * 256) \
- ? (MINBUCKET + 8) \
- : (MINBUCKET + 9) \
- : (size) <= (MINALLOCSIZE * 1024) \
- ? (MINBUCKET + 10) \
- : (MINBUCKET + 11) \
- : (size) <= (MINALLOCSIZE * 8192) \
- ? (size) <= (MINALLOCSIZE * 4096) \
- ? (MINBUCKET + 12) \
- : (MINBUCKET + 13) \
- : (size) <= (MINALLOCSIZE * 16384) \
- ? (MINBUCKET + 14) \
- : (MINBUCKET + 15))
/*
* Turn virtual addresses into kmem map indices