svn commit: r324685 - in stable/10/sys: dev/cxgbe/iw_cxgbe dev/mlx5/mlx5_core ofed/drivers/infiniband/core ofed/drivers/infiniband/debug ofed/drivers/infiniband/hw/mlx4 ofed/drivers/infiniband/hw/m...

Hans Petter Selasky hselasky at FreeBSD.org
Tue Oct 17 11:20:36 UTC 2017


Author: hselasky
Date: Tue Oct 17 11:20:32 2017
New Revision: 324685
URL: https://svnweb.freebsd.org/changeset/base/324685

Log:
  MFC r289568, r300676, r300677, r300719, r300720 and r300721:
  Implement LinuxKPI module parameters as SYSCTLs.
  
  The bool module parameter is no longer supported, because there is no
  equivalent in FreeBSD 10-stable. These are converted into "int" type.
  
  There are two macros available which control the behaviour of the
  LinuxKPI module parameters:
  
  - LINUXKPI_PARAM_PARENT allows the consumer to set the SYSCTL parent
  where the modules parameters will be created.
  
  - LINUXKPI_PARAM_PREFIX defines a parameter name prefix, which is
    added to all created module parameters.
  
  The LinuxKPI module parameters also have a permissions value.
  If any write bits are set we are allowed to modify the module
  parameter runtime. Reflect this when creating the static SYSCTL
  nodes.
  
  The module_param_call() function is no longer supported.
  
  Sponsored by:	Mellanox Technologies

Modified:
  stable/10/sys/dev/cxgbe/iw_cxgbe/provider.c
  stable/10/sys/dev/mlx5/mlx5_core/mlx5_main.c
  stable/10/sys/ofed/drivers/infiniband/core/cma.c
  stable/10/sys/ofed/drivers/infiniband/core/local_sa.c
  stable/10/sys/ofed/drivers/infiniband/core/mad.c
  stable/10/sys/ofed/drivers/infiniband/core/multicast.c
  stable/10/sys/ofed/drivers/infiniband/core/umem.c
  stable/10/sys/ofed/drivers/infiniband/core/uverbs_cmd.c
  stable/10/sys/ofed/drivers/infiniband/debug/memtrack.c
  stable/10/sys/ofed/drivers/infiniband/hw/mlx4/main.c
  stable/10/sys/ofed/drivers/infiniband/hw/mthca/mthca_catas.c
  stable/10/sys/ofed/drivers/infiniband/hw/mthca/mthca_cmd.c
  stable/10/sys/ofed/drivers/infiniband/hw/mthca/mthca_main.c
  stable/10/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h
  stable/10/sys/ofed/drivers/infiniband/ulp/sdp/sdp.h
  stable/10/sys/ofed/drivers/infiniband/util/madeye.c
  stable/10/sys/ofed/drivers/net/mlx4/catas.c
  stable/10/sys/ofed/drivers/net/mlx4/en_main.c
  stable/10/sys/ofed/drivers/net/mlx4/en_tx.c
  stable/10/sys/ofed/drivers/net/mlx4/fw.c
  stable/10/sys/ofed/drivers/net/mlx4/main.c
  stable/10/sys/ofed/drivers/net/mlx4/port.c
  stable/10/sys/ofed/include/linux/linux_compat.c
  stable/10/sys/ofed/include/linux/moduleparam.h
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/cxgbe/iw_cxgbe/provider.c
==============================================================================
--- stable/10/sys/dev/cxgbe/iw_cxgbe/provider.c	Tue Oct 17 02:53:42 2017	(r324684)
+++ stable/10/sys/dev/cxgbe/iw_cxgbe/provider.c	Tue Oct 17 11:20:32 2017	(r324685)
@@ -32,6 +32,8 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
+#define	LINUXKPI_PARAM_PREFIX iw_cxgbe_
+
 #include "opt_inet.h"
 
 #ifdef TCP_OFFLOAD

Modified: stable/10/sys/dev/mlx5/mlx5_core/mlx5_main.c
==============================================================================
--- stable/10/sys/dev/mlx5/mlx5_core/mlx5_main.c	Tue Oct 17 02:53:42 2017	(r324684)
+++ stable/10/sys/dev/mlx5/mlx5_core/mlx5_main.c	Tue Oct 17 11:20:32 2017	(r324685)
@@ -25,6 +25,8 @@
  * $FreeBSD$
  */
 
