Change to sysctl to support linux kobj
John Baldwin
jhb at freebsd.org
Fri Aug 6 15:58:31 UTC 2010
On Thursday, August 05, 2010 5:46:07 pm Jeff Roberson wrote:
> Hi folks,
>
> I really need two pointer arguments to a sysctl function to support linux
> sysfs via sysctl. To facilitate this I propose changing the int arg2 to a
> uinptr_t. This keeps it as an integer type but makes it wide enough to
> accept a pointer. A small number of places in the kernel have to be fixed
> for the new type or because they don't use SYSCTL_HANDLER_ARGS. This will
> introduce an api/abi incompatibility although it is relatively minor.
>
> Comments? Alternatives?
Presumably it should be intptr_t to stay signed. One could always create a
structure that holds the two pointers and pass that as arg1 also which is what
other code does that needs to pass in more than a simple pointer to an int,
etc. as well.
> Thanks,
> Jeff
>
> Index: sysctl.h
> ===================================================================
> --- sysctl.h (revision 207767)
> +++ sysctl.h (working copy)
> @@ -114,8 +114,8 @@
> #define CTL_AUTO_START 0x100
>
> #ifdef _KERNEL
> -#define SYSCTL_HANDLER_ARGS struct sysctl_oid *oidp, void *arg1, int arg2,
\
> - struct sysctl_req *req
> +#define SYSCTL_HANDLER_ARGS struct sysctl_oid *oidp, void *arg1, \
> + uintptr_t arg2, struct sysctl_req *req
>
> /* definitions for sysctl_req 'lock' member */
> #define REQ_UNLOCKED 0 /* not locked and not wired */
> @@ -158,7 +158,7 @@
> int oid_number;
> u_int oid_kind;
> void *oid_arg1;
> - int oid_arg2;
> + uintptr_t oid_arg2;
> const char *oid_name;
> int (*oid_handler)(SYSCTL_HANDLER_ARGS);
> const char *oid_fmt;
>
> _______________________________________________
> freebsd-arch at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-arch
> To unsubscribe, send any mail to "freebsd-arch-unsubscribe at freebsd.org"
>
--
John Baldwin
More information about the freebsd-arch
mailing list