[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.49 and 1.50

version 1.49, 2001/01/14 02:06:21 version 1.50, 2001/01/29 02:38:02
Line 145  struct pool_cache_group {
Line 145  struct pool_cache_group {
 static void     pool_cache_reclaim(struct pool_cache *);  static void     pool_cache_reclaim(struct pool_cache *);
   
 static int      pool_catchup(struct pool *);  static int      pool_catchup(struct pool *);
 static void     pool_prime_page(struct pool *, caddr_t);  static int      pool_prime_page(struct pool *, caddr_t, int);
 static void     *pool_page_alloc(unsigned long, int, int);  static void     *pool_page_alloc(unsigned long, int, int);
 static void     pool_page_free(void *, unsigned long, int);  static void     pool_page_free(void *, unsigned long, int);
   
Line 714  _pool_get(struct pool *pp, int flags, co
Line 714  _pool_get(struct pool *pp, int flags, co
                 }                  }
   
                 /* We have more memory; add it to the pool */                  /* We have more memory; add it to the pool */
                   if (pool_prime_page(pp, v, flags & PR_WAITOK) != 0) {
                           /*
                            * Probably, we don't allowed to wait and
                            * couldn't allocate a page header.
                            */
                           (*pp->pr_free)(v, pp->pr_pagesz, pp->pr_mtype);
                           pp->pr_nfail++;
                           pr_leave(pp);
                           simple_unlock(&pp->pr_slock);
                           return (NULL);
                   }
                 pp->pr_npagealloc++;                  pp->pr_npagealloc++;
                 pool_prime_page(pp, v);  
   
                 /* Start the allocation process over. */                  /* Start the allocation process over. */
                 goto startover;                  goto startover;
Line 962  int
Line 972  int
 pool_prime(struct pool *pp, int n, caddr_t storage)  pool_prime(struct pool *pp, int n, caddr_t storage)
 {  {
         caddr_t cp;          caddr_t cp;
         int newnitems, newpages;          int error, newnitems, newpages;
   
 #ifdef DIAGNOSTIC  #ifdef DIAGNOSTIC
         if (__predict_false(storage && !(pp->pr_roflags & PR_STATIC)))          if (__predict_false(storage && !(pp->pr_roflags & PR_STATIC)))
Line 992  pool_prime(struct pool *pp, int n, caddr
Line 1002  pool_prime(struct pool *pp, int n, caddr
                         return (ENOMEM);                          return (ENOMEM);
                 }                  }
   
                   if ((error = pool_prime_page(pp, cp, PR_NOWAIT)) != 0) {
                           if ((pp->pr_roflags & PR_STATIC) == 0)
                                   (*pp->pr_free)(cp, pp->pr_pagesz,
                                       pp->pr_mtype);
                           simple_unlock(&pp->pr_slock);
                           return (error);
                   }
                 pp->pr_npagealloc++;                  pp->pr_npagealloc++;
                 pool_prime_page(pp, cp);  
                 pp->pr_minpages++;                  pp->pr_minpages++;
         }          }
   
Line 1011  pool_prime(struct pool *pp, int n, caddr
Line 1027  pool_prime(struct pool *pp, int n, caddr
  *   *
  * Note, we must be called with the pool descriptor LOCKED.   * Note, we must be called with the pool descriptor LOCKED.
  */   */
 static void  static int
 pool_prime_page(struct pool *pp, caddr_t storage)  pool_prime_page(struct pool *pp, caddr_t storage, int flags)
 {  {
         struct pool_item *pi;          struct pool_item *pi;
         struct pool_item_header *ph;          struct pool_item_header *ph;
Line 1028  pool_prime_page(struct pool *pp, caddr_t
Line 1044  pool_prime_page(struct pool *pp, caddr_t
                 ph = (struct pool_item_header *)(cp + pp->pr_phoffset);                  ph = (struct pool_item_header *)(cp + pp->pr_phoffset);
         } else {          } else {
                 s = splhigh();                  s = splhigh();
                 ph = pool_get(&phpool, PR_URGENT);                  ph = pool_get(&phpool, flags);
                 splx(s);                  splx(s);
                   if (ph == NULL)
                           return (ENOMEM);
                 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 1083  pool_prime_page(struct pool *pp, caddr_t
Line 1101  pool_prime_page(struct pool *pp, caddr_t
   
         if (++pp->pr_npages > pp->pr_hiwat)          if (++pp->pr_npages > pp->pr_hiwat)
                 pp->pr_hiwat = pp->pr_npages;                  pp->pr_hiwat = pp->pr_npages;
   
           return (0);
 }  }
   
 /*  /*
Line 1129  pool_catchup(struct pool *pp)
Line 1149  pool_catchup(struct pool *pp)
                         error = ENOMEM;                          error = ENOMEM;
                         break;                          break;
                 }                  }
                   if ((error = pool_prime_page(pp, cp, PR_NOWAIT)) != 0) {
                           (*pp->pr_free)(cp, pp->pr_pagesz, pp->pr_mtype);
                           break;
                   }
                 pp->pr_npagealloc++;                  pp->pr_npagealloc++;
                 pool_prime_page(pp, cp);  
         }          }
   
         return (error);          return (error);

Legend:
Removed from v.1.49  
changed lines
  Added in v.1.50

CVSweb <webmaster@jp.NetBSD.org>