+#define	LINUXKPI_PARAM_PREFIX mlx5_
+
 #include <linux/kmod.h>
 #include <linux/module.h>
 #include <linux/errno.h>

Modified: stable/10/sys/ofed/drivers/infiniband/core/cma.c
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/core/cma.c	Tue Oct 17 02:53:42 2017	(r324684)
+++ stable/10/sys/ofed/drivers/infiniband/core/cma.c	Tue Oct 17 11:20:32 2017	(r324685)
@@ -34,6 +34,8 @@
  * SOFTWARE.
  */
 
+#define	LINUXKPI_PARAM_PREFIX ibcore_
+
 #include <linux/completion.h>
 #include <linux/in.h>
 #include <linux/in6.h>

Modified: stable/10/sys/ofed/drivers/infiniband/core/local_sa.c
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/core/local_sa.c	Tue Oct 17 02:53:42 2017	(r324684)
+++ stable/10/sys/ofed/drivers/infiniband/core/local_sa.c	Tue Oct 17 11:20:32 2017	(r324685)
@@ -54,24 +54,8 @@ enum {
 	SA_DB_MAX_RETRY_TIMER	 = 256000 /* 256 sec */
 };
 
-static int set_paths_per_dest(const char *val, struct kernel_param *kp);
 static unsigned long paths_per_dest = 0;
-module_param_call(paths_per_dest, set_paths_per_dest, param_get_ulong,
-		  &paths_per_dest, 0644);
-MODULE_PARM_DESC(paths_per_dest, "Maximum number of paths to retrieve "
-				 "to each destination (DGID).  Set to 0 "
-				 "to disable cache.");
-
-static int set_subscribe_inform_info(const char *val, struct kernel_param *kp);
 static char subscribe_inform_info = 1;
-module_param_call(subscribe_inform_info, set_subscribe_inform_info,
-		  param_get_bool, &subscribe_inform_info, 0644);
-MODULE_PARM_DESC(subscribe_inform_info,
-		 "Subscribe for SA InformInfo/Notice events.");
-
-static int do_refresh(const char *val, struct kernel_param *kp);
-module_param_call(refresh, do_refresh, NULL, NULL, 0200);
-
 static unsigned long retry_timer = SA_DB_MIN_RETRY_TIMER;
 
 enum sa_db_lookup_method {
@@ -79,13 +63,7 @@ enum sa_db_lookup_method {
 	SA_DB_LOOKUP_RANDOM
 };
 
-static int set_lookup_method(const char *val, struct kernel_param *kp);
-static int get_lookup_method(char *buf, struct kernel_param *kp);
 static unsigned long lookup_method;
-module_param_call(lookup_method, set_lookup_method, get_lookup_method,
-		  &lookup_method, 0644);
-MODULE_PARM_DESC(lookup_method, "Method used to return path records when "
-				"multiple paths exist to a given destination.");
 
 static void sa_db_add_dev(struct ib_device *device);
 static void sa_db_remove_dev(struct ib_device *device);
@@ -733,73 +711,6 @@ static void refresh_db(void)
 
 	list_for_each_entry(dev, &dev_list, list)
 		refresh_dev_db(dev);
-}
-
-static int do_refresh(const char *val, struct kernel_param *kp)
-{
-	mutex_lock(&lock);
-	refresh_db();
-	mutex_unlock(&lock);
-	return 0;
-}
-
-static int get_lookup_method(char *buf, struct kernel_param *kp)
-{
-	return sprintf(buf,
-		       "%c %d round robin\n"
-		       "%c %d random",
-		       (lookup_method == SA_DB_LOOKUP_LEAST_USED) ? '*' : ' ',
-		       SA_DB_LOOKUP_LEAST_USED,
-		       (lookup_method == SA_DB_LOOKUP_RANDOM) ? '*' : ' ',
-		       SA_DB_LOOKUP_RANDOM);
-}
-
-static int set_lookup_method(const char *val, struct kernel_param *kp)
-{
-	unsigned long method;
-	int ret = 0;
-
-	method = simple_strtoul(val, NULL, 0);
-
-	switch (method) {
-	case SA_DB_LOOKUP_LEAST_USED:
-	case SA_DB_LOOKUP_RANDOM:
-		lookup_method = method;
-		break;
-	default:
-		ret = -EINVAL;
-		break;
-	}
-
-	return ret;
-}
-
-static int set_paths_per_dest(const char *val, struct kernel_param *kp)
-{
-	int ret;
-
-	mutex_lock(&lock);
-	ret = param_set_ulong(val, kp);
-	if (ret)
-		goto out;
-
-	if (paths_per_dest > SA_DB_MAX_PATHS_PER_DEST)
-		paths_per_dest = SA_DB_MAX_PATHS_PER_DEST;
-	refresh_db();
-out:
-	mutex_unlock(&lock);
-	return ret;
-}
-
-static int set_subscribe_inform_info(const char *val, struct kernel_param *kp)
-{
-	int ret;
-
-	ret = param_set_bool(val, kp);
-	if (ret)
-		return ret;
-
-	return do_refresh(val, kp);
 }
 
 static void port_work_handler(struct work_struct *work)

