[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.108 and 1.109

version 1.108, 2005/12/01 13:21:05 version 1.109, 2005/12/20 15:52:14
Line 929  pool_get(struct pool *pp, int flags)
Line 929  pool_get(struct pool *pp, int flags)
                         /*                          /*
                          * Wait for items to be returned to this pool.                           * Wait for items to be returned to this pool.
                          *                           *
                          * XXX: maybe we should wake up once a second and                           * wake up once a second and try again,
                          * try again?                           * as the check in pool_cache_put_paddr() is racy.
                          */                           */
                         pp->pr_flags |= PR_WANTED;                          pp->pr_flags |= PR_WANTED;
                         /* PA_WANTED is already set on the allocator. */                          /* PA_WANTED is already set on the allocator. */
                         pr_leave(pp);                          pr_leave(pp);
                         ltsleep(pp, PSWP, pp->pr_wchan, 0, &pp->pr_slock);                          ltsleep(pp, PSWP, pp->pr_wchan, hz, &pp->pr_slock);
                         pr_enter(pp, file, line);                          pr_enter(pp, file, line);
                         goto startover;                          goto startover;
                 }                  }
Line 2019  pool_cache_put_paddr(struct pool_cache *
Line 2019  pool_cache_put_paddr(struct pool_cache *
         struct pool_cache_group *pcg;          struct pool_cache_group *pcg;
         int s;          int s;
   
           if (__predict_false((pc->pc_pool->pr_flags & PR_WANTED) != 0)) {
                   goto destruct;
           }
   
         simple_lock(&pc->pc_slock);          simple_lock(&pc->pc_slock);
   
         pcg = LIST_FIRST(&pc->pc_partgroups);          pcg = LIST_FIRST(&pc->pc_partgroups);
Line 2040  pool_cache_put_paddr(struct pool_cache *
Line 2044  pool_cache_put_paddr(struct pool_cache *
                 pcg = pool_get(&pcgpool, PR_NOWAIT);                  pcg = pool_get(&pcgpool, PR_NOWAIT);
                 splx(s);                  splx(s);
                 if (pcg == NULL) {                  if (pcg == NULL) {
   destruct:
   
                         /*                          /*
                          * Unable to allocate a cache group; destruct the object                           * Unable to allocate a cache group; destruct the object
Line 2249  pool_allocator_alloc(struct pool *org, i
Line 2254  pool_allocator_alloc(struct pool *org, i
                 }                  }
   
                 /*                  /*
                  * Drain all pools, except "org", that use this                   * Drain all pools, that use this allocator.
                  * allocator.  We do this to reclaim VA space.                   * We do this to reclaim VA space.
                  * pa_alloc is responsible for waiting for                   * pa_alloc is responsible for waiting for
                  * physical memory.                   * physical memory.
                  *                   *
Line 2271  pool_allocator_alloc(struct pool *org, i
Line 2276  pool_allocator_alloc(struct pool *org, i
                 do {                  do {
                         TAILQ_REMOVE(&pa->pa_list, pp, pr_alloc_list);                          TAILQ_REMOVE(&pa->pa_list, pp, pr_alloc_list);
                         TAILQ_INSERT_TAIL(&pa->pa_list, pp, pr_alloc_list);                          TAILQ_INSERT_TAIL(&pa->pa_list, pp, pr_alloc_list);
                         if (pp == org)  
                                 continue;  
                         simple_unlock(&pa->pa_slock);                          simple_unlock(&pa->pa_slock);
                         freed = pool_reclaim(pp);                          freed = pool_reclaim(pp);
                         simple_lock(&pa->pa_slock);                          simple_lock(&pa->pa_slock);

Legend:
Removed from v.1.108  
changed lines
  Added in v.1.109

CVSweb <webmaster@jp.NetBSD.org>