From owner-svn-src-head@freebsd.org Sat Nov 7 08:37:23 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 B2B6CA2899E; Sat, 7 Nov 2015 08:37:23 +0000 (UTC) (envelope-from onwahe@gmail.com) Received: from mail-io0-x230.google.com (mail-io0-x230.google.com [IPv6:2607:f8b0:4001:c06::230]) (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 79CCB1B39; Sat, 7 Nov 2015 08:37:23 +0000 (UTC) (envelope-from onwahe@gmail.com) Received: by iody8 with SMTP id y8so144247012iod.1; Sat, 07 Nov 2015 00:37:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=4mqB2pu+lbvD0IoL6AXvhzc61kW9+CI5s/NVFE4ZjSc=; b=Q9UORXMOfq10VwhlAj5Y5caJNix4bJTg17Bbm9vsm2AnNl3FFZq1w5csHoW8WHfWep 5rRYVUhUR0PR+odHJMUqCx3TB2Z6jNEbvK9ZsxMzN1t01otNQMKHuJ2AHItMaJKHI/gi nbw8+b5qBg6Xa/bjR36JEVyiAhe9/F6FsJ2/enI9acJQ+48Bo6YShh6mw9347IoDoR/b JbTv81hBlLFv1mph5X0EBsnxCXjxm3G0ro1fJtONXfOao9uDW/FawpG9rm3PohSi5zxm D7xfQmGTwOY1T+dLt4PRIyrxtWWORVCoJP36cqON15oadWq3ndzPG440hzGHdRySVA/9 FOww== MIME-Version: 1.0 X-Received: by 10.107.31.138 with SMTP id f132mr19192543iof.84.1446885442946; Sat, 07 Nov 2015 00:37:22 -0800 (PST) Received: by 10.64.173.228 with HTTP; Sat, 7 Nov 2015 00:37:22 -0800 (PST) In-Reply-To: <201511070143.tA71h13k038232@repo.freebsd.org> References: <201511070143.tA71h13k038232@repo.freebsd.org> Date: Sat, 7 Nov 2015 09:37:22 +0100 Message-ID: Subject: Re: svn commit: r290475 - in head: share/man/man9 sys/kern sys/sys From: Svatopluk Kraus To: "Conrad E. Meyer" Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset=UTF-8 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 08:37:23 -0000 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 well > 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 to > 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 > ============================================================================== > --- 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+=sysctl.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+=sysctl.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 > ============================================================================== > --- 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 descr > .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 following > > Modified: head/share/man/man9/sysctl_add_oid.9 > ============================================================================== > --- 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 > ============================================================================== > --- 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 *parent, > - int number, const char *name, int kind, void *arg1, intptr_t arg2, > + int number, const char *name, int kind, void *arg1, intmax_t arg2, > 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 = 0; > + > + /* > + * Attempt to get a coherent snapshot by making a copy of the data. > + */ > + if (arg1) > + tmpout = *(int32_t *)arg1; > + else > + tmpout = arg2; > + error = SYSCTL_OUT(req, &tmpout, sizeof(tmpout)); > + > + if (error || !req->newptr) > + return (error); > + > + if (!arg1) > + error = EPERM; > + else > + error = 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 > ============================================================================== > --- 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-bit number */ > +#define CTLTYPE_S32 0xe /* name describes a signed 32-bit number */ > +#define CTLTYPE_U32 0xf /* name describes an unsigned 32-bit number */ > > #define CTLFLAG_RD 0x80000000 /* Allow reads of variable */ > #define CTLFLAG_WR 0x40000000 /* Allow writes to the variable */ > @@ -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) == 0 || \ > + ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_S8) && \ > + sizeof(int8_t) == sizeof(*(ptr))) > + > +#define SYSCTL_ADD_S8(ctx, parent, nbr, name, access, ptr, val, descr) \ > +({ \ > + int8_t *__ptr = (ptr); \ > + CTASSERT(((access) & CTLTYPE) == 0 || \ > + ((access) & SYSCTL_CT_ASSERT_MASK) == 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) == 0 || \ > + ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_S16) && \ > + sizeof(int16_t) == sizeof(*(ptr))) > + > +#define SYSCTL_ADD_S16(ctx, parent, nbr, name, access, ptr, val, descr) \ > +({ \ > + int16_t *__ptr = (ptr); \ > + CTASSERT(((access) & CTLTYPE) == 0 || \ > + ((access) & SYSCTL_CT_ASSERT_MASK) == 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 = (ptr); \ > + uint16_t *__ptr = (ptr); \ > CTASSERT(((access) & CTLTYPE) == 0 || \ > ((access) & SYSCTL_CT_ASSERT_MASK) == 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) == 0 || \ > + ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_S32) && \ > + sizeof(int32_t) == sizeof(*(ptr))) > + > +#define SYSCTL_ADD_S32(ctx, parent, nbr, name, access, ptr, val, descr) \ > +({ \ > + int32_t *__ptr = (ptr); \ > + CTASSERT(((access) & CTLTYPE) == 0 || \ > + ((access) & SYSCTL_CT_ASSERT_MASK) == 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) == 0 || \ > + ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_U32) && \ > + sizeof(uint32_t) == sizeof(*(ptr))) > + > +#define SYSCTL_ADD_U32(ctx, parent, nbr, name, access, ptr, val, descr) \ > +({ \ > + uint32_t *__ptr = (ptr); \ > + CTASSERT(((access) & CTLTYPE) == 0 || \ > + ((access) & SYSCTL_CT_ASSERT_MASK) == 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) == 0 || \ > + ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_S64) && \ > + sizeof(int64_t) == sizeof(*(ptr))) > + > +#define SYSCTL_ADD_S64(ctx, parent, nbr, name, access, ptr, val, descr) \ > +({ \ > + int64_t *__ptr = (ptr); \ > + CTASSERT(((access) & CTLTYPE) == 0 || \ > + ((access) & SYSCTL_CT_ASSERT_MASK) == 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) == 0 || \ > + ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_U64) && \ > + sizeof(uint64_t) == sizeof(*(ptr))) > + > +#define SYSCTL_ADD_U64(ctx, parent, nbr, name, access, ptr, val, descr) \ > +({ \ > + uint64_t *__ptr = (ptr); \ > + CTASSERT(((access) & CTLTYPE) == 0 || \ > + ((access) & SYSCTL_CT_ASSERT_MASK) == 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) \ >