diff options
-rw-r--r-- | MAINTAINERS | 6 | ||||
-rw-r--r-- | drivers/input/input.c | 1 | ||||
-rw-r--r-- | drivers/s390/crypto/z90main.c | 1 | ||||
-rw-r--r-- | include/linux/kobject.h | 35 | ||||
-rw-r--r-- | include/linux/kobject_uevent.h | 57 | ||||
-rw-r--r-- | init/Kconfig | 19 | ||||
-rw-r--r-- | kernel/sysctl.c | 4 | ||||
-rw-r--r-- | lib/kobject_uevent.c | 24 |
8 files changed, 40 insertions, 107 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 6af683025ae0..b49a4ad3b872 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -1476,12 +1476,6 @@ W: http://nfs.sourceforge.net/ | |||
1476 | W: http://www.cse.unsw.edu.au/~neilb/patches/linux-devel/ | 1476 | W: http://www.cse.unsw.edu.au/~neilb/patches/linux-devel/ |
1477 | S: Maintained | 1477 | S: Maintained |
1478 | 1478 | ||
1479 | KERNEL EVENT LAYER (KOBJECT_UEVENT) | ||
1480 | P: Robert Love | ||
1481 | M: rml@novell.com | ||
1482 | L: linux-kernel@vger.kernel.org | ||
1483 | S: Maintained | ||
1484 | |||
1485 | KEXEC | 1479 | KEXEC |
1486 | P: Eric Biederman | 1480 | P: Eric Biederman |
1487 | P: Randy Dunlap | 1481 | P: Randy Dunlap |
diff --git a/drivers/input/input.c b/drivers/input/input.c index bdd2a7fc268d..43b49ccd7dad 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c | |||
@@ -18,7 +18,6 @@ | |||
18 | #include <linux/random.h> | 18 | #include <linux/random.h> |
19 | #include <linux/major.h> | 19 | #include <linux/major.h> |
20 | #include <linux/proc_fs.h> | 20 | #include <linux/proc_fs.h> |
21 | #include <linux/kobject_uevent.h> | ||
22 | #include <linux/interrupt.h> | 21 | #include <linux/interrupt.h> |
23 | #include <linux/poll.h> | 22 | #include <linux/poll.h> |
24 | #include <linux/device.h> | 23 | #include <linux/device.h> |
diff --git a/drivers/s390/crypto/z90main.c b/drivers/s390/crypto/z90main.c index 4010f2bb85af..790fcbb74b43 100644 --- a/drivers/s390/crypto/z90main.c +++ b/drivers/s390/crypto/z90main.c | |||
@@ -34,7 +34,6 @@ | |||
34 | #include <linux/miscdevice.h> | 34 | #include <linux/miscdevice.h> |
35 | #include <linux/module.h> | 35 | #include <linux/module.h> |
36 | #include <linux/moduleparam.h> | 36 | #include <linux/moduleparam.h> |
37 | #include <linux/kobject_uevent.h> | ||
38 | #include <linux/proc_fs.h> | 37 | #include <linux/proc_fs.h> |
39 | #include <linux/syscalls.h> | 38 | #include <linux/syscalls.h> |
40 | #include "z90crypt.h" | 39 | #include "z90crypt.h" |
diff --git a/include/linux/kobject.h b/include/linux/kobject.h index 7f7403aa4a41..baf5251d9f63 100644 --- a/include/linux/kobject.h +++ b/include/linux/kobject.h | |||
@@ -23,15 +23,31 @@ | |||
23 | #include <linux/spinlock.h> | 23 | #include <linux/spinlock.h> |
24 | #include <linux/rwsem.h> | 24 | #include <linux/rwsem.h> |
25 | #include <linux/kref.h> | 25 | #include <linux/kref.h> |
26 | #include <linux/kobject_uevent.h> | ||
27 | #include <linux/kernel.h> | 26 | #include <linux/kernel.h> |
28 | #include <asm/atomic.h> | 27 | #include <asm/atomic.h> |
29 | 28 | ||
30 | #define KOBJ_NAME_LEN 20 | 29 | #define KOBJ_NAME_LEN 20 |
31 | 30 | ||
31 | #define HOTPLUG_PATH_LEN 256 | ||
32 | |||
33 | /* path to the userspace helper executed on an event */ | ||
34 | extern char hotplug_path[]; | ||
35 | |||
32 | /* counter to tag the hotplug event, read only except for the kobject core */ | 36 | /* counter to tag the hotplug event, read only except for the kobject core */ |
33 | extern u64 hotplug_seqnum; | 37 | extern u64 hotplug_seqnum; |
34 | 38 | ||
39 | /* the actions here must match the proper string in lib/kobject_uevent.c */ | ||
40 | typedef int __bitwise kobject_action_t; | ||
41 | enum kobject_action { | ||
42 | KOBJ_ADD = (__force kobject_action_t) 0x01, /* add event, for hotplug */ | ||
43 | KOBJ_REMOVE = (__force kobject_action_t) 0x02, /* remove event, for hotplug */ | ||
44 | KOBJ_CHANGE = (__force kobject_action_t) 0x03, /* a sysfs attribute file has changed */ | ||
45 | KOBJ_MOUNT = (__force kobject_action_t) 0x04, /* mount event for block devices */ | ||
46 | KOBJ_UMOUNT = (__force kobject_action_t) 0x05, /* umount event for block devices */ | ||
47 | KOBJ_OFFLINE = (__force kobject_action_t) 0x06, /* offline event for hotplug devices */ | ||
48 | KOBJ_ONLINE = (__force kobject_action_t) 0x07, /* online event for hotplug devices */ | ||
49 | }; | ||
50 | |||
35 | struct kobject { | 51 | struct kobject { |
36 | const char * k_name; | 52 | const char * k_name; |
37 | char name[KOBJ_NAME_LEN]; | 53 | char name[KOBJ_NAME_LEN]; |
@@ -243,16 +259,33 @@ extern void subsys_remove_file(struct subsystem * , struct subsys_attribute *); | |||
243 | 259 | ||
244 | #ifdef CONFIG_HOTPLUG | 260 | #ifdef CONFIG_HOTPLUG |
245 | void kobject_hotplug(struct kobject *kobj, enum kobject_action action); | 261 | void kobject_hotplug(struct kobject *kobj, enum kobject_action action); |
262 | |||
246 | int add_hotplug_env_var(char **envp, int num_envp, int *cur_index, | 263 | int add_hotplug_env_var(char **envp, int num_envp, int *cur_index, |
247 | char *buffer, int buffer_size, int *cur_len, | 264 | char *buffer, int buffer_size, int *cur_len, |
248 | const char *format, ...) | 265 | const char *format, ...) |
249 | __attribute__((format (printf, 7, 8))); | 266 | __attribute__((format (printf, 7, 8))); |
267 | |||
268 | int kobject_uevent(struct kobject *kobj, | ||
269 | enum kobject_action action, | ||
270 | struct attribute *attr); | ||
271 | int kobject_uevent_atomic(struct kobject *kobj, | ||
272 | enum kobject_action action, | ||
273 | struct attribute *attr); | ||
274 | |||
250 | #else | 275 | #else |
251 | static inline void kobject_hotplug(struct kobject *kobj, enum kobject_action action) { } | 276 | static inline void kobject_hotplug(struct kobject *kobj, enum kobject_action action) { } |
252 | static inline int add_hotplug_env_var(char **envp, int num_envp, int *cur_index, | 277 | static inline int add_hotplug_env_var(char **envp, int num_envp, int *cur_index, |
253 | char *buffer, int buffer_size, int *cur_len, | 278 | char *buffer, int buffer_size, int *cur_len, |
254 | const char *format, ...) | 279 | const char *format, ...) |
255 | { return 0; } | 280 | { return 0; } |
281 | int kobject_uevent(struct kobject *kobj, | ||
282 | enum kobject_action action, | ||
283 | struct attribute *attr) | ||
284 | { return 0; } | ||
285 | int kobject_uevent_atomic(struct kobject *kobj, | ||
286 | enum kobject_action action, | ||
287 | struct attribute *attr) | ||
288 | { return 0; } | ||
256 | #endif | 289 | #endif |
257 | 290 | ||
258 | #endif /* __KERNEL__ */ | 291 | #endif /* __KERNEL__ */ |
diff --git a/include/linux/kobject_uevent.h b/include/linux/kobject_uevent.h deleted file mode 100644 index aa664fe7e561..000000000000 --- a/include/linux/kobject_uevent.h +++ /dev/null | |||
@@ -1,57 +0,0 @@ | |||
1 | /* | ||
2 | * kobject_uevent.h - list of kobject user events that can be generated | ||
3 | * | ||
4 | * Copyright (C) 2004 IBM Corp. | ||
5 | * Copyright (C) 2004 Greg Kroah-Hartman <greg@kroah.com> | ||
6 | * | ||
7 | * This file is released under the GPLv2. | ||
8 | * | ||
9 | */ | ||
10 | |||
11 | #ifndef _KOBJECT_EVENT_H_ | ||
12 | #define _KOBJECT_EVENT_H_ | ||
13 | |||
14 | #define HOTPLUG_PATH_LEN 256 | ||
15 | |||
16 | /* path to the hotplug userspace helper executed on an event */ | ||
17 | extern char hotplug_path[]; | ||
18 | |||
19 | /* | ||
20 | * If you add an action here, you must also add the proper string to the | ||
21 | * lib/kobject_uevent.c file. | ||
22 | */ | ||
23 | typedef int __bitwise kobject_action_t; | ||
24 | enum kobject_action { | ||
25 | KOBJ_ADD = (__force kobject_action_t) 0x01, /* add event, for hotplug */ | ||
26 | KOBJ_REMOVE = (__force kobject_action_t) 0x02, /* remove event, for hotplug */ | ||
27 | KOBJ_CHANGE = (__force kobject_action_t) 0x03, /* a sysfs attribute file has changed */ | ||
28 | KOBJ_MOUNT = (__force kobject_action_t) 0x04, /* mount event for block devices */ | ||
29 | KOBJ_UMOUNT = (__force kobject_action_t) 0x05, /* umount event for block devices */ | ||
30 | KOBJ_OFFLINE = (__force kobject_action_t) 0x06, /* offline event for hotplug devices */ | ||
31 | KOBJ_ONLINE = (__force kobject_action_t) 0x07, /* online event for hotplug devices */ | ||
32 | }; | ||
33 | |||
34 | |||
35 | #ifdef CONFIG_KOBJECT_UEVENT | ||
36 | int kobject_uevent(struct kobject *kobj, | ||
37 | enum kobject_action action, | ||
38 | struct attribute *attr); | ||
39 | int kobject_uevent_atomic(struct kobject *kobj, | ||
40 | enum kobject_action action, | ||
41 | struct attribute *attr); | ||
42 | #else | ||
43 | static inline int kobject_uevent(struct kobject *kobj, | ||
44 | enum kobject_action action, | ||
45 | struct attribute *attr) | ||
46 | { | ||
47 | return 0; | ||
48 | } | ||
49 | static inline int kobject_uevent_atomic(struct kobject *kobj, | ||
50 | enum kobject_action action, | ||
51 | struct attribute *attr) | ||
52 | { | ||
53 | return 0; | ||
54 | } | ||
55 | #endif | ||
56 | |||
57 | #endif | ||
diff --git a/init/Kconfig b/init/Kconfig index 9fc0759fa942..0de8b7765ae4 100644 --- a/init/Kconfig +++ b/init/Kconfig | |||
@@ -205,25 +205,6 @@ config HOTPLUG | |||
205 | modules require HOTPLUG functionality, but a module built | 205 | modules require HOTPLUG functionality, but a module built |
206 | outside the kernel tree does. Such modules require Y here. | 206 | outside the kernel tree does. Such modules require Y here. |
207 | 207 | ||
208 | config KOBJECT_UEVENT | ||
209 | bool "Kernel Userspace Events" if EMBEDDED | ||
210 | depends on NET | ||
211 | default y | ||
212 | help | ||
213 | This option enables the kernel userspace event layer, which is a | ||
214 | simple mechanism for kernel-to-user communication over a netlink | ||
215 | socket. | ||
216 | The goal of the kernel userspace events layer is to provide a simple | ||
217 | and efficient events system, that notifies userspace about kobject | ||
218 | state changes. This will enable applications to just listen for | ||
219 | events instead of polling system devices and files. | ||
220 | Hotplug events (kobject addition and removal) are also available on | ||
221 | the netlink socket in addition to the execution of /sbin/hotplug if | ||
222 | CONFIG_HOTPLUG is enabled. | ||
223 | |||
224 | Say Y, unless you are building a system requiring minimal memory | ||
225 | consumption. | ||
226 | |||
227 | config IKCONFIG | 208 | config IKCONFIG |
228 | bool "Kernel .config support" | 209 | bool "Kernel .config support" |
229 | ---help--- | 210 | ---help--- |
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index b53115b882e1..6a51e25d4466 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <linux/smp_lock.h> | 31 | #include <linux/smp_lock.h> |
32 | #include <linux/init.h> | 32 | #include <linux/init.h> |
33 | #include <linux/kernel.h> | 33 | #include <linux/kernel.h> |
34 | #include <linux/kobject.h> | ||
34 | #include <linux/net.h> | 35 | #include <linux/net.h> |
35 | #include <linux/sysrq.h> | 36 | #include <linux/sysrq.h> |
36 | #include <linux/highuid.h> | 37 | #include <linux/highuid.h> |
@@ -83,9 +84,6 @@ static int ngroups_max = NGROUPS_MAX; | |||
83 | #ifdef CONFIG_KMOD | 84 | #ifdef CONFIG_KMOD |
84 | extern char modprobe_path[]; | 85 | extern char modprobe_path[]; |
85 | #endif | 86 | #endif |
86 | #ifdef CONFIG_HOTPLUG | ||
87 | extern char hotplug_path[]; | ||
88 | #endif | ||
89 | #ifdef CONFIG_CHR_DEV_SG | 87 | #ifdef CONFIG_CHR_DEV_SG |
90 | extern int sg_big_buff; | 88 | extern int sg_big_buff; |
91 | #endif | 89 | #endif |
diff --git a/lib/kobject_uevent.c b/lib/kobject_uevent.c index 3ab375411e38..1f90eea7eebc 100644 --- a/lib/kobject_uevent.c +++ b/lib/kobject_uevent.c | |||
@@ -19,14 +19,17 @@ | |||
19 | #include <linux/skbuff.h> | 19 | #include <linux/skbuff.h> |
20 | #include <linux/netlink.h> | 20 | #include <linux/netlink.h> |
21 | #include <linux/string.h> | 21 | #include <linux/string.h> |
22 | #include <linux/kobject_uevent.h> | ||
23 | #include <linux/kobject.h> | 22 | #include <linux/kobject.h> |
24 | #include <net/sock.h> | 23 | #include <net/sock.h> |
25 | 24 | ||
26 | #define BUFFER_SIZE 1024 /* buffer for the hotplug env */ | 25 | #define BUFFER_SIZE 1024 /* buffer for the hotplug env */ |
27 | #define NUM_ENVP 32 /* number of env pointers */ | 26 | #define NUM_ENVP 32 /* number of env pointers */ |
28 | 27 | ||
29 | #if defined(CONFIG_KOBJECT_UEVENT) || defined(CONFIG_HOTPLUG) | 28 | #if defined(CONFIG_HOTPLUG) |
29 | char hotplug_path[HOTPLUG_PATH_LEN] = "/sbin/hotplug"; | ||
30 | u64 hotplug_seqnum; | ||
31 | static DEFINE_SPINLOCK(sequence_lock); | ||
32 | |||
30 | static char *action_to_string(enum kobject_action action) | 33 | static char *action_to_string(enum kobject_action action) |
31 | { | 34 | { |
32 | switch (action) { | 35 | switch (action) { |
@@ -48,9 +51,7 @@ static char *action_to_string(enum kobject_action action) | |||
48 | return NULL; | 51 | return NULL; |
49 | } | 52 | } |
50 | } | 53 | } |
51 | #endif | ||
52 | 54 | ||
53 | #ifdef CONFIG_KOBJECT_UEVENT | ||
54 | static struct sock *uevent_sock; | 55 | static struct sock *uevent_sock; |
55 | 56 | ||
56 | /** | 57 | /** |
@@ -168,21 +169,6 @@ static int __init kobject_uevent_init(void) | |||
168 | 169 | ||
169 | postcore_initcall(kobject_uevent_init); | 170 | postcore_initcall(kobject_uevent_init); |
170 | 171 | ||
171 | #else | ||
172 | static inline int send_uevent(const char *signal, const char *obj, | ||
173 | char **envp, int gfp_mask) | ||
174 | { | ||
175 | return 0; | ||
176 | } | ||
177 | |||
178 | #endif /* CONFIG_KOBJECT_UEVENT */ | ||
179 | |||
180 | |||
181 | #ifdef CONFIG_HOTPLUG | ||
182 | char hotplug_path[HOTPLUG_PATH_LEN] = "/sbin/hotplug"; | ||
183 | u64 hotplug_seqnum; | ||
184 | static DEFINE_SPINLOCK(sequence_lock); | ||
185 | |||
186 | /** | 172 | /** |
187 | * kobject_hotplug - notify userspace by executing /sbin/hotplug | 173 | * kobject_hotplug - notify userspace by executing /sbin/hotplug |
188 | * | 174 | * |