svn commit: r290475 - in head: share/man/man9 sys/kern sys/sys
Svatopluk Kraus
onwahe at gmail.com
Sat Nov 7 08:37:23 UTC 2015
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 <sys/queue.h>
+#include <sys/stdint.h>
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 <cem at freebsd.org> 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 <rpokala at panasas.com>
> 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) \
>
More information about the svn-src-all
mailing list