Changeset View
Changeset View
Standalone View
Standalone View
sys/compat/linuxkpi/common/include/linux/moduleparam.h
Show All 30 Lines | |||||
#ifndef _LINUXKPI_LINUX_MODULEPARAM_H_ | #ifndef _LINUXKPI_LINUX_MODULEPARAM_H_ | ||||
#define _LINUXKPI_LINUX_MODULEPARAM_H_ | #define _LINUXKPI_LINUX_MODULEPARAM_H_ | ||||
#include <sys/types.h> | #include <sys/types.h> | ||||
#include <sys/sysctl.h> | #include <sys/sysctl.h> | ||||
#include <linux/types.h> | #include <linux/types.h> | ||||
int lkpi_sysctl_handle_charp(SYSCTL_HANDLER_ARGS); | |||||
#ifndef LINUXKPI_PARAM_PARENT | #ifndef LINUXKPI_PARAM_PARENT | ||||
#define LINUXKPI_PARAM_PARENT _compat_linuxkpi | #define LINUXKPI_PARAM_PARENT _compat_linuxkpi | ||||
#endif | #endif | ||||
#ifndef LINUXKPI_PARAM_PREFIX | #ifndef LINUXKPI_PARAM_PREFIX | ||||
#define LINUXKPI_PARAM_PREFIX /* empty prefix is the default */ | #define LINUXKPI_PARAM_PREFIX /* empty prefix is the default */ | ||||
#endif | #endif | ||||
▲ Show 20 Lines • Show All 52 Lines • ▼ Show 20 Lines | |||||
#define LINUXKPI_PARAM_ulong(name, var, perm) \ | #define LINUXKPI_PARAM_ulong(name, var, perm) \ | ||||
extern const char LINUXKPI_PARAM_DESC(name)[]; \ | extern const char LINUXKPI_PARAM_DESC(name)[]; \ | ||||
LINUXKPI_PARAM_PASS(SYSCTL_ULONG(LINUXKPI_PARAM_PARENT, OID_AUTO, \ | LINUXKPI_PARAM_PASS(SYSCTL_ULONG(LINUXKPI_PARAM_PARENT, OID_AUTO, \ | ||||
LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \ | LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \ | ||||
LINUXKPI_PARAM_DESC(name))) | LINUXKPI_PARAM_DESC(name))) | ||||
#define LINUXKPI_PARAM_charp(name, var, perm) \ | #define LINUXKPI_PARAM_charp(name, var, perm) \ | ||||
extern const char LINUXKPI_PARAM_DESC(name)[]; \ | extern const char LINUXKPI_PARAM_DESC(name)[]; \ | ||||
LINUXKPI_PARAM_PASS(SYSCTL_STRING(LINUXKPI_PARAM_PARENT, OID_AUTO, \ | LINUXKPI_PARAM_PASS(SYSCTL_PROC(LINUXKPI_PARAM_PARENT, OID_AUTO, \ | ||||
LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \ | LINUXKPI_PARAM_NAME(name), \ | ||||
LINUXKPI_PARAM_DESC(name))) | LINUXKPI_PARAM_PERM(perm) | CTLTYPE_STRING | CTLFLAG_MPSAFE, \ | ||||
&(var), 0, lkpi_sysctl_handle_charp, "A", LINUXKPI_PARAM_DESC(name))) | |||||
wulf: var must be freed on module unload | |||||
Not Done Inline ActionsThis kfree() looks incorrect. Should be kfree(var); ??? hselasky: This kfree() looks incorrect. Should be kfree(var); ??? | |||||
#define module_param_string(name, str, len, perm) \ | #define module_param_string(name, str, len, perm) \ | ||||
extern const char LINUXKPI_PARAM_DESC(name)[]; \ | extern const char LINUXKPI_PARAM_DESC(name)[]; \ | ||||
LINUXKPI_PARAM_PASS(SYSCTL_STRING(LINUXKPI_PARAM_PARENT, OID_AUTO, \ | LINUXKPI_PARAM_PASS(SYSCTL_STRING(LINUXKPI_PARAM_PARENT, OID_AUTO, \ | ||||
LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), (str), (len), \ | LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), (str), (len), \ | ||||
LINUXKPI_PARAM_DESC(name))) | LINUXKPI_PARAM_DESC(name))) | ||||
#define module_param_named(name, var, type, mode) \ | #define module_param_named(name, var, type, mode) \ | ||||
Show All 12 Lines | |||||
#define MODULE_PARM_DESC(name, desc) \ | #define MODULE_PARM_DESC(name, desc) \ | ||||
const char LINUXKPI_PARAM_DESC(name)[] = { desc } | const char LINUXKPI_PARAM_DESC(name)[] = { desc } | ||||
#define kernel_param_lock(...) do {} while (0) | #define kernel_param_lock(...) do {} while (0) | ||||
#define kernel_param_unlock(...) do {} while (0) | #define kernel_param_unlock(...) do {} while (0) | ||||
SYSCTL_DECL(_compat_linuxkpi); | SYSCTL_DECL(_compat_linuxkpi); | ||||
hselaskyUnsubmitted Not Done Inline ActionsStyle: extern int lkpi_sysctl_handle_charp(SYSCTL_HANDLER_ARGS); I also like to use extern, though some see it redundant. hselasky: Style:
Function prototype should go after the macros:
```
extern int lkpi_sysctl_handle_charp… | |||||
#endif /* _LINUXKPI_LINUX_MODULEPARAM_H_ */ | #endif /* _LINUXKPI_LINUX_MODULEPARAM_H_ */ |
var must be freed on module unload