Changeset View
Changeset View
Standalone View
Standalone View
sys/compat/linuxkpi/common/include/linux/moduleparam.h
Show First 20 Lines • Show All 47 Lines • ▼ Show 20 Lines | |||||
#define LINUXKPI_PARAM_PERM(perm) (((perm) & 0222) ? CTLFLAG_RWTUN : CTLFLAG_RDTUN) | #define LINUXKPI_PARAM_PERM(perm) (((perm) & 0222) ? CTLFLAG_RWTUN : CTLFLAG_RDTUN) | ||||
#endif | #endif | ||||
#define LINUXKPI_PARAM_CONCAT_SUB(a,b,c,d) a##b##c##d | #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_CONCAT(...) LINUXKPI_PARAM_CONCAT_SUB(__VA_ARGS__) | ||||
#define LINUXKPI_PARAM_PASS(...) __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_DESC(name) LINUXKPI_PARAM_CONCAT(linuxkpi_,LINUXKPI_PARAM_PREFIX,name,_desc) | ||||
#define LINUXKPI_PARAM_NAME(name) LINUXKPI_PARAM_CONCAT(LINUXKPI_PARAM_PREFIX,name,,) | #define LINUXKPI_PARAM_NAME(name) LINUXKPI_PARAM_CONCAT(LINUXKPI_PARAM_PREFIX,name,,) | ||||
#define LINUXKPI_PARAM_UNINIT(name) LINUXKPI_PARAM_CONCAT(linuxkpi_,LINUXKPI_PARAM_PREFIX,name,_uninit) | |||||
#define LINUXKPI_PARAM_bool(name, var, perm) \ | #define LINUXKPI_PARAM_bool(name, var, perm) \ | ||||
extern const char LINUXKPI_PARAM_DESC(name)[]; \ | extern const char LINUXKPI_PARAM_DESC(name)[]; \ | ||||
LINUXKPI_PARAM_PASS(SYSCTL_BOOL(LINUXKPI_PARAM_PARENT, OID_AUTO,\ | LINUXKPI_PARAM_PASS(SYSCTL_BOOL(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_byte(name, var, perm) \ | #define LINUXKPI_PARAM_byte(name, var, perm) \ | ||||
Show All 35 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, \ | static void LINUXKPI_PARAM_UNINIT(name)(void *data) { kfree(LINUXKPI_PARAM_DESC(name)); } \ | ||||
hselasky: This kfree() looks incorrect. Should be kfree(var); ??? | |||||
LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \ | SYSUNINIT(LINUXKPI_PARAM_UNINIT(name), SI_SUB_KLD, SI_ORDER_MIDDLE, \ | ||||
LINUXKPI_PARAM_DESC(name))) | LINUXKPI_PARAM_UNINIT(name), NULL); \ | ||||
LINUXKPI_PARAM_PASS(SYSCTL_PROC(LINUXKPI_PARAM_PARENT, OID_AUTO, \ | |||||
Not Done Inline Actionsvar must be freed on module unload wulf: var must be freed on module unload | |||||
LINUXKPI_PARAM_NAME(name), \ | |||||
LINUXKPI_PARAM_PERM(perm) | CTLTYPE_STRING | CTLFLAG_MPSAFE, \ | |||||
&(var), 0, lkpi_sysctl_handle_charp, "A", LINUXKPI_PARAM_DESC(name))) | |||||
#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); | ||||
extern int lkpi_sysctl_handle_charp(SYSCTL_HANDLER_ARGS); | |||||
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_ */ |
This kfree() looks incorrect. Should be kfree(var); ???