Change to sysctl to support linux kobj

M. Warner Losh imp at bsdimp.com
Fri Aug 6 23:16:37 UTC 2010


In message: <alpine.BSF.2.00.1008051140280.1414 at desktop>
            Jeff Roberson <jroberson at jroberson.net> writes:
: 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?
: 
: 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;

We've been making a lot of changes to the MIPS tree that involve using
intptr_t when dealing with addresses to get the proper sign extension
to happen.  I'm unsure if this would be a good thing or not more
generally, but at least two architectures use this convention (MIPS
and the now-defunct alpha).

Warner


More information about the freebsd-arch mailing list