From owner-svn-src-stable@freebsd.org Tue Oct 17 11:20:35 2017 Return-Path: Delivered-To: svn-src-stable@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D938EE371F8; Tue, 17 Oct 2017 11:20:35 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 758D4686F1; Tue, 17 Oct 2017 11:20:35 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v9HBKYFi095042; Tue, 17 Oct 2017 11:20:34 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v9HBKWKH095017; Tue, 17 Oct 2017 11:20:32 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <201710171120.v9HBKWKH095017@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Tue, 17 Oct 2017 11:20:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: 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... X-SVN-Group: stable-10 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: 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/mthca ofed/drivers/infinib... X-SVN-Commit-Revision: 324685 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 17 Oct 2017 11:20:36 -0000 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 __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 #include #include 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 #include #include 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 #include 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 #include #include 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 #include #include @@ -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 #include #include 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 #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 #include #include 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 #include #include 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 #include #include 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 #include #include 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 #include 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 #include #include 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 #include #include 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 #include #include @@ -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 /* * 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 #include #include 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 #include #include +#include #include #include #include @@ -65,6 +66,8 @@ #include #include + +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 +#include + #include -/* - * 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_ */