aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/moduleparam.h
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2010-08-12 01:04:19 -0400
committerRusty Russell <rusty@rustcorp.com.au>2010-08-11 09:34:20 -0400
commit907b29eb41aa604477a655bff7345731da94514d (patch)
tree12a7142ffa81a65da204384dfa26365d30803735 /include/linux/moduleparam.h
parent914dcaa84c53f2c3efa6016efcae13fd92a8a17c (diff)
param: locking for kernel parameters
There may be cases (most obviously, sysfs-writable charp parameters) where a module needs to prevent sysfs access to parameters. Rather than express this in terms of a big lock, the functions are expressed in terms of what they protect against. This is clearer, esp. if the implementation changes to a module-level or even param-level lock. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Reviewed-by: Takashi Iwai <tiwai@suse.de> Tested-by: Phil Carmody <ext-phil.2.carmody@nokia.com>
Diffstat (limited to 'include/linux/moduleparam.h')
-rw-r--r--include/linux/moduleparam.h56
1 files changed, 56 insertions, 0 deletions
diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h
index 6d48831fe7d2..ca74a3402d63 100644
--- a/include/linux/moduleparam.h
+++ b/include/linux/moduleparam.h
@@ -130,6 +130,62 @@ __check_old_set_param(int (*oldset)(const char *, struct kernel_param *))
130#define module_param(name, type, perm) \ 130#define module_param(name, type, perm) \
131 module_param_named(name, name, type, perm) 131 module_param_named(name, name, type, perm)
132 132
133/**
134 * kparam_block_sysfs_write - make sure a parameter isn't written via sysfs.
135 * @name: the name of the parameter
136 *
137 * There's no point blocking write on a paramter that isn't writable via sysfs!
138 */
139#define kparam_block_sysfs_write(name) \
140 do { \
141 BUG_ON(!(__param_##name.perm & 0222)); \
142 __kernel_param_lock(); \
143 } while (0)
144
145/**
146 * kparam_unblock_sysfs_write - allows sysfs to write to a parameter again.
147 * @name: the name of the parameter
148 */
149#define kparam_unblock_sysfs_write(name) \
150 do { \
151 BUG_ON(!(__param_##name.perm & 0222)); \
152 __kernel_param_unlock(); \
153 } while (0)
154
155/**
156 * kparam_block_sysfs_read - make sure a parameter isn't read via sysfs.
157 * @name: the name of the parameter
158 *
159 * This also blocks sysfs writes.
160 */
161#define kparam_block_sysfs_read(name) \
162 do { \
163 BUG_ON(!(__param_##name.perm & 0444)); \
164 __kernel_param_lock(); \
165 } while (0)
166
167/**
168 * kparam_unblock_sysfs_read - allows sysfs to read a parameter again.
169 * @name: the name of the parameter
170 */
171#define kparam_unblock_sysfs_read(name) \
172 do { \
173 BUG_ON(!(__param_##name.perm & 0444)); \
174 __kernel_param_unlock(); \
175 } while (0)
176
177#ifdef CONFIG_SYSFS
178extern void __kernel_param_lock(void);
179extern void __kernel_param_unlock(void);
180#else
181static inline void __kernel_param_lock(void)
182{
183}
184static inline void __kernel_param_unlock(void)
185{
186}
187#endif
188
133#ifndef MODULE 189#ifndef MODULE
134/** 190/**
135 * core_param - define a historical core kernel parameter. 191 * core_param - define a historical core kernel parameter.