version 1.151.6.4, 2009/01/17 13:29:19 |
version 1.169, 2008/08/11 02:48:42 |
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 2557 pool_cache_put_slow(pool_cache_cpu_t *cc |
|
Line 2542 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 (pcg == NULL && pc->pc_emptygroups != NULL) { |
if (__predict_false((pcg = pc->pc_emptygroups) == NULL)) { |
pcg = pc->pc_emptygroups; |
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; |
|
} |
|
} else { |
pc->pc_emptygroups = pcg->pcg_next; |
pc->pc_emptygroups = pcg->pcg_next; |
pc->pc_nempty--; |
pc->pc_nempty--; |
} |
} |
|
|
if (pool_in_cg(pp, cc->cc_current, addr) || |
if (pool_in_cg(pp, cc->cc_current, addr) || |
pool_in_cg(pp, cc->cc_previous, addr)) { |
pool_in_cg(pp, cc->cc_previous, addr)) { |
struct cpu_info *ci = |
struct cpu_info *ci = |
cpu_lookup(i); |
cpu_lookup_byindex(i); |
|
|
incpucache = true; |
incpucache = true; |
snprintf(cpucachestr, |
snprintf(cpucachestr, |