Modified: stable/10/sys/ofed/drivers/infiniband/core/mad.c
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/core/mad.c	Tue Oct 17 02:53:42 2017	(r324684)
+++ stable/10/sys/ofed/drivers/infiniband/core/mad.c	Tue Oct 17 11:20:32 2017	(r324685)
@@ -33,6 +33,9 @@
  * SOFTWARE.
  *
  */
+
+#define	LINUXKPI_PARAM_PREFIX ibcore_
+
 #include <linux/dma-mapping.h>
 #include <rdma/ib_cache.h>
 

Modified: stable/10/sys/ofed/drivers/infiniband/core/multicast.c
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/core/multicast.c	Tue Oct 17 02:53:42 2017	(r324684)
+++ stable/10/sys/ofed/drivers/infiniband/core/multicast.c	Tue Oct 17 11:20:32 2017	(r324685)
@@ -30,6 +30,8 @@
  * SOFTWARE.
  */
 
+#define	LINUXKPI_PARAM_PREFIX ibcore_
+
 #include <linux/completion.h>
 #include <linux/dma-mapping.h>
 #include <linux/err.h>

Modified: stable/10/sys/ofed/drivers/infiniband/core/umem.c
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/core/umem.c	Tue Oct 17 02:53:42 2017	(r324684)
+++ stable/10/sys/ofed/drivers/infiniband/core/umem.c	Tue Oct 17 11:20:32 2017	(r324685)
@@ -32,6 +32,8 @@
  * SOFTWARE.
  */
 
+#define	LINUXKPI_PARAM_PREFIX ibcore_
+
 #include <linux/mm.h>
 #include <linux/dma-mapping.h>
 #include <linux/sched.h>
@@ -52,7 +54,7 @@
 #include "uverbs.h"
 
 static int allow_weak_ordering;
-module_param(allow_weak_ordering, bool, 0444);
+module_param(allow_weak_ordering, int, 0444);
 MODULE_PARM_DESC(allow_weak_ordering,  "Allow weak ordering for data registered memory");
 
 #define IB_UMEM_MAX_PAGE_CHUNK						\

Modified: stable/10/sys/ofed/drivers/infiniband/core/uverbs_cmd.c
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/core/uverbs_cmd.c	Tue Oct 17 02:53:42 2017	(r324684)
+++ stable/10/sys/ofed/drivers/infiniband/core/uverbs_cmd.c	Tue Oct 17 11:20:32 2017	(r324685)
@@ -33,6 +33,8 @@
  * SOFTWARE.
  */
 
+#define	LINUXKPI_PARAM_PREFIX ibcore_
+
 #include <linux/file.h>
 #include <linux/fs.h>
 #include <linux/lockdep.h>

