From owner-freebsd-bugs Wed May 24 20:50:22 2000 Delivered-To: freebsd-bugs@freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.ORG [204.216.27.21]) by hub.freebsd.org (Postfix) with ESMTP id D632837BA56 for ; Wed, 24 May 2000 20:50:01 -0700 (PDT) (envelope-from gnats@FreeBSD.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.9.3/8.9.2) id UAA59937; Wed, 24 May 2000 20:50:01 -0700 (PDT) (envelope-from gnats@FreeBSD.org) Date: Wed, 24 May 2000 20:50:01 -0700 (PDT) Message-Id: <200005250350.UAA59937@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org Cc: From: Kelly Yancey Subject: Re: kern/15251: patch to add unsigned support to sysctl Reply-To: Kelly Yancey Sender: owner-freebsd-bugs@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org The following reply was made to PR kern/15251; it has been noted by GNATS. From: Kelly Yancey To: freebsd-gnats-submit@freebsd.org Cc: Subject: Re: kern/15251: patch to add unsigned support to sysctl Date: Wed, 24 May 2000 23:41:29 -0400 (EDT) Here is the same patchset, diffed from -current, broken into bite-size pieces: Patch-aa is the necessary kernel change to support unsigned sysctl variables (against sys/sys/sysctl.h). Patch-ab makes sysctl(8) understand how to display unsigned sysctl variables (against src/sbin/sysctl/sysctl.c). Patches ac, ad, and ae change sysctl definitions in various parts of the kernel to use the new unsigned types where appropriate. Surely there are more, but this is a start. These MUST have patch-aa applied first and SHOULD have patch-ab applied first. These patches do not include the fix for displaying dev_t as unsigned (which was in the original patchset) since it would appear that this is best left to a later commit. Other than that, all of the original patchset notes apply this these patches too. These should be easy to backport to RELENG_4 when the time comes as it appears the code touched by these patches doesn't change much (the original patches were against 3.x and applied cleanly to 5-CURRENT). Kelly # This is a shell archive. Save it in a file, remove anything before # this line, and then unpack it by entering "sh file". Note, it may # create directories; files and directories will be owned by you and # have default permissions. # # This archive contains: # # patch-aa # patch-ab # patch-ac # patch-ad # patch-ae # echo x - patch-aa sed 's/^X//' >patch-aa << 'END-of-patch-aa' XIndex: sbin/sysctl/sysctl.c X=================================================================== XRCS file: /home/cvs/src/sbin/sysctl/sysctl.c,v Xretrieving revision 1.25 Xdiff -u -r1.25 sysctl.c X--- sbin/sysctl/sysctl.c 1999/11/22 08:43:00 1.25 X+++ sbin/sysctl/sysctl.c 2000/05/25 01:33:28 X@@ -392,9 +392,13 @@ X case 'I': X if (!nflag) X printf("%s: ", name); X+ fmt++; X val = ""; X while (len >= sizeof(int)) { X- printf("%s%d", val, *(int *)p); X+ if(*fmt == 'U') X+ printf("%s%u", val, *(unsigned int *)p); X+ else X+ printf("%s%d", val, *(int *)p); X val = " "; X len -= sizeof (int); X p += sizeof (int); X@@ -404,7 +408,11 @@ X case 'L': X if (!nflag) X printf("%s: ", name); X- printf("%ld", *(long *)p); X+ fmt++; X+ if(*fmt == 'U') X+ printf("%lu", *(unsigned long *)p); X+ else X+ printf("%ld", *(long *)p); X return (0); X X case 'P': END-of-patch-aa echo x - patch-ab sed 's/^X//' >patch-ab << 'END-of-patch-ab' XIndex: sys/sys/sysctl.h X=================================================================== XRCS file: /home/cvs/src/sys/sys/sysctl.h,v Xretrieving revision 1.82 Xdiff -u -r1.82 sysctl.h X--- sys/sys/sysctl.h 2000/05/23 20:39:14 1.82 X+++ sys/sys/sysctl.h 2000/05/25 01:27:51 X@@ -173,10 +173,20 @@ X SYSCTL_OID(parent, nbr, name, CTLTYPE_INT|access, \ X ptr, val, sysctl_handle_int, "I", descr) X X+/* Oid for an unsigned int. If ptr is NULL, val is returned. */ X+#define SYSCTL_UINT(parent, nbr, name, access, ptr, val, descr) \ X+ SYSCTL_OID(parent, nbr, name, CTLTYPE_INT|access, \ X+ ptr, val, sysctl_handle_int, "IU", descr) X+ X /* Oid for a long. The pointer must be non NULL. */ X #define SYSCTL_LONG(parent, nbr, name, access, ptr, descr) \ X SYSCTL_OID(parent, nbr, name, CTLTYPE_INT|access, \ X ptr, 0, sysctl_handle_long, "L", descr) X+ X+/* Oid for a long. The pointer must be non NULL. */ X+#define SYSCTL_ULONG(parent, nbr, name, access, ptr, descr) \ X+ SYSCTL_OID(parent, nbr, name, CTLTYPE_INT|access, \ X+ ptr, 0, sysctl_handle_long, "LU", descr) X X /* Oid for an opaque object. Specified by a pointer and a length. */ X #define SYSCTL_OPAQUE(parent, nbr, name, access, ptr, len, fmt, descr) \ END-of-patch-ab echo x - patch-ac sed 's/^X//' >patch-ac << 'END-of-patch-ac' XIndex: sys/vm/vm_meter.c X=================================================================== XRCS file: /home/cvs/src/sys/vm/vm_meter.c,v Xretrieving revision 1.36 Xdiff -u -r1.36 vm_meter.c X--- sys/vm/vm_meter.c 2000/03/27 20:41:15 1.36 X+++ sys/vm/vm_meter.c 2000/05/25 02:05:19 X@@ -104,21 +104,21 @@ X wakeup(&proc0); X } X X-SYSCTL_INT(_vm, VM_V_FREE_MIN, v_free_min, X+SYSCTL_UINT(_vm, VM_V_FREE_MIN, v_free_min, X CTLFLAG_RW, &cnt.v_free_min, 0, ""); X-SYSCTL_INT(_vm, VM_V_FREE_TARGET, v_free_target, X+SYSCTL_UINT(_vm, VM_V_FREE_TARGET, v_free_target, X CTLFLAG_RW, &cnt.v_free_target, 0, ""); X-SYSCTL_INT(_vm, VM_V_FREE_RESERVED, v_free_reserved, X+SYSCTL_UINT(_vm, VM_V_FREE_RESERVED, v_free_reserved, X CTLFLAG_RW, &cnt.v_free_reserved, 0, ""); X-SYSCTL_INT(_vm, VM_V_INACTIVE_TARGET, v_inactive_target, X+SYSCTL_UINT(_vm, VM_V_INACTIVE_TARGET, v_inactive_target, X CTLFLAG_RW, &cnt.v_inactive_target, 0, ""); X-SYSCTL_INT(_vm, VM_V_CACHE_MIN, v_cache_min, X+SYSCTL_UINT(_vm, VM_V_CACHE_MIN, v_cache_min, X CTLFLAG_RW, &cnt.v_cache_min, 0, ""); X-SYSCTL_INT(_vm, VM_V_CACHE_MAX, v_cache_max, X+SYSCTL_UINT(_vm, VM_V_CACHE_MAX, v_cache_max, X CTLFLAG_RW, &cnt.v_cache_max, 0, ""); X-SYSCTL_INT(_vm, VM_V_PAGEOUT_FREE_MIN, v_pageout_free_min, X+SYSCTL_UINT(_vm, VM_V_PAGEOUT_FREE_MIN, v_pageout_free_min, X CTLFLAG_RW, &cnt.v_pageout_free_min, 0, ""); X-SYSCTL_INT(_vm, OID_AUTO, v_free_severe, X+SYSCTL_UINT(_vm, OID_AUTO, v_free_severe, X CTLFLAG_RW, &cnt.v_free_severe, 0, ""); X X SYSCTL_STRUCT(_vm, VM_LOADAVG, loadavg, CTLFLAG_RD, X@@ -229,87 +229,87 @@ X SYSCTL_NODE(_vm_stats, OID_AUTO, sys, CTLFLAG_RW, 0, "VM meter sys stats"); X SYSCTL_NODE(_vm_stats, OID_AUTO, vm, CTLFLAG_RW, 0, "VM meter vm stats"); X SYSCTL_NODE(_vm_stats, OID_AUTO, misc, CTLFLAG_RW, 0, "VM meter misc stats"); X-SYSCTL_INT(_vm_stats_sys, OID_AUTO, X+SYSCTL_UINT(_vm_stats_sys, OID_AUTO, X v_swtch, CTLFLAG_RD, &cnt.v_swtch, 0, "Context switches"); X-SYSCTL_INT(_vm_stats_sys, OID_AUTO, X+SYSCTL_UINT(_vm_stats_sys, OID_AUTO, X v_trap, CTLFLAG_RD, &cnt.v_trap, 0, "Traps"); X-SYSCTL_INT(_vm_stats_sys, OID_AUTO, X+SYSCTL_UINT(_vm_stats_sys, OID_AUTO, X v_syscall, CTLFLAG_RD, &cnt.v_syscall, 0, "Syscalls"); X-SYSCTL_INT(_vm_stats_sys, OID_AUTO, v_intr, CTLFLAG_RD, X+SYSCTL_UINT(_vm_stats_sys, OID_AUTO, v_intr, CTLFLAG_RD, X &cnt.v_intr, 0, "Hardware interrupts"); X-SYSCTL_INT(_vm_stats_sys, OID_AUTO, v_soft, CTLFLAG_RD, X+SYSCTL_UINT(_vm_stats_sys, OID_AUTO, v_soft, CTLFLAG_RD, X &cnt.v_soft, 0, "Software interrupts"); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_vm_faults, CTLFLAG_RD, &cnt.v_vm_faults, 0, "VM faults"); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_cow_faults, CTLFLAG_RD, &cnt.v_cow_faults, 0, "COW faults"); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_cow_optim, CTLFLAG_RD, &cnt.v_cow_optim, 0, "Optimized COW faults"); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_zfod, CTLFLAG_RD, &cnt.v_zfod, 0, "Zero fill"); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_ozfod, CTLFLAG_RD, &cnt.v_ozfod, 0, "Optimized zero fill"); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_swapin, CTLFLAG_RD, &cnt.v_swapin, 0, "Swapin operations"); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_swapout, CTLFLAG_RD, &cnt.v_swapout, 0, "Swapout operations"); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_swappgsin, CTLFLAG_RD, &cnt.v_swappgsin, 0, "Swapin pages"); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_swappgsout, CTLFLAG_RD, &cnt.v_swappgsout, 0, "Swapout pages"); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_vnodein, CTLFLAG_RD, &cnt.v_vnodein, 0, "Vnodein operations"); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_vnodeout, CTLFLAG_RD, &cnt.v_vnodeout, 0, "Vnodeout operations"); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_vnodepgsin, CTLFLAG_RD, &cnt.v_vnodepgsin, 0, "Vnodein pages"); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_vnodepgsout, CTLFLAG_RD, &cnt.v_vnodepgsout, 0, "Vnodeout pages"); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_intrans, CTLFLAG_RD, &cnt.v_intrans, 0, "In transit page blocking"); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_reactivated, CTLFLAG_RD, &cnt.v_reactivated, 0, "Reactivated pages"); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_pdwakeups, CTLFLAG_RD, &cnt.v_pdwakeups, 0, "Pagedaemon wakeups"); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_pdpages, CTLFLAG_RD, &cnt.v_pdpages, 0, "Pagedaemon page scans"); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_dfree, CTLFLAG_RD, &cnt.v_dfree, 0, ""); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_pfree, CTLFLAG_RD, &cnt.v_pfree, 0, ""); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_tfree, CTLFLAG_RD, &cnt.v_tfree, 0, ""); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_page_size, CTLFLAG_RD, &cnt.v_page_size, 0, ""); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_page_count, CTLFLAG_RD, &cnt.v_page_count, 0, ""); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_free_reserved, CTLFLAG_RD, &cnt.v_free_reserved, 0, ""); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_free_target, CTLFLAG_RD, &cnt.v_free_target, 0, ""); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_free_min, CTLFLAG_RD, &cnt.v_free_min, 0, ""); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_free_count, CTLFLAG_RD, &cnt.v_free_count, 0, ""); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_wire_count, CTLFLAG_RD, &cnt.v_wire_count, 0, ""); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_active_count, CTLFLAG_RD, &cnt.v_active_count, 0, ""); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_inactive_target, CTLFLAG_RD, &cnt.v_inactive_target, 0, ""); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_inactive_count, CTLFLAG_RD, &cnt.v_inactive_count, 0, ""); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_cache_count, CTLFLAG_RD, &cnt.v_cache_count, 0, ""); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_cache_min, CTLFLAG_RD, &cnt.v_cache_min, 0, ""); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_cache_max, CTLFLAG_RD, &cnt.v_cache_max, 0, ""); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_pageout_free_min, CTLFLAG_RD, &cnt.v_pageout_free_min, 0, ""); X-SYSCTL_INT(_vm_stats_vm, OID_AUTO, X+SYSCTL_UINT(_vm_stats_vm, OID_AUTO, X v_interrupt_free_min, CTLFLAG_RD, &cnt.v_interrupt_free_min, 0, ""); X-SYSCTL_INT(_vm_stats_misc, OID_AUTO, X+SYSCTL_UINT(_vm_stats_misc, OID_AUTO, X zero_page_count, CTLFLAG_RD, &vm_page_zero_count, 0, ""); X #if 0 X SYSCTL_INT(_vm_stats_misc, OID_AUTO, END-of-patch-ac echo x - patch-ad sed 's/^X//' >patch-ad << 'END-of-patch-ad' XIndex: sys/kern/kern_exec.c X=================================================================== XRCS file: /home/cvs/src/sys/kern/kern_exec.c,v Xretrieving revision 1.111 Xdiff -u -r1.111 kern_exec.c X--- sys/kern/kern_exec.c 2000/04/30 18:51:41 1.111 X+++ sys/kern/kern_exec.c 2000/05/25 02:08:24 X@@ -65,11 +65,13 @@ X X static register_t *exec_copyout_strings __P((struct image_params *)); X X-static long ps_strings = PS_STRINGS; X-SYSCTL_LONG(_kern, KERN_PS_STRINGS, ps_strings, CTLFLAG_RD, &ps_strings, ""); X+/* XXX This should be vm_size_t. */ X+static u_long ps_strings = PS_STRINGS; X+SYSCTL_ULONG(_kern, KERN_PS_STRINGS, ps_strings, CTLFLAG_RD, &ps_strings, ""); X X-static long usrstack = USRSTACK; X-SYSCTL_LONG(_kern, KERN_USRSTACK, usrstack, CTLFLAG_RD, &usrstack, ""); X+/* XXX This should be vm_size_t. */ X+static u_long usrstack = USRSTACK; X+SYSCTL_ULONG(_kern, KERN_USRSTACK, usrstack, CTLFLAG_RD, &usrstack, ""); X X u_long ps_arg_cache_limit = PAGE_SIZE / 16; X SYSCTL_LONG(_kern, OID_AUTO, ps_arg_cache_limit, CTLFLAG_RW, END-of-patch-ad echo x - patch-ae sed 's/^X//' >patch-ae << 'END-of-patch-ae' XIndex: sys/kern/vfs_cache.c X=================================================================== XRCS file: /home/cvs/src/sys/kern/vfs_cache.c,v Xretrieving revision 1.45 Xdiff -u -r1.45 vfs_cache.c X--- sys/kern/vfs_cache.c 2000/05/23 20:37:18 1.45 X+++ sys/kern/vfs_cache.c 2000/05/25 02:10:04 X@@ -90,13 +90,13 @@ X static LIST_HEAD(nchashhead, struct namecache) *nchashtbl; /* Hash Table */ X static TAILQ_HEAD(, struct namecache) ncneg; /* Hash Table */ X static u_long nchash; /* size of hash table */ X-SYSCTL_INT(_debug, OID_AUTO, nchash, CTLFLAG_RD, &nchash, 0, ""); X+SYSCTL_UINT(_debug, OID_AUTO, nchash, CTLFLAG_RD, &nchash, 0, ""); X static u_long ncnegfactor = 16; /* ratio of negative entries */ X-SYSCTL_INT(_debug, OID_AUTO, ncnegfactor, CTLFLAG_RW, &ncnegfactor, 0, ""); X+SYSCTL_UINT(_debug, OID_AUTO, ncnegfactor, CTLFLAG_RW, &ncnegfactor, 0, ""); X static u_long numneg; /* number of cache entries allocated */ X-SYSCTL_INT(_debug, OID_AUTO, numneg, CTLFLAG_RD, &numneg, 0, ""); X+SYSCTL_UINT(_debug, OID_AUTO, numneg, CTLFLAG_RD, &numneg, 0, ""); X static u_long numcache; /* number of cache entries allocated */ X-SYSCTL_INT(_debug, OID_AUTO, numcache, CTLFLAG_RD, &numcache, 0, ""); X+SYSCTL_UINT(_debug, OID_AUTO, numcache, CTLFLAG_RD, &numcache, 0, ""); X struct nchstats nchstats; /* cache effectiveness statistics */ X X static int doingcache = 1; /* 1 => enable the cache */ X@@ -109,7 +109,7 @@ X */ X SYSCTL_NODE(_vfs, OID_AUTO, cache, CTLFLAG_RW, 0, "Name cache statistics"); X #define STATNODE(mode, name, var) \ X- SYSCTL_INT(_vfs_cache, OID_AUTO, name, mode, var, 0, ""); X+ SYSCTL_UINT(_vfs_cache, OID_AUTO, name, mode, var, 0, ""); X STATNODE(CTLFLAG_RD, numneg, &numneg); X STATNODE(CTLFLAG_RD, numcache, &numcache); X static u_long numcalls; STATNODE(CTLFLAG_RD, numcalls, &numcalls); END-of-patch-ae exit To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message