[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.170 and 1.170.2.1

version 1.170, 2008/10/15 08:13:17 version 1.170.2.1, 2009/01/19 13:19:39
Line 2528  pool_cache_put_slow(pool_cache_cpu_t *cc
Line 2528  pool_cache_put_slow(pool_cache_cpu_t *cc
         KASSERT(cc->cc_previous->pcg_avail == cc->cc_previous->pcg_size);          KASSERT(cc->cc_previous->pcg_avail == cc->cc_previous->pcg_size);
   
         pc = cc->cc_cache;          pc = cc->cc_cache;
           pcg = NULL;
         cc->cc_misses++;          cc->cc_misses++;
   
           /*
            * If there are no empty groups in the cache then allocate one
            * while still unlocked.
            */
           if (__predict_false(pc->pc_emptygroups == NULL)) {
                   if (__predict_true(!pool_cache_disable)) {
                           pcg = pool_get(pc->pc_pcgpool, PR_NOWAIT);
                   }
                   if (__predict_true(pcg != NULL)) {
                           pcg->pcg_avail = 0;
                           pcg->pcg_size = pc->pc_pcgsize;
                   }
           }
   
         /* Lock the cache. */          /* Lock the cache. */
         if (__predict_false(!mutex_tryenter(&pc->pc_lock))) {          if (__predict_false(!mutex_tryenter(&pc->pc_lock))) {
                 ncsw = curlwp->l_ncsw;                  ncsw = curlwp->l_ncsw;
Line 2542  pool_cache_put_slow(pool_cache_cpu_t *cc
Line 2557  pool_cache_put_slow(pool_cache_cpu_t *cc
                  */                   */
                 if (__predict_false(curlwp->l_ncsw != ncsw)) {                  if (__predict_false(curlwp->l_ncsw != ncsw)) {
                         mutex_exit(&pc->pc_lock);                          mutex_exit(&pc->pc_lock);
                           if (pcg != NULL) {
                                   pool_put(pc->pc_pcgpool, pcg);
                           }
                         return true;                          return true;
                 }                  }
         }          }
   
         /* If there are no empty groups in the cache then allocate one. */          /* If there are no empty groups in the cache then allocate one. */
         if (__predict_false((pcg = pc->pc_emptygroups) == NULL)) {          if (pcg == NULL && pc->pc_emptygroups != NULL) {
                 if (__predict_true(!pool_cache_disable)) {                  pcg = pc->pc_emptygroups;
                         pcg = pool_get(pc->pc_pcgpool, PR_NOWAIT);  
                 }  
                 if (__predict_true(pcg != NULL)) {  
                         pcg->pcg_avail = 0;  
                         pcg->pcg_size = pc->pc_pcgsize;  
                 }  
         } else {  
                 pc->pc_emptygroups = pcg->pcg_next;                  pc->pc_emptygroups = pcg->pcg_next;
                 pc->pc_nempty--;                  pc->pc_nempty--;
         }          }

Legend:
Removed from v.1.170  
changed lines
  Added in v.1.170.2.1

CVSweb <webmaster@jp.NetBSD.org>