[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.182.4.4 and 1.183

version 1.182.4.4, 2011/04/21 01:42:09 version 1.183, 2010/04/25 11:49:04
Line 54  __KERNEL_RCSID(0, "$NetBSD$");
Line 54  __KERNEL_RCSID(0, "$NetBSD$");
 #include <sys/cpu.h>  #include <sys/cpu.h>
 #include <sys/atomic.h>  #include <sys/atomic.h>
   
 #include <uvm/uvm_extern.h>  #include <uvm/uvm.h>
 #ifdef DIAGNOSTIC  
 #include <uvm/uvm_km.h> /* uvm_km_va_drain */  
 #endif  
   
 /*  /*
  * Pool resource management utility.   * Pool resource management utility.
Line 182  static struct pool pcg_large_pool;
Line 179  static struct pool pcg_large_pool;
 static struct pool cache_pool;  static struct pool cache_pool;
 static struct pool cache_cpu_pool;  static struct pool cache_cpu_pool;
   
 pool_cache_t pnbuf_cache;       /* pathname buffer cache */  
   
 /* List of all caches. */  /* List of all caches. */
 TAILQ_HEAD(,pool_cache) pool_cache_head =  TAILQ_HEAD(,pool_cache) pool_cache_head =
     TAILQ_HEAD_INITIALIZER(pool_cache_head);      TAILQ_HEAD_INITIALIZER(pool_cache_head);
Line 567  pool_reclaim_register(struct pool *pp)
Line 562  pool_reclaim_register(struct pool *pp)
         callback_register(&vm_map_to_kernel(map)->vmk_reclaim_callback,          callback_register(&vm_map_to_kernel(map)->vmk_reclaim_callback,
             &pp->pr_reclaimerentry, pp, pool_reclaim_callback);              &pp->pr_reclaimerentry, pp, pool_reclaim_callback);
         splx(s);          splx(s);
   
 #ifdef DIAGNOSTIC  
         /* Diagnostic drain attempt. */  
         uvm_km_va_drain(map, 0);  
 #endif  
 }  }
   
 static void  static void
Line 994  pool_get(struct pool *pp, int flags)
Line 984  pool_get(struct pool *pp, int flags)
         void *v;          void *v;
   
 #ifdef DIAGNOSTIC  #ifdef DIAGNOSTIC
         if (pp->pr_itemsperpage == 0)          if (__predict_false(pp->pr_itemsperpage == 0))
                 panic("pool_get: pool '%s': pr_itemsperpage is zero, "                  panic("pool_get: pool %p: pr_itemsperpage is zero, "
                     "pool not initialized?", pp->pr_wchan);                      "pool not initialized?", pp);
         if ((cpu_intr_p() || cpu_softintr_p()) && pp->pr_ipl == IPL_NONE &&          if (__predict_false(curlwp == NULL && doing_shutdown == 0 &&
             !cold && panicstr == NULL)                              (flags & PR_WAITOK) != 0))
                 panic("pool '%s' is IPL_NONE, but called from "                  panic("pool_get: %s: must have NOWAIT", pp->pr_wchan);
                     "interrupt context\n", pp->pr_wchan);  
 #endif  #endif /* DIAGNOSTIC */
   #ifdef LOCKDEBUG
         if (flags & PR_WAITOK) {          if (flags & PR_WAITOK) {
                 ASSERT_SLEEPABLE();                  ASSERT_SLEEPABLE();
         }          }
   #endif
   
         mutex_enter(&pp->pr_lock);          mutex_enter(&pp->pr_lock);
         pr_enter(pp, file, line);          pr_enter(pp, file, line);
Line 1612  pool_sethardlimit(struct pool *pp, int n
Line 1604  pool_sethardlimit(struct pool *pp, int n
   
 /*  /*
  * Release all complete pages that have not been used recently.   * Release all complete pages that have not been used recently.
  *  
  * Might be called from interrupt context.  
  */   */
 int  int
 #ifdef POOL_DIAGNOSTIC  #ifdef POOL_DIAGNOSTIC
Line 1628  pool_reclaim(struct pool *pp)
Line 1618  pool_reclaim(struct pool *pp)
         bool klock;          bool klock;
         int rv;          int rv;
   
         if (cpu_intr_p() || cpu_softintr_p()) {  
                 KASSERT(pp->pr_ipl != IPL_NONE);  
         }  
   
         if (pp->pr_drain_hook != NULL) {          if (pp->pr_drain_hook != NULL) {
                 /*                  /*
                  * The drain hook must be called with the pool unlocked.                   * The drain hook must be called with the pool unlocked.
Line 1750  pool_drain_start(struct pool **ppp, uint
Line 1736  pool_drain_start(struct pool **ppp, uint
         }          }
 }  }
   
 bool  void
 pool_drain_end(struct pool *pp, uint64_t where)  pool_drain_end(struct pool *pp, uint64_t where)
 {  {
         bool reclaimed;  
   
         if (pp == NULL)          if (pp == NULL)
                 return false;                  return;
   
         KASSERT(pp->pr_refcnt > 0);          KASSERT(pp->pr_refcnt > 0);
   
Line 1765  pool_drain_end(struct pool *pp, uint64_t
Line 1750  pool_drain_end(struct pool *pp, uint64_t
                 xc_wait(where);                  xc_wait(where);
   
         /* Drain the cache (if any) and pool.. */          /* Drain the cache (if any) and pool.. */
         reclaimed = pool_reclaim(pp);          pool_reclaim(pp);
   
         /* Finally, unlock the pool. */          /* Finally, unlock the pool. */
         mutex_enter(&pool_head_lock);          mutex_enter(&pool_head_lock);
         pp->pr_refcnt--;          pp->pr_refcnt--;
         cv_broadcast(&pool_busy);          cv_broadcast(&pool_busy);
         mutex_exit(&pool_head_lock);          mutex_exit(&pool_head_lock);
   
         return reclaimed;  
 }  }
   
 /*  /*
Line 2537  pool_cache_get_paddr(pool_cache_t pc, in
Line 2520  pool_cache_get_paddr(pool_cache_t pc, in
         void *object;          void *object;
         int s;          int s;
   
         KASSERTMSG((!cpu_intr_p() && !cpu_softintr_p()) ||  #ifdef LOCKDEBUG
             (pc->pc_pool.pr_ipl != IPL_NONE || cold || panicstr != NULL),  
             ("pool '%s' is IPL_NONE, but called from interrupt context\n",  
             pc->pc_pool.pr_wchan));  
   
         if (flags & PR_WAITOK) {          if (flags & PR_WAITOK) {
                 ASSERT_SLEEPABLE();                  ASSERT_SLEEPABLE();
         }          }
   #endif
   
         /* Lock out interrupts and disable preemption. */          /* Lock out interrupts and disable preemption. */
         s = splvm();          s = splvm();

Legend:
Removed from v.1.182.4.4  
changed lines
  Added in v.1.183

CVSweb <webmaster@jp.NetBSD.org>