[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.201.2.1 and 1.202

version 1.201.2.1, 2014/08/10 06:55:58 version 1.202, 2014/04/26 16:30:05
Line 1 
Line 1 
 /*      $NetBSD$        */  /*      $NetBSD$        */
   
 /*-  /*-
  * Copyright (c) 1997, 1999, 2000, 2002, 2007, 2008, 2010, 2014   * Copyright (c) 1997, 1999, 2000, 2002, 2007, 2008, 2010
  *     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 2752  print:
Line 2751  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.201.2.1  
changed lines
  Added in v.1.202

CVSweb <webmaster@jp.NetBSD.org>