Modified: stable/10/sys/ofed/drivers/infiniband/debug/memtrack.c
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/debug/memtrack.c	Tue Oct 17 02:53:42 2017	(r324684)
+++ stable/10/sys/ofed/drivers/infiniband/debug/memtrack.c	Tue Oct 17 11:20:32 2017	(r324685)
@@ -19,6 +19,8 @@
   Copyright (c) 2004 Mellanox Technologies Ltd.  All rights reserved.
 */
 
+#define	LINUXKPI_PARAM_PREFIX memtrack_
+
 #define C_MEMTRACK_C
 
 #ifdef kmalloc

Modified: stable/10/sys/ofed/drivers/infiniband/hw/mlx4/main.c
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/hw/mlx4/main.c	Tue Oct 17 02:53:42 2017	(r324684)
+++ stable/10/sys/ofed/drivers/infiniband/hw/mlx4/main.c	Tue Oct 17 11:20:32 2017	(r324685)
@@ -31,6 +31,8 @@
  * SOFTWARE.
  */
 
+#define	LINUXKPI_PARAM_PREFIX mlx4_
+
 #include <linux/module.h>
 
 #ifdef __linux__

Modified: stable/10/sys/ofed/drivers/infiniband/hw/mthca/mthca_catas.c
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/hw/mthca/mthca_catas.c	Tue Oct 17 02:53:42 2017	(r324684)
+++ stable/10/sys/ofed/drivers/infiniband/hw/mthca/mthca_catas.c	Tue Oct 17 11:20:32 2017	(r324685)
@@ -30,6 +30,8 @@
  * SOFTWARE.
  */
 
+#define	LINUXKPI_PARAM_PREFIX mthca_
+
 #include <linux/jiffies.h>
 #include <linux/timer.h>
 #include <linux/workqueue.h>

Modified: stable/10/sys/ofed/drivers/infiniband/hw/mthca/mthca_cmd.c
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/hw/mthca/mthca_cmd.c	Tue Oct 17 02:53:42 2017	(r324684)
+++ stable/10/sys/ofed/drivers/infiniband/hw/mthca/mthca_cmd.c	Tue Oct 17 11:20:32 2017	(r324685)
@@ -32,6 +32,8 @@
  * SOFTWARE.
  */
 
+#define	LINUXKPI_PARAM_PREFIX mthca_
+
 #include <linux/completion.h>
 #include <linux/pci.h>
 #include <linux/errno.h>

Modified: stable/10/sys/ofed/drivers/infiniband/hw/mthca/mthca_main.c
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/hw/mthca/mthca_main.c	Tue Oct 17 02:53:42 2017	(r324684)
+++ stable/10/sys/ofed/drivers/infiniband/hw/mthca/mthca_main.c	Tue Oct 17 11:20:32 2017	(r324685)
@@ -32,6 +32,8 @@
  * SOFTWARE.
  */
 
+#define	LINUXKPI_PARAM_PREFIX mthca_
+
 #include <linux/module.h>
 #include <linux/errno.h>
 #include <linux/pci.h>

Modified: stable/10/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h	Tue Oct 17 02:53:42 2017	(r324684)
+++ stable/10/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h	Tue Oct 17 11:20:32 2017	(r324685)
@@ -35,6 +35,8 @@
 #ifndef _IPOIB_H
 #define _IPOIB_H
 
+#define	LINUXKPI_PARAM_PREFIX ipoib_
+
 #include "opt_inet.h"
 #include "opt_inet6.h"
 #include "opt_ofed.h"

Modified: stable/10/sys/ofed/drivers/infiniband/ulp/sdp/sdp.h
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/ulp/sdp/sdp.h	Tue Oct 17 02:53:42 2017	(r324684)
+++ stable/10/sys/ofed/drivers/infiniband/ulp/sdp/sdp.h	Tue Oct 17 11:20:32 2017	(r324685)
@@ -1,6 +1,8 @@
 #ifndef _SDP_H_
 #define _SDP_H_
 
+#define	LINUXKPI_PARAM_PREFIX ib_sdp_
+
 #include "opt_ddb.h"
 #include "opt_inet.h"
 #include "opt_ofed.h"

