Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 6 Aug 2010 15:19:44 -0700
From:      Peter Wemm <peter@wemm.org>
To:        Jeff Roberson <jroberson@jroberson.net>
Cc:        arch@freebsd.org
Subject:   Re: Change to sysctl to support linux kobj
Message-ID:  <AANLkTinF-AMsAa9MSOXiCy7Vi-i2X4DzegqMrqpD9Dwi@mail.gmail.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
On Thu, Aug 5, 2010 at 2:46 PM, Jeff Roberson <jroberson@jroberson.net> wro=
te:
> Hi folks,
>
> I really need two pointer arguments to a sysctl function to support linux
> sysfs via sysctl. =A0To facilitate this I propose changing the int arg2 t=
o a
> uinptr_t. =A0This keeps it as an integer type but makes it wide enough to
> accept a pointer. =A0A small number of places in the kernel have to be fi=
xed
> for the new type or because they don't use SYSCTL_HANDLER_ARGS. =A0This w=
ill
> introduce an api/abi incompatibility although it is relatively minor.
>
> Comments? =A0Alternatives?
>
> Thanks,
> Jeff
>
> Index: sysctl.h
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> --- sysctl.h =A0 =A0(revision 207767)
> +++ sysctl.h =A0 =A0(working copy)
> @@ -114,8 +114,8 @@
> =A0#define CTL_AUTO_START 0x100
>
> =A0#ifdef _KERNEL
> -#define SYSCTL_HANDLER_ARGS struct sysctl_oid *oidp, void *arg1, int arg=
2,
> \
> - =A0 =A0 =A0 struct sysctl_req *req
> +#define SYSCTL_HANDLER_ARGS struct sysctl_oid *oidp, void *arg1, =A0 =A0=
 =A0 \
> + =A0 =A0 =A0 uintptr_t arg2, struct sysctl_req *req
>
> =A0/* definitions for sysctl_req 'lock' member */
> =A0#define REQ_UNLOCKED =A0 0 =A0 =A0 =A0 /* not locked and not wired */
> @@ -158,7 +158,7 @@
> =A0 =A0 =A0 =A0int =A0 =A0 =A0 =A0 =A0 =A0 oid_number;
> =A0 =A0 =A0 =A0u_int =A0 =A0 =A0 =A0 =A0 oid_kind;
> =A0 =A0 =A0 =A0void =A0 =A0 =A0 =A0 =A0 =A0*oid_arg1;
> - =A0 =A0 =A0 int =A0 =A0 =A0 =A0 =A0 =A0 oid_arg2;
> + =A0 =A0 =A0 uintptr_t =A0 =A0 =A0 oid_arg2;
> =A0 =A0 =A0 =A0const char =A0 =A0 =A0*oid_name;
> =A0 =A0 =A0 =A0int =A0 =A0 =A0 =A0 =A0 =A0 (*oid_handler)(SYSCTL_HANDLER_=
ARGS);
> =A0 =A0 =A0 =A0const char =A0 =A0 =A0*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"
>

My initial thoughts..  32 bit systems should be unaffected.

Impact on 64 bit systems may be low..  For the args passing on amd64,
that should be covered by the already 64 bit register passing.

The impact on sysctl_oid struct is varied.  It won't change the size
on 64 bit systems because of native alignment requirements adding
invisible padding in the structure already.  A 64 bit type, followed
by 32 bit, followed by 64 bit, leaves space to expand the 32 bit to a
64 bit object.

However, little vs big endian is affected to a different degree.  Big
endian ppc64 would be affected since the oid_arg2 fields won't be in
the same bit positions.  The impact on little endian systems depends
on what goes into the padding area.  If it is usually initialized to
zeroes, we might get away with it.

--=20
Peter Wemm - peter@wemm.org; peter@FreeBSD.org; peter@yahoo-inc.com; KI6FJV
"All of this is for nothing if we don't go to the stars" - JMS/B5
"If Java had true garbage collection, most programs would delete
themselves upon execution." -- Robert Sewell



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