diff options
Diffstat (limited to 'sys')
-rw-r--r-- | sys/kern/kern_malloc.c | 34 | ||||
-rw-r--r-- | sys/sys/malloc.h | 35 |
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 |