[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.202 and 1.203.2.1

version 1.202, 2014/04/26 16:30:05 version 1.203.2.1, 2016/03/06 17:32:02
Line 1 
Line 1 
 /*      $NetBSD$        */  /*      $NetBSD$        */
   
 /*-  /*-
  * Copyright (c) 1997, 1999, 2000, 2002, 2007, 2008, 2010   * Copyright (c) 1997, 1999, 2000, 2002, 2007, 2008, 2010, 2014
  *     The NetBSD Foundation, Inc.   *     The NetBSD Foundation, Inc.
  * All rights reserved.   * All rights reserved.
  *   *
Line 39  __KERNEL_RCSID(0, "$NetBSD$");
Line 39  __KERNEL_RCSID(0, "$NetBSD$");
   
 #include <sys/param.h>  #include <sys/param.h>
 #include <sys/systm.h>  #include <sys/systm.h>
   #include <sys/sysctl.h>
 #include <sys/bitops.h>  #include <sys/bitops.h>
 #include <sys/proc.h>  #include <sys/proc.h>
 #include <sys/errno.h>  #include <sys/errno.h>
Line 2751  print:
Line 2752  print:
         }          }
 }  }
 #endif /* defined(DDB) */  #endif /* defined(DDB) */
   
   static int
   pool_sysctl(SYSCTLFN_ARGS)
   {
           struct pool_sysctl data;
           struct pool *pp;
           struct pool_cache *pc;
           pool_cache_cpu_t *cc;
           int error;
           size_t i, written;
   
           if (oldp == NULL) {
                   *oldlenp = 0;
                   TAILQ_FOREACH(pp, &pool_head, pr_poollist)
                           *oldlenp += sizeof(data);
                   return 0;
           }
   
           memset(&data, 0, sizeof(data));
           error = 0;
           written = 0;
           TAILQ_FOREACH(pp, &pool_head, pr_poollist) {
                   if (written + sizeof(data) > *oldlenp)
                           break;
                   strlcpy(data.pr_wchan, pp->pr_wchan, sizeof(data.pr_wchan));
                   data.pr_pagesize = pp->pr_alloc->pa_pagesz;
                   data.pr_flags = pp->pr_roflags | pp->pr_flags;
   #define COPY(field) data.field = pp->field
                   COPY(pr_size);
   
                   COPY(pr_itemsperpage);
                   COPY(pr_nitems);
                   COPY(pr_nout);
                   COPY(pr_hardlimit);
                   COPY(pr_npages);
                   COPY(pr_minpages);
                   COPY(pr_maxpages);
   
                   COPY(pr_nget);
                   COPY(pr_nfail);
                   COPY(pr_nput);
                   COPY(pr_npagealloc);
                   COPY(pr_npagefree);
                   COPY(pr_hiwat);
                   COPY(pr_nidle);
   #undef COPY
   
                   data.pr_cache_nmiss_pcpu = 0;
                   data.pr_cache_nhit_pcpu = 0;
                   if (pp->pr_cache) {
                           pc = pp->pr_cache;
                           data.pr_cache_meta_size = pc->pc_pcgsize;
                           data.pr_cache_nfull = pc->pc_nfull;
                           data.pr_cache_npartial = pc->pc_npart;
                           data.pr_cache_nempty = pc->pc_nempty;
                           data.pr_cache_ncontended = pc->pc_contended;
                           data.pr_cache_nmiss_global = pc->pc_misses;
                           data.pr_cache_nhit_global = pc->pc_hits;
                           for (i = 0; i < pc->pc_ncpu; ++i) {
                                   cc = pc->pc_cpus[i];
                                   if (cc == NULL)
                                           continue;
                                   data.pr_cache_nmiss_pcpu += cc->cc_misses;
                                   data.pr_cache_nhit_pcpu += cc->cc_hits;
                           }
                   } else {
                           data.pr_cache_meta_size = 0;
                           data.pr_cache_nfull = 0;
                           data.pr_cache_npartial = 0;
                           data.pr_cache_nempty = 0;
                           data.pr_cache_ncontended = 0;
                           data.pr_cache_nmiss_global = 0;
                           data.pr_cache_nhit_global = 0;
                   }
   
                   error = sysctl_copyout(l, &data, oldp, sizeof(data));
                   if (error)
                           break;
                   written += sizeof(data);
                   oldp = (char *)oldp + sizeof(data);
           }
   
           *oldlenp = written;
           return error;
   }
   
   SYSCTL_SETUP(sysctl_pool_setup, "sysctl kern.pool setup")
   {
           const struct sysctlnode *rnode = NULL;
   
           sysctl_createv(clog, 0, NULL, &rnode,
                          CTLFLAG_PERMANENT,
                          CTLTYPE_STRUCT, "pool",
                          SYSCTL_DESCR("Get pool statistics"),
                          pool_sysctl, 0, NULL, 0,
                          CTL_KERN, CTL_CREATE, CTL_EOL);
   }

Legend:
Removed from v.1.202  
changed lines
  Added in v.1.203.2.1

CVSweb <webmaster@jp.NetBSD.org>