Module Name:    src
Committed By:   rmind
Date:           Sun Oct  2 21:32:48 UTC 2011

Modified Files:
        src/sys/kern: subr_vmem.c

Log Message:
- Replace calc_order() with ilog2(), wrap into SIZE2ORDER().
- Inline some functions, reduce some #ifdefs.


To generate a diff of this commit:
cvs rdiff -u -r1.61 -r1.62 src/sys/kern/subr_vmem.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/kern/subr_vmem.c
diff -u src/sys/kern/subr_vmem.c:1.61 src/sys/kern/subr_vmem.c:1.62
--- src/sys/kern/subr_vmem.c:1.61	Fri Sep  2 22:25:08 2011
+++ src/sys/kern/subr_vmem.c	Sun Oct  2 21:32:48 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: subr_vmem.c,v 1.61 2011/09/02 22:25:08 dyoung Exp $	*/
+/*	$NetBSD: subr_vmem.c,v 1.62 2011/10/02 21:32:48 rmind Exp $	*/
 
 /*-
  * Copyright (c)2006,2007,2008,2009 YAMAMOTO Takashi,
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_vmem.c,v 1.61 2011/09/02 22:25:08 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_vmem.c,v 1.62 2011/10/02 21:32:48 rmind Exp $");
 
 #if defined(_KERNEL)
 #include "opt_ddb.h"
@@ -48,6 +48,7 @@ __KERNEL_RCSID(0, "$NetBSD: subr_vmem.c,
 #include <sys/param.h>
 #include <sys/hash.h>
 #include <sys/queue.h>
+#include <sys/bitops.h>
 
 #if defined(_KERNEL)
 #include <sys/systm.h>
@@ -180,90 +181,54 @@ typedef struct vmem_btag bt_t;
 
 #define	VMEM_ALIGNUP(addr, align) \
 	(-(-(addr) & -(align)))
+
 #define	VMEM_CROSS_P(addr1, addr2, boundary) \
 	((((addr1) ^ (addr2)) & -(boundary)) != 0)
 
 #define	ORDER2SIZE(order)	((vmem_size_t)1 << (order))
+#define	SIZE2ORDER(size)	((int)ilog2(size))
 
-static int
-calc_order(vmem_size_t size)
-{
-	vmem_size_t target;
-	int i;
-
-	KASSERT(size != 0);
-
-	i = 0;
-	target = size >> 1;
-	while (ORDER2SIZE(i) <= target) {
-		i++;
-	}
-
-	KASSERT(ORDER2SIZE(i) <= size);
-	KASSERT(size < ORDER2SIZE(i + 1) || ORDER2SIZE(i + 1) < ORDER2SIZE(i));
-
-	return i;
-}
+#if !defined(_KERNEL)
+#define	xmalloc(sz, flags)	malloc(sz)
+#define	xfree(p)		free(p)
+#define	bt_alloc(vm, flags)	malloc(sizeof(bt_t))
+#define	bt_free(vm, bt)		free(bt)
+#else	/* !defined(_KERNEL) */
 
-#if defined(_KERNEL)
 static MALLOC_DEFINE(M_VMEM, "vmem", "vmem");
-#endif /* defined(_KERNEL) */
 
-static void *
+static inline void *
 xmalloc(size_t sz, vm_flag_t flags)
 {
-
-#if defined(_KERNEL)
 	return malloc(sz, M_VMEM,
 	    M_CANFAIL | ((flags & VM_SLEEP) ? M_WAITOK : M_NOWAIT));
-#else /* defined(_KERNEL) */
-	return malloc(sz);
-#endif /* defined(_KERNEL) */
 }
 
-static void
+static inline void
 xfree(void *p)
 {
-
-#if defined(_KERNEL)
 	return free(p, M_VMEM);
-#else /* defined(_KERNEL) */
-	return free(p);
-#endif /* defined(_KERNEL) */
 }
 
 /* ---- boundary tag */
 
-#if defined(_KERNEL)
 static struct pool_cache bt_cache;
-#endif /* defined(_KERNEL) */
 
-static bt_t *
+static inline bt_t *
 bt_alloc(vmem_t *vm, vm_flag_t flags)
 {
-	bt_t *bt;
-
-#if defined(_KERNEL)
-	bt = pool_cache_get(&bt_cache,
-	    (flags & VM_SLEEP) != 0 ? PR_WAITOK : PR_NOWAIT);
-#else /* defined(_KERNEL) */
-	bt = malloc(sizeof *bt);
-#endif /* defined(_KERNEL) */
-
-	return bt;
+	return pool_cache_get(&bt_cache,
+	    (flags & VM_SLEEP) ? PR_WAITOK : PR_NOWAIT);
 }
 
-static void
+static inline void
 bt_free(vmem_t *vm, bt_t *bt)
 {
-
-#if defined(_KERNEL)
 	pool_cache_put(&bt_cache, bt);
-#else /* defined(_KERNEL) */
-	free(bt);
-#endif /* defined(_KERNEL) */
 }
 
+#endif	/* !defined(_KERNEL) */
+
 /*
  * freelist[0] ... [1, 1] 
  * freelist[1] ... [2, 3]
@@ -278,12 +243,10 @@ static struct vmem_freelist *
 bt_freehead_tofree(vmem_t *vm, vmem_size_t size)
 {
 	const vmem_size_t qsize = size >> vm->vm_quantum_shift;
-	int idx;
+	const int idx = SIZE2ORDER(qsize);
 
+	KASSERT(size != 0 && qsize != 0);
 	KASSERT((size & vm->vm_quantum_mask) == 0);
-	KASSERT(size != 0);
-
-	idx = calc_order(qsize);
 	KASSERT(idx >= 0);
 	KASSERT(idx < VMEM_MAXORDER);
 
@@ -303,12 +266,11 @@ static struct vmem_freelist *
 bt_freehead_toalloc(vmem_t *vm, vmem_size_t size, vm_flag_t strat)
 {
 	const vmem_size_t qsize = size >> vm->vm_quantum_shift;
-	int idx;
+	int idx = SIZE2ORDER(qsize);
 
+	KASSERT(size != 0 && qsize != 0);
 	KASSERT((size & vm->vm_quantum_mask) == 0);
-	KASSERT(size != 0);
 
-	idx = calc_order(qsize);
 	if (strat == VM_INSTANTFIT && ORDER2SIZE(idx) != qsize) {
 		idx++;
 		/* check too large request? */
@@ -794,6 +756,7 @@ vmem_create(const char *name, vmem_addr_
 
 	KASSERT((flags & (VM_SLEEP|VM_NOSLEEP)) != 0);
 	KASSERT((~flags & (VM_SLEEP|VM_NOSLEEP)) != 0);
+	KASSERT(quantum > 0);
 
 #if defined(_KERNEL)
 	if (RUN_ONCE(&control, vmem_init)) {
@@ -808,7 +771,7 @@ vmem_create(const char *name, vmem_addr_
 	VMEM_LOCK_INIT(vm, ipl);
 	vm->vm_name = name;
 	vm->vm_quantum_mask = quantum - 1;
-	vm->vm_quantum_shift = calc_order(quantum);
+	vm->vm_quantum_shift = SIZE2ORDER(quantum);
 	KASSERT(ORDER2SIZE(vm->vm_quantum_shift) == quantum);
 	vm->vm_importfn = importfn;
 	vm->vm_releasefn = releasefn;

Reply via email to