[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.56 and 1.60

version 1.56, 2001/05/13 17:06:59 version 1.60, 2001/07/01 06:12:20
Line 175  struct pool_log {
Line 175  struct pool_log {
   
 int pool_logsize = POOL_LOGSIZE;  int pool_logsize = POOL_LOGSIZE;
   
 #ifdef DIAGNOSTIC  #ifdef POOL_DIAGNOSTIC
 static __inline void  static __inline void
 pr_log(struct pool *pp, void *v, int action, const char *file, long line)  pr_log(struct pool *pp, void *v, int action, const char *file, long line)
 {  {
Line 272  pr_enter_check(struct pool *pp, void (*p
Line 272  pr_enter_check(struct pool *pp, void (*p
 #define pr_enter(pp, file, line)  #define pr_enter(pp, file, line)
 #define pr_leave(pp)  #define pr_leave(pp)
 #define pr_enter_check(pp, pr)  #define pr_enter_check(pp, pr)
 #endif /* DIAGNOSTIC */  #endif /* POOL_DIAGNOSTIC */
   
 /*  /*
  * Return the pool page header based on page address.   * Return the pool page header based on page address.
Line 477  pool_init(struct pool *pp, size_t size, 
Line 477  pool_init(struct pool *pp, size_t size, 
         pp->pr_hiwat = 0;          pp->pr_hiwat = 0;
         pp->pr_nidle = 0;          pp->pr_nidle = 0;
   
   #ifdef POOL_DIAGNOSTIC
         if (flags & PR_LOGGING) {          if (flags & PR_LOGGING) {
                 if (kmem_map == NULL ||                  if (kmem_map == NULL ||
                     (pp->pr_log = malloc(pool_logsize * sizeof(struct pool_log),                      (pp->pr_log = malloc(pool_logsize * sizeof(struct pool_log),
Line 485  pool_init(struct pool *pp, size_t size, 
Line 486  pool_init(struct pool *pp, size_t size, 
                 pp->pr_curlogentry = 0;                  pp->pr_curlogentry = 0;
                 pp->pr_logsize = pool_logsize;                  pp->pr_logsize = pool_logsize;
         }          }
   #endif
   
         pp->pr_entered_file = NULL;          pp->pr_entered_file = NULL;
         pp->pr_entered_line = 0;          pp->pr_entered_line = 0;
Line 542  pool_destroy(struct pool *pp)
Line 544  pool_destroy(struct pool *pp)
         drainpp = NULL;          drainpp = NULL;
         simple_unlock(&pool_head_slock);          simple_unlock(&pool_head_slock);
   
   #ifdef POOL_DIAGNOSTIC
         if ((pp->pr_roflags & PR_LOGGING) != 0)          if ((pp->pr_roflags & PR_LOGGING) != 0)
                 free(pp->pr_log, M_TEMP);                  free(pp->pr_log, M_TEMP);
   #endif
   
         if (pp->pr_roflags & PR_FREEHEADER)          if (pp->pr_roflags & PR_FREEHEADER)
                 free(pp, M_POOL);                  free(pp, M_POOL);
Line 572  pool_alloc_item_header(struct pool *pp, 
Line 576  pool_alloc_item_header(struct pool *pp, 
  * Grab an item from the pool; must be called at appropriate spl level   * Grab an item from the pool; must be called at appropriate spl level
  */   */
 void *  void *
 #ifdef DIAGNOSTIC  #ifdef POOL_DIAGNOSTIC
 _pool_get(struct pool *pp, int flags, const char *file, long line)  _pool_get(struct pool *pp, int flags, const char *file, long line)
 #else  #else
 pool_get(struct pool *pp, int flags)  pool_get(struct pool *pp, int flags)
Line 592  pool_get(struct pool *pp, int flags)
Line 596  pool_get(struct pool *pp, int flags)
         if (__predict_false(curproc == NULL && doing_shutdown == 0 &&          if (__predict_false(curproc == NULL && doing_shutdown == 0 &&
                             (flags & PR_WAITOK) != 0))                              (flags & PR_WAITOK) != 0))
                 panic("pool_get: must have NOWAIT");                  panic("pool_get: must have NOWAIT");
   
   #ifdef LOCKDEBUG
           if (flags & PR_WAITOK)
                   simple_lock_only_held(NULL, "pool_get(PR_WAITOK)");
 #endif  #endif
   #endif /* DIAGNOSTIC */
   
         simple_lock(&pp->pr_slock);          simple_lock(&pp->pr_slock);
         pr_enter(pp, file, line);          pr_enter(pp, file, line);
Line 937  pool_do_put(struct pool *pp, void *v)
Line 946  pool_do_put(struct pool *pp, void *v)
 /*  /*
  * Return resource to the pool; must be called at appropriate spl level   * Return resource to the pool; must be called at appropriate spl level
  */   */
 #ifdef DIAGNOSTIC  #ifdef POOL_DIAGNOSTIC
 void  void
 _pool_put(struct pool *pp, void *v, const char *file, long line)  _pool_put(struct pool *pp, void *v, const char *file, long line)
 {  {
Line 952  _pool_put(struct pool *pp, void *v, cons
Line 961  _pool_put(struct pool *pp, void *v, cons
         pr_leave(pp);          pr_leave(pp);
         simple_unlock(&pp->pr_slock);          simple_unlock(&pp->pr_slock);
 }  }
   #undef pool_put
   #endif /* POOL_DIAGNOSTIC */
   
 #else  
 void  void
 pool_put(struct pool *pp, void *v)  pool_put(struct pool *pp, void *v)
 {  {
Line 964  pool_put(struct pool *pp, void *v)
Line 974  pool_put(struct pool *pp, void *v)
   
         simple_unlock(&pp->pr_slock);          simple_unlock(&pp->pr_slock);
 }  }
   
   #ifdef POOL_DIAGNOSTIC
   #define         pool_put(h, v)  _pool_put((h), (v), __FILE__, __LINE__)
 #endif  #endif
   
 /*  /*
Line 1236  pool_page_free_nointr(void *v, unsigned 
Line 1249  pool_page_free_nointr(void *v, unsigned 
  * Release all complete pages that have not been used recently.   * Release all complete pages that have not been used recently.
  */   */
 void  void
 #ifdef DIAGNOSTIC  #ifdef POOL_DIAGNOSTIC
 _pool_reclaim(struct pool *pp, const char *file, long line)  _pool_reclaim(struct pool *pp, const char *file, long line)
 #else  #else
 pool_reclaim(struct pool *pp)  pool_reclaim(struct pool *pp)
Line 1630  pool_cache_get(struct pool_cache *pc, in
Line 1643  pool_cache_get(struct pool_cache *pc, in
         struct pool_cache_group *pcg;          struct pool_cache_group *pcg;
         void *object;          void *object;
   
   #ifdef LOCKDEBUG
           if (flags & PR_WAITOK)
                   simple_lock_only_held(NULL, "pool_cache_get(PR_WAITOK)");
   #endif
   
         simple_lock(&pc->pc_slock);          simple_lock(&pc->pc_slock);
   
         if ((pcg = pc->pc_allocfrom) == NULL) {          if ((pcg = pc->pc_allocfrom) == NULL) {
Line 1681  void
Line 1699  void
 pool_cache_put(struct pool_cache *pc, void *object)  pool_cache_put(struct pool_cache *pc, void *object)
 {  {
         struct pool_cache_group *pcg;          struct pool_cache_group *pcg;
           int s;
   
         simple_lock(&pc->pc_slock);          simple_lock(&pc->pc_slock);
   
Line 1698  pool_cache_put(struct pool_cache *pc, vo
Line 1717  pool_cache_put(struct pool_cache *pc, vo
                  * allocate one.                   * allocate one.
                  */                   */
                 simple_unlock(&pc->pc_slock);                  simple_unlock(&pc->pc_slock);
                   s = splvm();
                 pcg = pool_get(&pcgpool, PR_NOWAIT);                  pcg = pool_get(&pcgpool, PR_NOWAIT);
                   splx(s);
                 if (pcg != NULL) {                  if (pcg != NULL) {
                         memset(pcg, 0, sizeof(*pcg));                          memset(pcg, 0, sizeof(*pcg));
                         simple_lock(&pc->pc_slock);                          simple_lock(&pc->pc_slock);
Line 1754  pool_cache_do_invalidate(struct pool_cac
Line 1775  pool_cache_do_invalidate(struct pool_cac
 {  {
         struct pool_cache_group *pcg, *npcg;          struct pool_cache_group *pcg, *npcg;
         void *object;          void *object;
           int s;
   
         for (pcg = TAILQ_FIRST(&pc->pc_grouplist); pcg != NULL;          for (pcg = TAILQ_FIRST(&pc->pc_grouplist); pcg != NULL;
              pcg = npcg) {               pcg = npcg) {
Line 1772  pool_cache_do_invalidate(struct pool_cac
Line 1794  pool_cache_do_invalidate(struct pool_cac
                         TAILQ_REMOVE(&pc->pc_grouplist, pcg, pcg_list);                          TAILQ_REMOVE(&pc->pc_grouplist, pcg, pcg_list);
                         if (pc->pc_freeto == pcg)                          if (pc->pc_freeto == pcg)
                                 pc->pc_freeto = NULL;                                  pc->pc_freeto = NULL;
                           s = splvm();
                         pool_put(&pcgpool, pcg);                          pool_put(&pcgpool, pcg);
                           splx(s);
                 }                  }
         }          }
 }  }

Legend:
Removed from v.1.56  
changed lines
  Added in v.1.60

CVSweb <webmaster@jp.NetBSD.org>