Skip to content

Commit

Permalink
[PATCH] merge kobject_uevent and kobject_hotplug
Browse files Browse the repository at this point in the history
The distinction between hotplug and uevent does not make sense these
days, netlink events are the default.

udev depends entirely on netlink uevents. Only during early boot and
in initramfs, /sbin/hotplug is needed. So merge the two functions and
provide only one interface without all the options.

The netlink layer got a nice generic interface with named slots
recently, which is probably a better facility to plug events for
subsystem specific events.
Also the new poll() interface to /proc/mounts is a nicer way to
notify about changes than sending events through the core.
The uevents should only be used for driver core related requests to
userspace now.

Signed-off-by: Kay Sievers <kay.sievers@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Kay Sievers authored and Greg Kroah-Hartman committed Jan 5, 2006
1 parent 033b96f commit 5f123fb
Show file tree
Hide file tree
Showing 3 changed files with 102 additions and 206 deletions.
2 changes: 1 addition & 1 deletion drivers/scsi/ipr.c
Original file line number Diff line number Diff line change
Expand Up @@ -2132,7 +2132,7 @@ static void ipr_worker_thread(void *data)
}

spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
kobject_uevent(&ioa_cfg->host->shost_classdev.kobj, KOBJ_CHANGE, NULL);
kobject_hotplug(&ioa_cfg->host->shost_classdev.kobj, KOBJ_CHANGE);
LEAVE;
}

Expand Down
27 changes: 6 additions & 21 deletions include/linux/kobject.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,11 @@ extern u64 hotplug_seqnum;
/* the actions here must match the proper string in lib/kobject_uevent.c */
typedef int __bitwise kobject_action_t;
enum kobject_action {
KOBJ_ADD = (__force kobject_action_t) 0x01, /* add event, for hotplug */
KOBJ_REMOVE = (__force kobject_action_t) 0x02, /* remove event, for hotplug */
KOBJ_CHANGE = (__force kobject_action_t) 0x03, /* a sysfs attribute file has changed */
KOBJ_OFFLINE = (__force kobject_action_t) 0x04, /* offline event for hotplug devices */
KOBJ_ONLINE = (__force kobject_action_t) 0x05, /* online event for hotplug devices */
KOBJ_ADD = (__force kobject_action_t) 0x01, /* exclusive to core */
KOBJ_REMOVE = (__force kobject_action_t) 0x02, /* exclusive to core */
KOBJ_CHANGE = (__force kobject_action_t) 0x03, /* device state change */
KOBJ_OFFLINE = (__force kobject_action_t) 0x04, /* device offline */
KOBJ_ONLINE = (__force kobject_action_t) 0x05, /* device online */
};

struct kobject {
Expand Down Expand Up @@ -262,28 +262,13 @@ int add_hotplug_env_var(char **envp, int num_envp, int *cur_index,
char *buffer, int buffer_size, int *cur_len,
const char *format, ...)
__attribute__((format (printf, 7, 8)));

int kobject_uevent(struct kobject *kobj,
enum kobject_action action,
struct attribute *attr);
int kobject_uevent_atomic(struct kobject *kobj,
enum kobject_action action,
struct attribute *attr);

#else
static inline void kobject_hotplug(struct kobject *kobj, enum kobject_action action) { }

static inline int add_hotplug_env_var(char **envp, int num_envp, int *cur_index,
char *buffer, int buffer_size, int *cur_len,
const char *format, ...)
{ return 0; }
int kobject_uevent(struct kobject *kobj,
enum kobject_action action,
struct attribute *attr)
{ return 0; }
int kobject_uevent_atomic(struct kobject *kobj,
enum kobject_action action,
struct attribute *attr)
{ return 0; }
#endif

#endif /* __KERNEL__ */
Expand Down
Loading

0 comments on commit 5f123fb

Please sign in to comment.