Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 06 Aug 2010 17:15:10 -0600 (MDT)
From:      "M. Warner Losh" <imp@bsdimp.com>
To:        jroberson@jroberson.net
Cc:        arch@freebsd.org
Subject:   Re: Change to sysctl to support linux kobj
Message-ID:  <20100806.171510.506212773199813899.imp@bsdimp.com>
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
In message: <alpine.BSF.2.00.1008051140280.1414@desktop>
            Jeff Roberson <jroberson@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



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