[BACK]Return to subr_pool.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / kern

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/kern/subr_pool.c between version 1.21.2.1 and 1.21.2.2

version 1.21.2.1, 1999/04/04 17:20:14 version 1.21.2.2, 1999/04/07 00:34:55
Line 73  static struct pool phpool;
Line 73  static struct pool phpool;
 int pool_inactive_time = 10;  int pool_inactive_time = 10;
   
 /* Next candidate for drainage (see pool_drain()) */  /* Next candidate for drainage (see pool_drain()) */
 static struct pool      *drainpp = NULL;  static struct pool      *drainpp;
   
   /* This spin lock protects both pool_head and drainpp. */
   struct simplelock pool_head_slock = SIMPLELOCK_INITIALIZER;
   
 struct pool_item_header {  struct pool_item_header {
         /* Page headers */          /* Page headers */
Line 363  pool_init(pp, size, align, ioff, flags, 
Line 366  pool_init(pp, size, align, ioff, flags, 
         /*          /*
          * Initialize the pool structure.           * Initialize the pool structure.
          */           */
         TAILQ_INSERT_TAIL(&pool_head, pp, pr_poollist);  
         TAILQ_INIT(&pp->pr_pagelist);          TAILQ_INIT(&pp->pr_pagelist);
         pp->pr_curpage = NULL;          pp->pr_curpage = NULL;
         pp->pr_npages = 0;          pp->pr_npages = 0;
Line 451  pool_init(pp, size, align, ioff, flags, 
Line 453  pool_init(pp, size, align, ioff, flags, 
   
         /*          /*
          * Initialize private page header pool if we haven't done so yet.           * Initialize private page header pool if we haven't done so yet.
            * XXX LOCKING.
          */           */
         if (phpool.pr_size == 0) {          if (phpool.pr_size == 0) {
                 pool_init(&phpool, sizeof(struct pool_item_header), 0, 0,                  pool_init(&phpool, sizeof(struct pool_item_header), 0, 0,
                           0, "phpool", 0, 0, 0, 0);                            0, "phpool", 0, 0, 0, 0);
         }          }
   
         return;          /* Insert into the list of all pools. */
           simple_lock(&pool_head_slock);
           TAILQ_INSERT_TAIL(&pool_head, pp, pr_poollist);
           simple_unlock(&pool_head_slock);
 }  }
   
 /*  /*
Line 483  pool_destroy(pp)
Line 489  pool_destroy(pp)
                         pr_rmpage(pp, ph);                          pr_rmpage(pp, ph);
   
         /* Remove from global pool list */          /* Remove from global pool list */
           simple_lock(&pool_head_slock);
         TAILQ_REMOVE(&pool_head, pp, pr_poollist);          TAILQ_REMOVE(&pool_head, pp, pr_poollist);
           /* XXX Only clear this if we were drainpp? */
         drainpp = NULL;          drainpp = NULL;
           simple_unlock(&pool_head_slock);
   
 #ifdef POOL_DIAGNOSTIC  #ifdef POOL_DIAGNOSTIC
         if ((pp->pr_roflags & PR_LOGGING) != 0)          if ((pp->pr_roflags & PR_LOGGING) != 0)
Line 1215  pool_drain(arg)
Line 1224  pool_drain(arg)
         void *arg;          void *arg;
 {  {
         struct pool *pp;          struct pool *pp;
         int s = splimp();          int s;
   
         /* XXX:lock pool head */          s = splimp();
         if (drainpp == NULL && (drainpp = TAILQ_FIRST(&pool_head)) == NULL) {          simple_lock(&pool_head_slock);
                 splx(s);  
                 return;          if (drainpp == NULL && (drainpp = TAILQ_FIRST(&pool_head)) == NULL)
         }                  goto out;
   
         pp = drainpp;          pp = drainpp;
         drainpp = TAILQ_NEXT(pp, pr_poollist);          drainpp = TAILQ_NEXT(pp, pr_poollist);
         /* XXX:unlock pool head */  
   
         pool_reclaim(pp);          pool_reclaim(pp);
   
    out:
           simple_unlock(&pool_head_slock);
         splx(s);          splx(s);
 }  }
   

Legend:
Removed from v.1.21.2.1  
changed lines
  Added in v.1.21.2.2

CVSweb <webmaster@jp.NetBSD.org>