[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.4 and 1.22

version 1.21.2.4, 1999/06/25 00:08:22 version 1.22, 1999/04/04 17:17:31
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;  static struct pool      *drainpp = NULL;
   
 /* 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 258  pr_rmpage(pp, ph)
Line 255  pr_rmpage(pp, ph)
         pp->pr_npagefree++;          pp->pr_npagefree++;
   
         if ((pp->pr_roflags & PR_PHINPAGE) == 0) {          if ((pp->pr_roflags & PR_PHINPAGE) == 0) {
                 int s;  
                 LIST_REMOVE(ph, ph_hashlist);                  LIST_REMOVE(ph, ph_hashlist);
                 s = splhigh();  
                 pool_put(&phpool, ph);                  pool_put(&phpool, ph);
                 splx(s);  
         }          }
   
         if (pp->pr_curpage == ph) {          if (pp->pr_curpage == ph) {
Line 369  pool_init(pp, size, align, ioff, flags, 
Line 363  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 456  pool_init(pp, size, align, ioff, flags, 
Line 451  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);
         }          }
   
         /* Insert into the list of all pools. */          return;
         simple_lock(&pool_head_slock);  
         TAILQ_INSERT_TAIL(&pool_head, pp, pr_poollist);  
         simple_unlock(&pool_head_slock);  
 }  }
   
 /*  /*
Line 492  pool_destroy(pp)
Line 483  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 936  pool_prime_page(pp, storage)
Line 924  pool_prime_page(pp, storage)
         caddr_t cp = storage;          caddr_t cp = storage;
         unsigned int align = pp->pr_align;          unsigned int align = pp->pr_align;
         unsigned int ioff = pp->pr_itemoffset;          unsigned int ioff = pp->pr_itemoffset;
         int s, n;          int n;
   
         if ((pp->pr_roflags & PR_PHINPAGE) != 0) {          if ((pp->pr_roflags & PR_PHINPAGE) != 0) {
                 ph = (struct pool_item_header *)(cp + pp->pr_phoffset);                  ph = (struct pool_item_header *)(cp + pp->pr_phoffset);
         } else {          } else {
                 s = splhigh();  
                 ph = pool_get(&phpool, PR_URGENT);                  ph = pool_get(&phpool, PR_URGENT);
                 splx(s);  
                 LIST_INSERT_HEAD(&pp->pr_hashtab[PR_HASH_INDEX(pp, cp)],                  LIST_INSERT_HEAD(&pp->pr_hashtab[PR_HASH_INDEX(pp, cp)],
                                  ph, ph_hashlist);                                   ph, ph_hashlist);
         }          }
Line 1229  pool_drain(arg)
Line 1215  pool_drain(arg)
         void *arg;          void *arg;
 {  {
         struct pool *pp;          struct pool *pp;
         int s;          int s = splimp();
   
         s = splimp();          /* XXX:lock pool head */
         simple_lock(&pool_head_slock);          if (drainpp == NULL && (drainpp = TAILQ_FIRST(&pool_head)) == NULL) {
                   splx(s);
         if (drainpp == NULL && (drainpp = TAILQ_FIRST(&pool_head)) == NULL)                  return;
                 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.4  
changed lines
  Added in v.1.22

CVSweb <webmaster@jp.NetBSD.org>