From owner-svn-src-head@freebsd.org Sat Nov 7 20:41:00 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A3D50A28EE4; Sat, 7 Nov 2015 20:41:00 +0000 (UTC) (envelope-from cse.cem@gmail.com) Received: from mail-yk0-f169.google.com (mail-yk0-f169.google.com [209.85.160.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 5DF291FF8; Sat, 7 Nov 2015 20:40:59 +0000 (UTC) (envelope-from cse.cem@gmail.com) Received: by ykek133 with SMTP id k133so217950998yke.2; Sat, 07 Nov 2015 12:40:59 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=mime-version:reply-to:in-reply-to:references:date:message-id :subject:from:to:cc:content-type:content-transfer-encoding; bh=o4hgo32yJGt9P//U7ARNLsKPceaTudeAFrjYhWpjKoU=; b=l+ckdL+25jW5aWjmWR2W0hDsnWvSkqupgtLPh4iKwmKz5Mn+MODNzoxKGhcx9khZZQ n4xI4qJIxCf4F5yG8hfJNbea6q1wV/0K5th11WnDw4F3We49/WvC1BxhmoRtUoy1yL/w C0GNjywd3X6UK98GalXzgjajwtr1i+8Uif3C1681doQswlRomLIP6qISek8tDueGgC4p Fb1ZB/8TmZZoLHiUyfmhGZLbcUZC5l87K667iq9PUWeIN/INi4mhhNr3APPyJIeBdBoG Gpg+YncoNTNYZKvp3KNBRGspkHOK7O/jZSSmH7iESlWrEBqwCcUFegdLTtXF2V7r49jd b7Bg== X-Received: by 10.129.92.68 with SMTP id q65mr18576395ywb.239.1446918653573; Sat, 07 Nov 2015 09:50:53 -0800 (PST) Received: from mail-yk0-f175.google.com (mail-yk0-f175.google.com. [209.85.160.175]) by smtp.gmail.com with ESMTPSA id t132sm4460059ywa.42.2015.11.07.09.50.52 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 07 Nov 2015 09:50:53 -0800 (PST) Received: by ykdv3 with SMTP id v3so125893152ykd.0; Sat, 07 Nov 2015 09:50:52 -0800 (PST) MIME-Version: 1.0 X-Received: by 10.129.2.193 with SMTP id 184mr15522122ywc.94.1446918652931; Sat, 07 Nov 2015 09:50:52 -0800 (PST) Reply-To: cem@FreeBSD.org Received: by 10.37.17.2 with HTTP; Sat, 7 Nov 2015 09:50:52 -0800 (PST) In-Reply-To: References: <201511070143.tA71h13k038232@repo.freebsd.org> Date: Sat, 7 Nov 2015 09:50:52 -0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: svn commit: r290475 - in head: share/man/man9 sys/kern sys/sys From: Conrad Meyer To: Svatopluk Kraus Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 07 Nov 2015 20:41:00 -0000 Sorry about that =E2=80=94 Ravi and I missed this. I see Konstantin has si= nce fixed it (thanks!). There is also the intptr_t in SYSCTL_HANDLER_ARGS and oid_arg2 in struct sysctl_oid remaining. Best, Conrad On Sat, Nov 7, 2015 at 12:37 AM, Svatopluk Kraus wrote: > You broke buildkernel. The following patch helps: > > diff --git a/sys/sys/sysctl.h b/sys/sys/sysctl.h > index 950e712..a34c890 100644 > --- a/sys/sys/sysctl.h > +++ b/sys/sys/sysctl.h > @@ -37,6 +37,7 @@ > #define _SYS_SYSCTL_H_ > > #include > +#include > > struct thread; > /* > @@ -949,7 +950,7 @@ extern char kern_ident[]; > /* Dynamic oid handling */ > struct sysctl_oid *sysctl_add_oid(struct sysctl_ctx_list *clist, > struct sysctl_oid_list *parent, int nbr, const char *name, int kind= , > - void *arg1, intptr_t arg2, int (*handler)(SYSCTL_HANDLER_ARGS), > + void *arg1, intmax_t arg2, int (*handler)(SYSCTL_HANDLER_ARGS), > const char *fmt, const char *descr); > int sysctl_remove_name(struct sysctl_oid *parent, const char *name, int = del, > int recurse); > > > > > On Sat, Nov 7, 2015 at 2:43 AM, Conrad E. Meyer wrote: >> Author: cem >> Date: Sat Nov 7 01:43:01 2015 >> New Revision: 290475 >> URL: https://svnweb.freebsd.org/changeset/base/290475 >> >> Log: >> Round out SYSCTL macros to the full set of fixed-width types >> >> Add S8, S16, S32, and U32 types; add SYSCTL*() macros for them, as we= ll >> as for the existing 64-bit types. (While SYSCTL*QUAD and UQUAD macros >> already exist, they do not take the same sort of 'val' parameter that >> the other macros do.) >> >> Clean up the documented "types" in the sysctl.9 document. (These are >> macros and thus not real types, but the manual page documents intent.) >> >> The sysctl_add_oid(9) arg2 has been bumped from intptr_t to intmax_t t= o >> accommodate 64-bit types on 32-bit pointer architectures. >> >> This is just the kernel support piece; the userspace sysctl(1) support >> will follow in a later patch. >> >> Submitted by: Ravi Pokala >> Reviewed by: cem >> Relnotes: no >> Sponsored by: Panasas >> Differential Revision: https://reviews.freebsd.org/D4091 >> >> Modified: >> head/share/man/man9/Makefile >> head/share/man/man9/sysctl.9 >> head/share/man/man9/sysctl_add_oid.9 >> head/sys/kern/kern_sysctl.c >> head/sys/sys/sysctl.h >> >> Modified: head/share/man/man9/Makefile >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D >> --- head/share/man/man9/Makefile Sat Nov 7 00:51:51 2015 = (r290474) >> +++ head/share/man/man9/Makefile Sat Nov 7 01:43:01 2015 = (r290475) >> @@ -1631,10 +1631,16 @@ MLINKS+=3Dsysctl.9 SYSCTL_DECL.9 \ >> sysctl.9 SYSCTL_ADD_PROC.9 \ >> sysctl.9 SYSCTL_ADD_QUAD.9 \ >> sysctl.9 SYSCTL_ADD_ROOT_NODE.9 \ >> + sysctl.9 SYSCTL_ADD_S8.9 \ >> + sysctl.9 SYSCTL_ADD_S16.9 \ >> + sysctl.9 SYSCTL_ADD_S32.9 \ >> + sysctl.9 SYSCTL_ADD_S64.9 \ >> sysctl.9 SYSCTL_ADD_STRING.9 \ >> sysctl.9 SYSCTL_ADD_STRUCT.9 \ >> sysctl.9 SYSCTL_ADD_U8.9 \ >> sysctl.9 SYSCTL_ADD_U16.9 \ >> + sysctl.9 SYSCTL_ADD_U32.9 \ >> + sysctl.9 SYSCTL_ADD_U64.9 \ >> sysctl.9 SYSCTL_ADD_UAUTO.9 \ >> sysctl.9 SYSCTL_ADD_UINT.9 \ >> sysctl.9 SYSCTL_ADD_ULONG.9 \ >> @@ -1650,10 +1656,16 @@ MLINKS+=3Dsysctl.9 SYSCTL_DECL.9 \ >> sysctl.9 SYSCTL_PROC.9 \ >> sysctl.9 SYSCTL_QUAD.9 \ >> sysctl.9 SYSCTL_ROOT_NODE.9 \ >> + sysctl.9 SYSCTL_S8.9 \ >> + sysctl.9 SYSCTL_S16.9 \ >> + sysctl.9 SYSCTL_S32.9 \ >> + sysctl.9 SYSCTL_S64.9 \ >> sysctl.9 SYSCTL_STRING.9 \ >> sysctl.9 SYSCTL_STRUCT.9 \ >> sysctl.9 SYSCTL_U8.9 \ >> sysctl.9 SYSCTL_U16.9 \ >> + sysctl.9 SYSCTL_U32.9 \ >> + sysctl.9 SYSCTL_U64.9 \ >> sysctl.9 SYSCTL_UINT.9 \ >> sysctl.9 SYSCTL_ULONG.9 \ >> sysctl.9 SYSCTL_UQUAD.9 >> >> Modified: head/share/man/man9/sysctl.9 >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D >> --- head/share/man/man9/sysctl.9 Sat Nov 7 00:51:51 2015 = (r290474) >> +++ head/share/man/man9/sysctl.9 Sat Nov 7 01:43:01 2015 = (r290475) >> @@ -37,10 +37,16 @@ >> .Nm SYSCTL_ADD_PROC , >> .Nm SYSCTL_ADD_QUAD , >> .Nm SYSCTL_ADD_ROOT_NODE , >> +.Nm SYSCTL_ADD_S8 , >> +.Nm SYSCTL_ADD_S16 , >> +.Nm SYSCTL_ADD_S32 , >> +.Nm SYSCTL_ADD_S64 , >> .Nm SYSCTL_ADD_STRING , >> .Nm SYSCTL_ADD_STRUCT , >> .Nm SYSCTL_ADD_U8 , >> .Nm SYSCTL_ADD_U16 , >> +.Nm SYSCTL_ADD_U32 , >> +.Nm SYSCTL_ADD_U64 , >> .Nm SYSCTL_ADD_UAUTO , >> .Nm SYSCTL_ADD_UINT , >> .Nm SYSCTL_ADD_ULONG , >> @@ -56,10 +62,16 @@ >> .Nm SYSCTL_PROC , >> .Nm SYSCTL_QUAD , >> .Nm SYSCTL_ROOT_NODE , >> +.Nm SYSCTL_S8 , >> +.Nm SYSCTL_S16 , >> +.Nm SYSCTL_S32 , >> +.Nm SYSCTL_S64 , >> .Nm SYSCTL_STRING , >> .Nm SYSCTL_STRUCT , >> .Nm SYSCTL_U8 , >> .Nm SYSCTL_U16 , >> +.Nm SYSCTL_U32 , >> +.Nm SYSCTL_U64 , >> .Nm SYSCTL_UINT , >> .Nm SYSCTL_ULONG , >> .Nm SYSCTL_UQUAD >> @@ -76,7 +88,7 @@ >> .Fa "const char *name" >> .Fa "int ctlflags" >> .Fa "int *ptr" >> -.Fa "intptr_t val" >> +.Fa "int val" >> .Fa "const char *descr" >> .Fc >> .Ft struct sysctl_oid * >> @@ -131,7 +143,7 @@ >> .Fa "int number" >> .Fa "const char *name" >> .Fa "int ctlflags" >> -.Fa "quad_t *ptr" >> +.Fa "int64_t *ptr" >> .Fa "const char *descr" >> .Fc >> .Ft struct sysctl_oid * >> @@ -144,6 +156,50 @@ >> .Fa "const char *descr" >> .Fc >> .Ft struct sysctl_oid * >> +.Fo SYSCTL_ADD_S8 >> +.Fa "struct sysctl_ctx_list *ctx" >> +.Fa "struct sysctl_oid_list *parent" >> +.Fa "int number" >> +.Fa "const char *name" >> +.Fa "int ctlflags" >> +.Fa "int8_t *ptr" >> +.Fa "int8_t val" >> +.Fa "const char *descr" >> +.Fc >> +.Ft struct sysctl_oid * >> +.Fo SYSCTL_ADD_S16 >> +.Fa "struct sysctl_ctx_list *ctx" >> +.Fa "struct sysctl_oid_list *parent" >> +.Fa "int number" >> +.Fa "const char *name" >> +.Fa "int ctlflags" >> +.Fa "int16_t *ptr" >> +.Fa "int16_t val" >> +.Fa "const char *descr" >> +.Fc >> +.Ft struct sysctl_oid * >> +.Fo SYSCTL_ADD_S32 >> +.Fa "struct sysctl_ctx_list *ctx" >> +.Fa "struct sysctl_oid_list *parent" >> +.Fa "int number" >> +.Fa "const char *name" >> +.Fa "int ctlflags" >> +.Fa "int32_t *ptr" >> +.Fa "int32_t val" >> +.Fa "const char *descr" >> +.Fc >> +.Ft struct sysctl_oid * >> +.Fo SYSCTL_ADD_S64 >> +.Fa "struct sysctl_ctx_list *ctx" >> +.Fa "struct sysctl_oid_list *parent" >> +.Fa "int number" >> +.Fa "const char *name" >> +.Fa "int ctlflags" >> +.Fa "int64_t *ptr" >> +.Fa "int64_t val" >> +.Fa "const char *descr" >> +.Fc >> +.Ft struct sysctl_oid * >> .Fo SYSCTL_ADD_STRING >> .Fa "struct sysctl_ctx_list *ctx" >> .Fa "struct sysctl_oid_list *parent" >> @@ -172,8 +228,8 @@ >> .Fa "int number" >> .Fa "const char *name" >> .Fa "int ctlflags" >> -.Fa "unsigned int *ptr" >> -.Fa "intptr_t val" >> +.Fa "uint8_t *ptr" >> +.Fa "uint8_t val" >> .Fa "const char *descr" >> .Fc >> .Ft struct sysctl_oid * >> @@ -183,8 +239,30 @@ >> .Fa "int number" >> .Fa "const char *name" >> .Fa "int ctlflags" >> -.Fa "unsigned int *ptr" >> -.Fa "intptr_t val" >> +.Fa "uint16_t *ptr" >> +.Fa "uint16_t val" >> +.Fa "const char *descr" >> +.Fc >> +.Ft struct sysctl_oid * >> +.Fo SYSCTL_ADD_U32 >> +.Fa "struct sysctl_ctx_list *ctx" >> +.Fa "struct sysctl_oid_list *parent" >> +.Fa "int number" >> +.Fa "const char *name" >> +.Fa "int ctlflags" >> +.Fa "uint32_t *ptr" >> +.Fa "uint32_t val" >> +.Fa "const char *descr" >> +.Fc >> +.Ft struct sysctl_oid * >> +.Fo SYSCTL_ADD_U64 >> +.Fa "struct sysctl_ctx_list *ctx" >> +.Fa "struct sysctl_oid_list *parent" >> +.Fa "int number" >> +.Fa "const char *name" >> +.Fa "int ctlflags" >> +.Fa "uint64_t *ptr" >> +.Fa "uint64_t val" >> .Fa "const char *descr" >> .Fc >> .Ft struct sysctl_oid * >> @@ -195,7 +273,7 @@ >> .Fa "const char *name" >> .Fa "int ctlflags" >> .Fa "unsigned int *ptr" >> -.Fa "intptr_t val" >> +.Fa "unsigned int val" >> .Fa "const char *descr" >> .Fc >> .Ft struct sysctl_oid * >> @@ -215,7 +293,7 @@ >> .Fa "int number" >> .Fa "const char *name" >> .Fa "int ctlflags" >> -.Fa "u_quad_t *ptr" >> +.Fa "uint64_t *ptr" >> .Fa "const char *descr" >> .Fc >> .Ft struct sysctl_oid * >> @@ -251,11 +329,17 @@ >> .Fn SYSCTL_OPAQUE parent number name ctlflags ptr len format descr >> .Fn SYSCTL_PROC parent number name ctlflags arg1 arg2 handler format de= scr >> .Fn SYSCTL_QUAD parent number name ctlflags ptr val descr >> +.Fn SYSCTL_ROOT_NODE number name ctlflags handler descr >> +.Fn SYSCTL_S8 parent number name ctlflags ptr val descr >> +.Fn SYSCTL_S16 parent number name ctlflags ptr val descr >> +.Fn SYSCTL_S32 parent number name ctlflags ptr val descr >> +.Fn SYSCTL_S64 parent number name ctlflags ptr val descr >> .Fn SYSCTL_STRING parent number name ctlflags arg len descr >> .Fn SYSCTL_STRUCT parent number name ctlflags ptr struct_type descr >> -.Fn SYSCTL_ROOT_NODE number name ctlflags handler descr >> .Fn SYSCTL_U8 parent number name ctlflags ptr val descr >> .Fn SYSCTL_U16 parent number name ctlflags ptr val descr >> +.Fn SYSCTL_U32 parent number name ctlflags ptr val descr >> +.Fn SYSCTL_U64 parent number name ctlflags ptr val descr >> .Fn SYSCTL_UINT parent number name ctlflags ptr val descr >> .Fn SYSCTL_ULONG parent number name ctlflags ptr val descr >> .Fn SYSCTL_UQUAD parent number name ctlflags ptr val descr >> @@ -439,10 +523,16 @@ Static sysctls are declared using one of >> .Fn SYSCTL_PROC , >> .Fn SYSCTL_QUAD , >> .Fn SYSCTL_ROOT_NODE , >> +.Fn SYSCTL_S8 , >> +.Fn SYSCTL_S16 , >> +.Fn SYSCTL_S32 , >> +.Fn SYSCTL_S64 , >> .Fn SYSCTL_STRING , >> .Fn SYSCTL_STRUCT , >> .Fn SYSCTL_U8 , >> .Fn SYSCTL_U16 , >> +.Fn SYSCTL_U32 , >> +.Fn SYSCTL_U64 , >> .Fn SYSCTL_UINT , >> .Fn SYSCTL_ULONG >> or >> @@ -457,10 +547,16 @@ Dynamic nodes are created using one of t >> .Fn SYSCTL_ADD_PROC , >> .Fn SYSCTL_ADD_QUAD , >> .Fn SYSCTL_ADD_ROOT_NODE , >> +.Fn SYSCTL_ADD_S8 , >> +.Fn SYSCTL_ADD_S16 , >> +.Fn SYSCTL_ADD_S32 , >> +.Fn SYSCTL_ADD_S64 , >> .Fn SYSCTL_ADD_STRING , >> .Fn SYSCTL_ADD_STRUCT , >> .Fn SYSCTL_ADD_U8 , >> .Fn SYSCTL_ADD_U16 , >> +.Fn SYSCTL_ADD_U32 , >> +.Fn SYSCTL_ADD_U64 , >> .Fn SYSCTL_ADD_UAUTO , >> .Fn SYSCTL_ADD_UINT , >> .Fn SYSCTL_ADD_ULONG , >> @@ -484,6 +580,12 @@ This is a node intended to be a parent f >> This is a signed integer. >> .It Dv CTLTYPE_STRING >> This is a nul-terminated string stored in a character array. >> +.It Dv CTLTYPE_S8 >> +This is an 8-bit signed integer. >> +.It Dv CTLTYPE_S16 >> +This is a 16-bit signed integer. >> +.It Dv CTLTYPE_S32 >> +This is a 32-bit signed integer. >> .It Dv CTLTYPE_S64 >> This is a 64-bit signed integer. >> .It Dv CTLTYPE_OPAQUE >> @@ -495,14 +597,16 @@ Alias for >> This is an 8-bit unsigned integer. >> .It Dv CTLTYPE_U16 >> This is a 16-bit unsigned integer. >> +.It Dv CTLTYPE_U32 >> +This is a 32-bit unsigned integer. >> +.It Dv CTLTYPE_U64 >> +This is a 64-bit unsigned integer. >> .It Dv CTLTYPE_UINT >> This is an unsigned integer. >> .It Dv CTLTYPE_LONG >> This is a signed long. >> .It Dv CTLTYPE_ULONG >> This is an unsigned long. >> -.It Dv CTLTYPE_U64 >> -This is a 64-bit unsigned integer. >> .El >> .Pp >> All sysctl types except for new node declarations require one of the fo= llowing >> >> Modified: head/share/man/man9/sysctl_add_oid.9 >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D >> --- head/share/man/man9/sysctl_add_oid.9 Sat Nov 7 00:51:51 2015= (r290474) >> +++ head/share/man/man9/sysctl_add_oid.9 Sat Nov 7 01:43:01 2015= (r290475) >> @@ -47,7 +47,7 @@ >> .Fa "const char *name" >> .Fa "int kind" >> .Fa "void *arg1" >> -.Fa "intptr_t arg2" >> +.Fa "intmax_t arg2" >> .Fa "int (*handler) (SYSCTL_HANDLER_ARGS)" >> .Fa "const char *format" >> .Fa "const char *descr" >> >> Modified: head/sys/kern/kern_sysctl.c >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D >> --- head/sys/kern/kern_sysctl.c Sat Nov 7 00:51:51 2015 (r290474= ) >> +++ head/sys/kern/kern_sysctl.c Sat Nov 7 01:43:01 2015 (r290475= ) >> @@ -643,7 +643,7 @@ sysctl_remove_oid_locked(struct sysctl_o >> */ >> struct sysctl_oid * >> sysctl_add_oid(struct sysctl_ctx_list *clist, struct sysctl_oid_list *p= arent, >> - int number, const char *name, int kind, void *arg1, intptr_t arg= 2, >> + int number, const char *name, int kind, void *arg1, intmax_t arg= 2, >> int (*handler)(SYSCTL_HANDLER_ARGS), const char *fmt, const char= *descr) >> { >> struct sysctl_oid *oidp; >> @@ -1192,6 +1192,38 @@ sysctl_handle_16(SYSCTL_HANDLER_ARGS) >> } >> >> /* >> + * Handle an int32_t, signed or unsigned. >> + * Two cases: >> + * a variable: point arg1 at it. >> + * a constant: pass it in arg2. >> + */ >> + >> +int >> +sysctl_handle_32(SYSCTL_HANDLER_ARGS) >> +{ >> + int32_t tmpout; >> + int error =3D 0; >> + >> + /* >> + * Attempt to get a coherent snapshot by making a copy of the da= ta. >> + */ >> + if (arg1) >> + tmpout =3D *(int32_t *)arg1; >> + else >> + tmpout =3D arg2; >> + error =3D SYSCTL_OUT(req, &tmpout, sizeof(tmpout)); >> + >> + if (error || !req->newptr) >> + return (error); >> + >> + if (!arg1) >> + error =3D EPERM; >> + else >> + error =3D SYSCTL_IN(req, arg1, sizeof(tmpout)); >> + return (error); >> +} >> + >> +/* >> * Handle an int, signed or unsigned. >> * Two cases: >> * a variable: point arg1 at it. >> >> Modified: head/sys/sys/sysctl.h >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D >> --- head/sys/sys/sysctl.h Sat Nov 7 00:51:51 2015 (r290474= ) >> +++ head/sys/sys/sysctl.h Sat Nov 7 01:43:01 2015 (r290475= ) >> @@ -75,6 +75,10 @@ struct ctlname { >> #define CTLTYPE_U64 9 /* name describes an unsigned 64= -bit number */ >> #define CTLTYPE_U8 0xa /* name describes an unsigned 8-= bit number */ >> #define CTLTYPE_U16 0xb /* name describes an unsigned 16= -bit number */ >> +#define CTLTYPE_S8 0xc /* name describes a signed 8-bit= number */ >> +#define CTLTYPE_S16 0xd /* name describes a signed 16-bi= t number */ >> +#define CTLTYPE_S32 0xe /* name describes a signed 32-bi= t number */ >> +#define CTLTYPE_U32 0xf /* name describes an unsigned 32= -bit number */ >> >> #define CTLFLAG_RD 0x80000000 /* Allow reads of variab= le */ >> #define CTLFLAG_WR 0x40000000 /* Allow writes to the v= ariable */ >> @@ -192,10 +196,11 @@ struct sysctl_oid { >> >> int sysctl_handle_8(SYSCTL_HANDLER_ARGS); >> int sysctl_handle_16(SYSCTL_HANDLER_ARGS); >> +int sysctl_handle_32(SYSCTL_HANDLER_ARGS); >> +int sysctl_handle_64(SYSCTL_HANDLER_ARGS); >> int sysctl_handle_int(SYSCTL_HANDLER_ARGS); >> int sysctl_msec_to_ticks(SYSCTL_HANDLER_ARGS); >> int sysctl_handle_long(SYSCTL_HANDLER_ARGS); >> -int sysctl_handle_64(SYSCTL_HANDLER_ARGS); >> int sysctl_handle_string(SYSCTL_HANDLER_ARGS); >> int sysctl_handle_opaque(SYSCTL_HANDLER_ARGS); >> int sysctl_handle_counter_u64(SYSCTL_HANDLER_ARGS); >> @@ -323,6 +328,26 @@ TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_e >> __arg, len, sysctl_handle_string, "A", __DESCR(descr)); = \ >> }) >> >> +/* Oid for a signed 8-bit int. If ptr is NULL, val is returned. */ >> +#define SYSCTL_NULL_S8_PTR ((unsigned *)NULL) >> +#define SYSCTL_S8(parent, nbr, name, access, ptr, val, descr) = \ >> + SYSCTL_OID(parent, nbr, name, \ >> + CTLTYPE_S8 | CTLFLAG_MPSAFE | (access), \ >> + ptr, val, sysctl_handle_8, "C", descr); \ >> + CTASSERT((((access) & CTLTYPE) =3D=3D 0 || \ >> + ((access) & SYSCTL_CT_ASSERT_MASK) =3D=3D CTLTYPE_S8) && \ >> + sizeof(int8_t) =3D=3D sizeof(*(ptr))) >> + >> +#define SYSCTL_ADD_S8(ctx, parent, nbr, name, access, ptr, val, = descr) \ >> +({ = \ >> + int8_t *__ptr =3D (ptr); = \ >> + CTASSERT(((access) & CTLTYPE) =3D=3D 0 || = \ >> + ((access) & SYSCTL_CT_ASSERT_MASK) =3D=3D CTLTYPE_S8); = \ >> + sysctl_add_oid(ctx, parent, nbr, name, = \ >> + CTLTYPE_S8 | CTLFLAG_MPSAFE | (access), = \ >> + __ptr, val, sysctl_handle_8, "C", __DESCR(descr)); \ >> +}) >> + >> /* Oid for an unsigned 8-bit int. If ptr is NULL, val is returned. */ >> #define SYSCTL_NULL_U8_PTR ((unsigned *)NULL) >> #define SYSCTL_U8(parent, nbr, name, access, ptr, val, descr) = \ >> @@ -343,6 +368,26 @@ TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_e >> __ptr, val, sysctl_handle_8, "CU", __DESCR(descr)); \ >> }) >> >> +/* Oid for a signed 16-bit int. If ptr is NULL, val is returned. */ >> +#define SYSCTL_NULL_S16_PTR ((unsigned *)NULL) >> +#define SYSCTL_S16(parent, nbr, name, access, ptr, val, descr) = \ >> + SYSCTL_OID(parent, nbr, name, \ >> + CTLTYPE_S16 | CTLFLAG_MPSAFE | (access), \ >> + ptr, val, sysctl_handle_16, "S", descr); \ >> + CTASSERT((((access) & CTLTYPE) =3D=3D 0 || \ >> + ((access) & SYSCTL_CT_ASSERT_MASK) =3D=3D CTLTYPE_S16) && \ >> + sizeof(int16_t) =3D=3D sizeof(*(ptr))) >> + >> +#define SYSCTL_ADD_S16(ctx, parent, nbr, name, access, ptr, val,= descr) \ >> +({ = \ >> + int16_t *__ptr =3D (ptr); = \ >> + CTASSERT(((access) & CTLTYPE) =3D=3D 0 || = \ >> + ((access) & SYSCTL_CT_ASSERT_MASK) =3D=3D CTLTYPE_S16); = \ >> + sysctl_add_oid(ctx, parent, nbr, name, = \ >> + CTLTYPE_S16 | CTLFLAG_MPSAFE | (access), = \ >> + __ptr, val, sysctl_handle_16, "S", __DESCR(descr)); \ >> +}) >> + >> /* Oid for an unsigned 16-bit int. If ptr is NULL, val is returned. */ >> #define SYSCTL_NULL_U16_PTR ((unsigned *)NULL) >> #define SYSCTL_U16(parent, nbr, name, access, ptr, val, descr) = \ >> @@ -355,7 +400,7 @@ TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_e >> >> #define SYSCTL_ADD_U16(ctx, parent, nbr, name, access, ptr, val,= descr) \ >> ({ = \ >> - uint16_t *__ptr =3D (ptr); = \ >> + uint16_t *__ptr =3D (ptr); = \ >> CTASSERT(((access) & CTLTYPE) =3D=3D 0 || = \ >> ((access) & SYSCTL_CT_ASSERT_MASK) =3D=3D CTLTYPE_U16); = \ >> sysctl_add_oid(ctx, parent, nbr, name, = \ >> @@ -363,6 +408,86 @@ TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_e >> __ptr, val, sysctl_handle_16, "SU", __DESCR(descr)); = \ >> }) >> >> +/* Oid for a signed 32-bit int. If ptr is NULL, val is returned. */ >> +#define SYSCTL_NULL_S32_PTR ((unsigned *)NULL) >> +#define SYSCTL_S32(parent, nbr, name, access, ptr, val, descr) = \ >> + SYSCTL_OID(parent, nbr, name, \ >> + CTLTYPE_S32 | CTLFLAG_MPSAFE | (access), \ >> + ptr, val, sysctl_handle_32, "I", descr); \ >> + CTASSERT((((access) & CTLTYPE) =3D=3D 0 || \ >> + ((access) & SYSCTL_CT_ASSERT_MASK) =3D=3D CTLTYPE_S32) && \ >> + sizeof(int32_t) =3D=3D sizeof(*(ptr))) >> + >> +#define SYSCTL_ADD_S32(ctx, parent, nbr, name, access, ptr, val,= descr) \ >> +({ = \ >> + int32_t *__ptr =3D (ptr); = \ >> + CTASSERT(((access) & CTLTYPE) =3D=3D 0 || = \ >> + ((access) & SYSCTL_CT_ASSERT_MASK) =3D=3D CTLTYPE_S32); = \ >> + sysctl_add_oid(ctx, parent, nbr, name, = \ >> + CTLTYPE_S32 | CTLFLAG_MPSAFE | (access), = \ >> + __ptr, val, sysctl_handle_32, "I", __DESCR(descr)); \ >> +}) >> + >> +/* Oid for an unsigned 32-bit int. If ptr is NULL, val is returned. */ >> +#define SYSCTL_NULL_U32_PTR ((unsigned *)NULL) >> +#define SYSCTL_U32(parent, nbr, name, access, ptr, val, descr) = \ >> + SYSCTL_OID(parent, nbr, name, \ >> + CTLTYPE_U32 | CTLFLAG_MPSAFE | (access), \ >> + ptr, val, sysctl_handle_32, "IU", descr); \ >> + CTASSERT((((access) & CTLTYPE) =3D=3D 0 || \ >> + ((access) & SYSCTL_CT_ASSERT_MASK) =3D=3D CTLTYPE_U32) && \ >> + sizeof(uint32_t) =3D=3D sizeof(*(ptr))) >> + >> +#define SYSCTL_ADD_U32(ctx, parent, nbr, name, access, ptr, val,= descr) \ >> +({ = \ >> + uint32_t *__ptr =3D (ptr); = \ >> + CTASSERT(((access) & CTLTYPE) =3D=3D 0 || = \ >> + ((access) & SYSCTL_CT_ASSERT_MASK) =3D=3D CTLTYPE_U32); = \ >> + sysctl_add_oid(ctx, parent, nbr, name, = \ >> + CTLTYPE_U32 | CTLFLAG_MPSAFE | (access), = \ >> + __ptr, val, sysctl_handle_32, "IU", __DESCR(descr)); = \ >> +}) >> + >> +/* Oid for a signed 64-bit int. If ptr is NULL, val is returned. */ >> +#define SYSCTL_NULL_S64_PTR ((unsigned *)NULL) >> +#define SYSCTL_S64(parent, nbr, name, access, ptr, val, descr) = \ >> + SYSCTL_OID(parent, nbr, name, \ >> + CTLTYPE_S64 | CTLFLAG_MPSAFE | (access), \ >> + ptr, val, sysctl_handle_64, "Q", descr); \ >> + CTASSERT((((access) & CTLTYPE) =3D=3D 0 || \ >> + ((access) & SYSCTL_CT_ASSERT_MASK) =3D=3D CTLTYPE_S64) && \ >> + sizeof(int64_t) =3D=3D sizeof(*(ptr))) >> + >> +#define SYSCTL_ADD_S64(ctx, parent, nbr, name, access, ptr, val,= descr) \ >> +({ = \ >> + int64_t *__ptr =3D (ptr); = \ >> + CTASSERT(((access) & CTLTYPE) =3D=3D 0 || = \ >> + ((access) & SYSCTL_CT_ASSERT_MASK) =3D=3D CTLTYPE_S64); = \ >> + sysctl_add_oid(ctx, parent, nbr, name, = \ >> + CTLTYPE_S64 | CTLFLAG_MPSAFE | (access), = \ >> + __ptr, val, sysctl_handle_64, "Q", __DESCR(descr)); \ >> +}) >> + >> +/* Oid for an unsigned 64-bit int. If ptr is NULL, val is returned. */ >> +#define SYSCTL_NULL_U64_PTR ((unsigned *)NULL) >> +#define SYSCTL_U64(parent, nbr, name, access, ptr, val, descr) = \ >> + SYSCTL_OID(parent, nbr, name, \ >> + CTLTYPE_U64 | CTLFLAG_MPSAFE | (access), \ >> + ptr, val, sysctl_handle_64, "QU", descr); \ >> + CTASSERT((((access) & CTLTYPE) =3D=3D 0 || \ >> + ((access) & SYSCTL_CT_ASSERT_MASK) =3D=3D CTLTYPE_U64) && \ >> + sizeof(uint64_t) =3D=3D sizeof(*(ptr))) >> + >> +#define SYSCTL_ADD_U64(ctx, parent, nbr, name, access, ptr, val,= descr) \ >> +({ = \ >> + uint64_t *__ptr =3D (ptr); = \ >> + CTASSERT(((access) & CTLTYPE) =3D=3D 0 || = \ >> + ((access) & SYSCTL_CT_ASSERT_MASK) =3D=3D CTLTYPE_U64); = \ >> + sysctl_add_oid(ctx, parent, nbr, name, = \ >> + CTLTYPE_U64 | CTLFLAG_MPSAFE | (access), = \ >> + __ptr, val, sysctl_handle_64, "QU", __DESCR(descr)); = \ >> +}) >> + >> /* Oid for an int. If ptr is SYSCTL_NULL_INT_PTR, val is returned. */ >> #define SYSCTL_NULL_INT_PTR ((int *)NULL) >> #define SYSCTL_INT(parent, nbr, name, access, ptr, val, descr) = \ >>