kernel - Convert mpipe global token to per-pipe tokens.
authorVenkatesh Srinivas <me@endeavour.zapto.org>
Fri, 10 Sep 2010 01:26:45 +0000 (18:26 -0700)
committerVenkatesh Srinivas <me@endeavour.zapto.org>
Fri, 10 Sep 2010 01:26:45 +0000 (18:26 -0700)
sys/kern/kern_mpipe.c
sys/sys/mpipe.h

index 8a8559a..401e349 100644 (file)
@@ -32,8 +32,6 @@
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
- * 
- * $DragonFly: src/sys/kern/kern_mpipe.c,v 1.9 2006/09/05 00:55:45 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -53,8 +51,6 @@
 
 static MALLOC_DEFINE(M_MPIPEARY, "MPipe Array", "Auxillary MPIPE structure");
 
-static struct lwkt_token mpipe_token = LWKT_TOKEN_MP_INITIALIZER(mpipe_token);
-
 /*
  * Initialize a malloc pipeline for the specified malloc type and allocation
  * size.  Create an array to cache up to nom_count buffers and preallocate
@@ -93,6 +89,8 @@ mpipe_init(malloc_pipe_t mpipe, malloc_type_t type, int bytes,
        ++mpipe->free_count;
        ++mpipe->total_count;
     }
+
+    lwkt_token_init(&mpipe->token, 1, "mpipe token");
 }
 
 /*
@@ -121,6 +119,8 @@ mpipe_done(malloc_pipe_t mpipe)
        kfree(mpipe->array, M_MPIPEARY);
        mpipe->array = NULL;
     }
+
+    lwkt_token_uninit(&mpipe->token);
 }
 
 /*
@@ -135,7 +135,7 @@ mpipe_alloc_nowait(malloc_pipe_t mpipe)
     void *buf;
     int n;
 
-    lwkt_gettoken(&mpipe_token);
+    lwkt_gettoken(&mpipe->token);
     if ((n = mpipe->free_count) != 0) {
        /*
         * Use a free entry if it exists.
@@ -157,7 +157,7 @@ mpipe_alloc_nowait(malloc_pipe_t mpipe)
        if (buf)
            ++mpipe->total_count;
     }
-    lwkt_reltoken(&mpipe_token);
+    lwkt_reltoken(&mpipe->token);
     return(buf);
 }
 
@@ -172,7 +172,7 @@ mpipe_alloc_waitok(malloc_pipe_t mpipe)
     int n;
     int mfailed;
 
-    lwkt_gettoken(&mpipe_token);
+    lwkt_gettoken(&mpipe->token);
     mfailed = 0;
     for (;;) {
        if ((n = mpipe->free_count) != 0) {
@@ -204,7 +204,7 @@ mpipe_alloc_waitok(malloc_pipe_t mpipe)
        }
        mfailed = 1;
     }
-    lwkt_reltoken(&mpipe_token);
+    lwkt_reltoken(&mpipe->token);
     return(buf);
 }
 
@@ -219,7 +219,7 @@ mpipe_free(malloc_pipe_t mpipe, void *buf)
     if (buf == NULL)
        return;
 
-    lwkt_gettoken(&mpipe_token);
+    lwkt_gettoken(&mpipe->token);
     if ((n = mpipe->free_count) < mpipe->ary_count) {
        /*
         * Free slot available in free array (LIFO)
@@ -228,7 +228,7 @@ mpipe_free(malloc_pipe_t mpipe, void *buf)
        ++mpipe->free_count;
        if ((mpipe->mpflags & (MPF_CACHEDATA|MPF_NOZERO)) == 0) 
            bzero(buf, mpipe->bytes);
-       lwkt_reltoken(&mpipe_token);
+       lwkt_reltoken(&mpipe->token);
 
        /*
         * Wakeup anyone blocked in mpipe_alloc_*().
@@ -245,7 +245,7 @@ mpipe_free(malloc_pipe_t mpipe, void *buf)
        KKASSERT(mpipe->total_count >= mpipe->free_count);
        if (mpipe->deconstruct)
            mpipe->deconstruct(mpipe, buf);
-       lwkt_reltoken(&mpipe_token);
+       lwkt_reltoken(&mpipe->token);
        kfree(buf, mpipe->type);
     }
 }
index 832b518..b54959e 100644 (file)
@@ -83,6 +83,7 @@ struct malloc_pipe {
     int                total_count;    /* total outstanding allocations incl free */
     int                ary_count;      /* guarenteed allocation count */
     int                max_count;      /* maximum count (M_NOWAIT used beyond nom) */
+    lwkt_token token;
     void       **array;        /* array[ary_count] */
     void       (*deconstruct)(struct malloc_pipe *, void *buf);
 };