aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--MAINTAINERS6
-rw-r--r--drivers/input/input.c1
-rw-r--r--drivers/s390/crypto/z90main.c1
-rw-r--r--include/linux/kobject.h35
-rw-r--r--include/linux/kobject_uevent.h57
-rw-r--r--init/Kconfig19
-rw-r--r--kernel/sysctl.c4
-rw-r--r--lib/kobject_uevent.c24
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/
1476W: http://www.cse.unsw.edu.au/~neilb/patches/linux-devel/ 1476W: http://www.cse.unsw.edu.au/~neilb/patches/linux-devel/
1477S: Maintained 1477S: Maintained
1478 1478
1479KERNEL EVENT LAYER (KOBJECT_UEVENT)
1480P: Robert Love
1481M: rml@novell.com
1482L: linux-kernel@vger.kernel.org
1483S: Maintained
1484
1485KEXEC 1479KEXEC
1486P: Eric Biederman 1480P: Eric Biederman
1487P: Randy Dunlap 1481P: 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 */
34extern 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 */
33extern u64 hotplug_seqnum; 37extern u64 hotplug_seqnum;
34 38
39/* the actions here must match the proper string in lib/kobject_uevent.c */
40typedef int __bitwise kobject_action_t;
41enum 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
35struct kobject { 51struct 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
245void kobject_hotplug(struct kobject *kobj, enum kobject_action action); 261void kobject_hotplug(struct kobject *kobj, enum kobject_action action);
262
246int add_hotplug_env_var(char **envp, int num_envp, int *cur_index, 263int 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
268int kobject_uevent(struct kobject *kobj,
269 enum kobject_action action,
270 struct attribute *attr);
271int kobject_uevent_atomic(struct kobject *kobj,
272 enum kobject_action action,
273 struct attribute *attr);
274
250#else 275#else
251static inline void kobject_hotplug(struct kobject *kobj, enum kobject_action action) { } 276static inline void kobject_hotplug(struct kobject *kobj, enum kobject_action action) { }
252static inline int add_hotplug_env_var(char **envp, int num_envp, int *cur_index, 277static 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; }
281int kobject_uevent(struct kobject *kobj,
282 enum kobject_action action,
283 struct attribute *attr)
284{ return 0; }
285int 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 */
17extern 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 */
23typedef int __bitwise kobject_action_t;
24enum 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
36int kobject_uevent(struct kobject *kobj,
37 enum kobject_action action,
38 struct attribute *attr);
39int kobject_uevent_atomic(struct kobject *kobj,
40 enum kobject_action action,
41 struct attribute *attr);
42#else
43static inline int kobject_uevent(struct kobject *kobj,
44 enum kobject_action action,
45 struct attribute *attr)
46{
47 return 0;
48}
49static 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
208config 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
227config IKCONFIG 208config 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
84extern char modprobe_path[]; 85extern char modprobe_path[];
85#endif 86#endif
86#ifdef CONFIG_HOTPLUG
87extern char hotplug_path[];
88#endif
89#ifdef CONFIG_CHR_DEV_SG 87#ifdef CONFIG_CHR_DEV_SG
90extern int sg_big_buff; 88extern 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)
29char hotplug_path[HOTPLUG_PATH_LEN] = "/sbin/hotplug";
30u64 hotplug_seqnum;
31static DEFINE_SPINLOCK(sequence_lock);
32
30static char *action_to_string(enum kobject_action action) 33static 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
54static struct sock *uevent_sock; 55static struct sock *uevent_sock;
55 56
56/** 57/**
@@ -168,21 +169,6 @@ static int __init kobject_uevent_init(void)
168 169
169postcore_initcall(kobject_uevent_init); 170postcore_initcall(kobject_uevent_init);
170 171
171#else
172static 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
182char hotplug_path[HOTPLUG_PATH_LEN] = "/sbin/hotplug";
183u64 hotplug_seqnum;
184static 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 *