Change to sysctl to support linux kobj

Jeff Roberson jroberson at jroberson.net
Thu Aug 5 22:12:22 UTC 2010


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;



More information about the freebsd-arch mailing list