Modified: stable/10/sys/ofed/drivers/infiniband/util/madeye.c
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/util/madeye.c	Tue Oct 17 02:53:42 2017	(r324684)
+++ stable/10/sys/ofed/drivers/infiniband/util/madeye.c	Tue Oct 17 11:20:32 2017	(r324685)
@@ -32,6 +32,9 @@
  *
  * $Id$
  */
+
+#define	LINUXKPI_PARAM_PREFIX ib_madeye_
+
 #include <linux/module.h>
 #include <linux/device.h>
 #include <linux/err.h>

Modified: stable/10/sys/ofed/drivers/net/mlx4/catas.c
==============================================================================
--- stable/10/sys/ofed/drivers/net/mlx4/catas.c	Tue Oct 17 02:53:42 2017	(r324684)
+++ stable/10/sys/ofed/drivers/net/mlx4/catas.c	Tue Oct 17 11:20:32 2017	(r324685)
@@ -31,6 +31,8 @@
  * SOFTWARE.
  */
 
+#define	LINUXKPI_PARAM_PREFIX mlx4_
+
 #include <linux/workqueue.h>
 #include <linux/module.h>
 

Modified: stable/10/sys/ofed/drivers/net/mlx4/en_main.c
==============================================================================
--- stable/10/sys/ofed/drivers/net/mlx4/en_main.c	Tue Oct 17 02:53:42 2017	(r324684)
+++ stable/10/sys/ofed/drivers/net/mlx4/en_main.c	Tue Oct 17 11:20:32 2017	(r324685)
@@ -31,6 +31,8 @@
  *
  */
 
+#define	LINUXKPI_PARAM_PREFIX mlx4_
+
 #include <linux/module.h>
 #include <linux/delay.h>
 #include <linux/netdevice.h>

Modified: stable/10/sys/ofed/drivers/net/mlx4/en_tx.c
==============================================================================
--- stable/10/sys/ofed/drivers/net/mlx4/en_tx.c	Tue Oct 17 02:53:42 2017	(r324684)
+++ stable/10/sys/ofed/drivers/net/mlx4/en_tx.c	Tue Oct 17 11:20:32 2017	(r324685)
@@ -31,6 +31,8 @@
  *
  */
 
+#define	LINUXKPI_PARAM_PREFIX mlx4_
+
 #include <linux/page.h>
 #include <linux/mlx4/cq.h>
 #include <linux/slab.h>

Modified: stable/10/sys/ofed/drivers/net/mlx4/fw.c
==============================================================================
--- stable/10/sys/ofed/drivers/net/mlx4/fw.c	Tue Oct 17 02:53:42 2017	(r324684)
+++ stable/10/sys/ofed/drivers/net/mlx4/fw.c	Tue Oct 17 11:20:32 2017	(r324685)
@@ -32,6 +32,8 @@
  * SOFTWARE.
  */
 
+#define	LINUXKPI_PARAM_PREFIX mlx4_
+
 #include <linux/etherdevice.h>
 #include <linux/mlx4/cmd.h>
 #include <linux/module.h>
