|| ||Steven Dake <email@example.com>|
|| ||[PATCH] udev enhancements to use kernel event queue|
|| ||Thu, 12 Jun 2003 12:10:48 -0700|
I have been looking at the udev idea that Greg KH has developed.
Userland device enumeration definately is the way to go, however, there
are some problems with using /sbin/hotplug to transmit device
1) performance of fork/exec with lots of devices is very poor
2) lots of processes can be forked with no policy to control how many
are forked at once potentially leading to OOM
3) /sbin/hotplug events can occur out of order, eg: remove event occurs,
/sbin/hotplug sleeps waiting for something, insert event occurs and
completes immediately. Then the remove event completes, after the
insert, resulting in out-of-order completion and a broken /dev. I have
seen this several times with udev.
4) early device enumeration (character devices, etc) are missed because
/sbin/hotplug is not available during early device init.
To solve these problems, I've developed a driver and some minor
modifications to the lib/kobject.c to queue these events and allow a
user space program to read the events at its leisure. The driver
supports poll/select for effecient use of the processor.
The feature is called the System Device Enumeration Event Queue. I've
attached a tarball which includes udev-0.1 modified to use the SDEQ, a
kernel patch against linux 2.5.70 that implements the SDEQ, and a
test/library that tests the SDEQ functionality.
To jump right in try these steps:
1) apply the SDEQ patch
2) configure CONFIG_SDEQ on in config/general
3) make in the udev-0.1 directory
4) mkdir /newdevs (this is where the devices are enumerated)
5) reboot with new kernel
6) mount sysfs in /sys
7) mknod /dev/sdeq c 10 222 (this creates the device node that is used
to communicate with the SDEQ)
7) run ./udev in udev-0.1 directory
Look in /newdevs for enumerated devices.
you can use fdisk on a disk device to see how dynamic device
If it works for you or doesn't or you like the idea or don't, I've love
to hear about it