[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.47 and 1.48

version 1.47, 2000/12/10 17:03:34 version 1.48, 2000/12/11 05:22:56
Line 1455  pool_print1(struct pool *pp, const char 
Line 1455  pool_print1(struct pool *pp, const char 
              pc = TAILQ_NEXT(pc, pc_poollist)) {               pc = TAILQ_NEXT(pc, pc_poollist)) {
                 (*pr)("\tcache %p: allocfrom %p freeto %p\n", pc,                  (*pr)("\tcache %p: allocfrom %p freeto %p\n", pc,
                     pc->pc_allocfrom, pc->pc_freeto);                      pc->pc_allocfrom, pc->pc_freeto);
                   (*pr)("\t    hits %lu misses %lu ngroups %lu nitems %lu\n",
                       pc->pc_hits, pc->pc_misses, pc->pc_ngroups, pc->pc_nitems);
                 for (pcg = TAILQ_FIRST(&pc->pc_grouplist); pcg != NULL;                  for (pcg = TAILQ_FIRST(&pc->pc_grouplist); pcg != NULL;
                      pcg = TAILQ_NEXT(pcg, pcg_list)) {                       pcg = TAILQ_NEXT(pcg, pcg_list)) {
                         (*pr)("\t\tgroup %p: avail %d\n", pcg, pcg->pcg_avail);                          (*pr)("\t\tgroup %p: avail %d\n", pcg, pcg->pcg_avail);
Line 1557  pool_cache_init(struct pool_cache *pc, s
Line 1559  pool_cache_init(struct pool_cache *pc, s
         pc->pc_dtor = dtor;          pc->pc_dtor = dtor;
         pc->pc_arg  = arg;          pc->pc_arg  = arg;
   
           pc->pc_hits   = 0;
           pc->pc_misses = 0;
   
           pc->pc_ngroups = 0;
   
           pc->pc_nitems = 0;
   
         simple_lock(&pp->pr_slock);          simple_lock(&pp->pr_slock);
         TAILQ_INSERT_TAIL(&pp->pr_cachelist, pc, pc_poollist);          TAILQ_INSERT_TAIL(&pp->pr_cachelist, pc, pc_poollist);
         simple_unlock(&pp->pr_slock);          simple_unlock(&pp->pr_slock);
Line 1638  pool_cache_get(struct pool_cache *pc, in
Line 1647  pool_cache_get(struct pool_cache *pc, in
                  * the caller.  We will allocate a group, if necessary,                   * the caller.  We will allocate a group, if necessary,
                  * when the object is freed back to the cache.                   * when the object is freed back to the cache.
                  */                   */
                   pc->pc_misses++;
                 simple_unlock(&pc->pc_slock);                  simple_unlock(&pc->pc_slock);
                 object = pool_get(pc->pc_pool, flags);                  object = pool_get(pc->pc_pool, flags);
                 if (object != NULL && pc->pc_ctor != NULL) {                  if (object != NULL && pc->pc_ctor != NULL) {
Line 1650  pool_cache_get(struct pool_cache *pc, in
Line 1660  pool_cache_get(struct pool_cache *pc, in
         }          }
   
  have_group:   have_group:
           pc->pc_hits++;
           pc->pc_nitems--;
         object = pcg_get(pcg);          object = pcg_get(pcg);
   
         if (pcg->pcg_avail == 0)          if (pcg->pcg_avail == 0)
Line 1690  pool_cache_put(struct pool_cache *pc, vo
Line 1702  pool_cache_put(struct pool_cache *pc, vo
                 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);
                           pc->pc_ngroups++;
                         TAILQ_INSERT_TAIL(&pc->pc_grouplist, pcg, pcg_list);                          TAILQ_INSERT_TAIL(&pc->pc_grouplist, pcg, pcg_list);
                         if (pc->pc_freeto == NULL)                          if (pc->pc_freeto == NULL)
                                 pc->pc_freeto = pcg;                                  pc->pc_freeto = pcg;
Line 1707  pool_cache_put(struct pool_cache *pc, vo
Line 1720  pool_cache_put(struct pool_cache *pc, vo
         }          }
   
  have_group:   have_group:
           pc->pc_nitems++;
         pcg_put(pcg, object);          pcg_put(pcg, object);
   
         if (pcg->pcg_avail == PCG_NOBJECTS)          if (pcg->pcg_avail == PCG_NOBJECTS)
Line 1732  pool_cache_do_invalidate(struct pool_cac
Line 1746  pool_cache_do_invalidate(struct pool_cac
              pcg = npcg) {               pcg = npcg) {
                 npcg = TAILQ_NEXT(pcg, pcg_list);                  npcg = TAILQ_NEXT(pcg, pcg_list);
                 while (pcg->pcg_avail != 0) {                  while (pcg->pcg_avail != 0) {
                           pc->pc_nitems--;
                         object = pcg_get(pcg);                          object = pcg_get(pcg);
                         if (pcg->pcg_avail == 0 && pc->pc_allocfrom == pcg)                          if (pcg->pcg_avail == 0 && pc->pc_allocfrom == pcg)
                                 pc->pc_allocfrom = NULL;                                  pc->pc_allocfrom = NULL;
Line 1740  pool_cache_do_invalidate(struct pool_cac
Line 1755  pool_cache_do_invalidate(struct pool_cac
                         (*putit)(pc->pc_pool, object, __FILE__, __LINE__);                          (*putit)(pc->pc_pool, object, __FILE__, __LINE__);
                 }                  }
                 if (free_groups) {                  if (free_groups) {
                           pc->pc_ngroups--;
                         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;

Legend:
Removed from v.1.47  
changed lines
  Added in v.1.48

CVSweb <webmaster@jp.NetBSD.org>