@@ -49,8 +51,8 @@ enum {
 extern void __buggy_use_of_MLX4_GET(void);
 extern void __buggy_use_of_MLX4_PUT(void);
 
-static bool enable_qos;
-module_param(enable_qos, bool, 0444);
+static int enable_qos;
+module_param(enable_qos, int, 0444);
 MODULE_PARM_DESC(enable_qos, "Enable Quality of Service support in the HCA (default: off)");
 
 #define MLX4_GET(dest, source, offset)				      \

Modified: stable/10/sys/ofed/drivers/net/mlx4/main.c
==============================================================================
--- stable/10/sys/ofed/drivers/net/mlx4/main.c	Tue Oct 17 02:53:42 2017	(r324684)
+++ stable/10/sys/ofed/drivers/net/mlx4/main.c	Tue Oct 17 11:20:32 2017	(r324685)
@@ -33,6 +33,8 @@
  * SOFTWARE.
  */
 
+#define	LINUXKPI_PARAM_PREFIX mlx4_
+
 #include <linux/kmod.h>
 /* 
  * kmod.h must be included before module.h since it includes (indirectly) sys/module.h

Modified: stable/10/sys/ofed/drivers/net/mlx4/port.c
==============================================================================
--- stable/10/sys/ofed/drivers/net/mlx4/port.c	Tue Oct 17 02:53:42 2017	(r324684)
+++ stable/10/sys/ofed/drivers/net/mlx4/port.c	Tue Oct 17 11:20:32 2017	(r324685)
@@ -30,6 +30,8 @@
  * SOFTWARE.
  */
 
+#define	LINUXKPI_PARAM_PREFIX mlx4_
+
 #include <linux/errno.h>
 #include <linux/if_ether.h>
 #include <linux/module.h>

Modified: stable/10/sys/ofed/include/linux/linux_compat.c
==============================================================================
--- stable/10/sys/ofed/include/linux/linux_compat.c	Tue Oct 17 02:53:42 2017	(r324684)
+++ stable/10/sys/ofed/include/linux/linux_compat.c	Tue Oct 17 11:20:32 2017	(r324685)
@@ -53,6 +53,7 @@
 #include <linux/device.h>
 #include <linux/slab.h>
 #include <linux/module.h>
+#include <linux/moduleparam.h>
 #include <linux/cdev.h>
 #include <linux/file.h>
 #include <linux/sysfs.h>
@@ -65,6 +66,8 @@
 #include <vm/vm_pager.h>
 
 #include <linux/workqueue.h>
+
+SYSCTL_NODE(_compat, OID_AUTO, linuxkpi, CTLFLAG_RW, 0, "LinuxKPI parameters");
 
 MALLOC_DEFINE(M_KMALLOC, "linux", "Linux kmalloc compat");
 

Modified: stable/10/sys/ofed/include/linux/moduleparam.h
==============================================================================
--- stable/10/sys/ofed/include/linux/moduleparam.h	Tue Oct 17 02:53:42 2017	(r324684)
+++ stable/10/sys/ofed/include/linux/moduleparam.h	Tue Oct 17 11:20:32 2017	(r324685)
@@ -2,7 +2,7 @@
  * Copyright (c) 2010 Isilon Systems, Inc.
  * Copyright (c) 2010 iX Systems, Inc.
  * Copyright (c) 2010 Panasas, Inc.
- * Copyright (c) 2013, 2014 Mellanox Technologies, Ltd.
+ * Copyright (c) 2013-2016 Mellanox Technologies, Ltd.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -25,209 +25,106 @@
  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD: head/sys/compat/linuxkpi/common/include/linux/moduleparam.h 300721 2016-05-26 09:04:14Z hselasky $
  */
-
 #ifndef	_LINUX_MODULEPARAM_H_
 #define	_LINUX_MODULEPARAM_H_
 
+#include <sys/types.h>
+#include <sys/sysctl.h>
+
 #include <linux/types.h>
 
-/*
- * These are presently not hooked up to anything.  In linux the parameters
- * can be set when modules are loaded.  On FreeBSD these could be mapped
- * to kenv in the future.
- */
-struct kernel_param;
+#ifndef LINUXKPI_PARAM_PARENT
+#define	LINUXKPI_PARAM_PARENT	_compat_linuxkpi
+#endif
 
-typedef int (*param_set_fn)(const char *val, struct kernel_param *kp);
-typedef int (*param_get_fn)(char *buffer, struct kernel_param *kp);
+#ifndef LINUXKPI_PARAM_PREFIX
+#define	LINUXKPI_PARAM_PREFIX	/* empty prefix is the default */
+#endif
 
-struct kernel_param {
-	const char	*name;
-	u16		perm;
-	u16		flags;
-	param_set_fn	set;
-	param_get_fn	get;
-	union { 
-		void	*arg;
-		struct kparam_string	*str;
-		struct kparam_array	*arr;
-	} un;
-};
+#ifndef LINUXKPI_PARAM_PERM
+#define	LINUXKPI_PARAM_PERM(perm) (((perm) & 0222) ? CTLFLAG_RWTUN : CTLFLAG_RDTUN)
+#endif
 
-#define	KPARAM_ISBOOL	2
+#define	LINUXKPI_PARAM_CONCAT_SUB(a,b,c,d) a##b##c##d
+#define	LINUXKPI_PARAM_CONCAT(...) LINUXKPI_PARAM_CONCAT_SUB(__VA_ARGS__)
+#define	LINUXKPI_PARAM_PASS(...) __VA_ARGS__
+#define	LINUXKPI_PARAM_DESC(name) LINUXKPI_PARAM_CONCAT(linuxkpi_,LINUXKPI_PARAM_PREFIX,name,_desc)
+#define	LINUXKPI_PARAM_NAME(name) LINUXKPI_PARAM_CONCAT(LINUXKPI_PARAM_PREFIX,name,,)
 
-struct kparam_string {
-	unsigned int maxlen;
-	char *string;
-};
+#define	LINUXKPI_PARAM_bool(name, var, perm)				\
+	extern const char LINUXKPI_PARAM_DESC(name)[];			\
+	LINUXKPI_PARAM_PASS(SYSCTL_BOOL(LINUXKPI_PARAM_PARENT, OID_AUTO,\
+	LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \
+	LINUXKPI_PARAM_DESC(name)))
 
-struct kparam_array
-{
-	unsigned int	max;
-	unsigned int	*num;
-	param_set_fn	set;
-	param_get_fn	get;
-	unsigned int	elemsize;
-	void 		*elem;
-};
+#define	LINUXKPI_PARAM_byte(name, var, perm)				\
+	extern const char LINUXKPI_PARAM_DESC(name)[];			\
+	LINUXKPI_PARAM_PASS(SYSCTL_U8(LINUXKPI_PARAM_PARENT, OID_AUTO,	\
+	LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \
+	LINUXKPI_PARAM_DESC(name)))
 
-static inline void
-param_sysinit(struct kernel_param *param)
-{
-}
+#define	LINUXKPI_PARAM_short(name, var, perm)				\
+	extern const char LINUXKPI_PARAM_DESC(name)[];			\
+	LINUXKPI_PARAM_PASS(SYSCTL_S16(LINUXKPI_PARAM_PARENT, OID_AUTO,	\
+	LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \
+	LINUXKPI_PARAM_DESC(name)))
 
-#define	module_param_call(name, set, get, arg, perm)			\
-	static struct kernel_param __param_##name =			\
-	    { #name, perm, 0, set, get, { arg } };			\
-	SYSINIT(name##_param_sysinit, SI_SUB_DRIVERS, SI_ORDER_FIRST,	\
-	    param_sysinit, &__param_##name);
+#define	LINUXKPI_PARAM_ushort(name, var, perm)				\
+	extern const char LINUXKPI_PARAM_DESC(name)[];			\
+	LINUXKPI_PARAM_PASS(SYSCTL_U16(LINUXKPI_PARAM_PARENT, OID_AUTO,	\
+	LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \
+	LINUXKPI_PARAM_DESC(name)))
 
-#define module_param_string(name, string, len, perm)                    
-         
-#define	module_param_named(name, var, type, mode)			\
-	module_param_call(name, param_set_##type, param_get_##type, &var, mode)
+#define	LINUXKPI_PARAM_int(name, var, perm)				\
+	extern const char LINUXKPI_PARAM_DESC(name)[];			\
+	LINUXKPI_PARAM_PASS(SYSCTL_INT(LINUXKPI_PARAM_PARENT, OID_AUTO,	\
+	LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0,\
+	LINUXKPI_PARAM_DESC(name)))
 
-#define	module_param(var, type, mode)					\
-	module_param_named(var, var, type, mode)
+#define	LINUXKPI_PARAM_uint(name, var, perm)				\
+	extern const char LINUXKPI_PARAM_DESC(name)[];			\
+	LINUXKPI_PARAM_PASS(SYSCTL_UINT(LINUXKPI_PARAM_PARENT, OID_AUTO, \
+	LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \
+	LINUXKPI_PARAM_DESC(name)))
 
-#define module_param_array(var, type, addr_argc, mode)                  \
-        module_param_named(var, var, type, mode)
+#define	LINUXKPI_PARAM_long(name, var, perm)				\
+	extern const char LINUXKPI_PARAM_DESC(name)[];			\
+	LINUXKPI_PARAM_PASS(SYSCTL_LONG(LINUXKPI_PARAM_PARENT, OID_AUTO, \
+	LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \
+	LINUXKPI_PARAM_DESC(name)))
 
-#define	MODULE_PARM_DESC(name, desc)
+#define	LINUXKPI_PARAM_ulong(name, var, perm)				\
+	extern const char LINUXKPI_PARAM_DESC(name)[];			\
+	LINUXKPI_PARAM_PASS(SYSCTL_ULONG(LINUXKPI_PARAM_PARENT, OID_AUTO, \
+	LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \
+	LINUXKPI_PARAM_DESC(name)))
 
-static inline int
-param_set_byte(const char *val, struct kernel_param *kp)
-{
+#define	module_param_string(name, str, len, perm)			\
+	extern const char LINUXKPI_PARAM_DESC(name)[];			\
+	LINUXKPI_PARAM_PASS(SYSCTL_STRING(LINUXKPI_PARAM_PARENT, OID_AUTO, \
+	LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), (str), (len), \
+	LINUXKPI_PARAM_DESC(name)))
 
-	return 0;
-}
+#define	module_param_named(name, var, type, mode)	\
+	LINUXKPI_PARAM_##type(name, var, mode)
 
-static inline int
-param_get_byte(char *buffer, struct kernel_param *kp)
-{
+#define	module_param(var, type, mode)	\
+	LINUXKPI_PARAM_##type(var, var, mode)
 
-	return 0;
-}
+#define	module_param_named_unsafe(name, var, type, mode) \
+	LINUXKPI_PARAM_##type(name, var, mode)
 
+#define	module_param_unsafe(var, type, mode) \
+	LINUXKPI_PARAM_##type(var, var, mode)
 
-static inline int
-param_set_short(const char *val, struct kernel_param *kp)
-{
+#define	module_param_array(var, type, addr_argc, mode)
 
-	return 0;
-}
+#define	MODULE_PARM_DESC(name, desc) \
+	const char LINUXKPI_PARAM_DESC(name)[] = { desc }
 
-static inline int 
-param_get_short(char *buffer, struct kernel_param *kp)
-{
+SYSCTL_DECL(_compat_linuxkpi);
 
-	return 0;
-}
-
-
-static inline int 
-param_set_ushort(const char *val, struct kernel_param *kp)
-{
-
-	return 0;
-}
-
-static inline int 
-param_get_ushort(char *buffer, struct kernel_param *kp)
-{
-
-	return 0;
-}
-
-
-static inline int 
-param_set_int(const char *val, struct kernel_param *kp)
-{
-
-	return 0;
-}
-
-static inline int 
-param_get_int(char *buffer, struct kernel_param *kp)
-{
-
-	return 0;
-}
-
-
-static inline int 
-param_set_uint(const char *val, struct kernel_param *kp)
-{
-
-	return 0;
-}
-
-static inline int 
-param_get_uint(char *buffer, struct kernel_param *kp)
-{
-
-	return 0;
-}
-
-
-static inline int 
-param_set_long(const char *val, struct kernel_param *kp)
-{
-
-	return 0;
-}
-
-static inline int 
-param_get_long(char *buffer, struct kernel_param *kp)
-{
-
-	return 0;
-}
-
-
-static inline int 
-param_set_ulong(const char *val, struct kernel_param *kp)
-{
-
-	return 0;
-}
-
-static inline int 
-param_get_ulong(char *buffer, struct kernel_param *kp)
-{
-
-	return 0;
-}
-
-
-static inline int 
-param_set_charp(const char *val, struct kernel_param *kp)
-{
-
-	return 0;
-}
-
-static inline int 
-param_get_charp(char *buffer, struct kernel_param *kp)
-{
-
-	return 0;
-}
-
-
-static inline int 
-param_set_bool(const char *val, struct kernel_param *kp)
-{
-
-	return 0;
-}
-
-static inline int 
-param_get_bool(char *buffer, struct kernel_param *kp)
-{
-
-	return 0;
-}
-
-#endif	/* _LINUX_MODULEPARAM_H_ */
+#endif					/* _LINUX_MODULEPARAM_H_ */


More information about the svn-src-stable mailing list