Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 6 Aug 2010 10:30:03 -0400
From:      John Baldwin <jhb@freebsd.org>
To:        freebsd-arch@freebsd.org
Subject:   Re: Change to sysctl to support linux kobj
Message-ID:  <201008061030.03214.jhb@freebsd.org>
In-Reply-To: <alpine.BSF.2.00.1008051140280.1414@desktop>
References:  <alpine.BSF.2.00.1008051140280.1414@desktop>

next in thread | previous in thread | raw e-mail | index | archive | help
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@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-arch
> To unsubscribe, send any mail to "freebsd-arch-unsubscribe@freebsd.org"
> 

-- 
John Baldwin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201008061030.03214.jhb>