On Monday 28 May 2007 4:48 am, Michael-Luke Jones wrote:
I'd love to write up documentation on this if anybody can tell me what it
should say. :)
And for block devices ala:
https://bugs.launchpad.net/ubuntu/dapper/+source/initramfs-tools/+bug/74004https://issues.rpath.com/browse/RPL-1350
The first use could be "mount" or open of the block device under /dev. So now
you have the mount and open syscalls returning -ENOFIRMWARE. This is not a
small change.
Userspace doesn't have to register a hotplug handler: /sys/hotplug is the
default and if there is one in initramfs it should get called. You shouldn't
have to wait for init to run for this to be the case.
I believe the initramfs cpio archive used to get extracted just before the
attempt to exec /init out of it, and that it was moved to much earlier in the
boot process so that firmware loading could be done out of it for statically
linked drivers.
Look at do_basic_setup() in init/main.c: notice how usermodehelper_init() gets
called right before driver_init(). Ask yourself: "why did it do that"?
Notice how rest_init() forks the first kernel thread (PID 1) to run
kernel_init(), and then becomes PID 0 (the idle task). So from kernel_init()
it's ok to spawn all the new tasks we want because they can't take any
reserved PIDs.
Because of course every userspace utility in the world will immediately be
rewritten to provide clear and informative error messages for this race
condition corner case.
Somehow, I can't bring myself to believe this.
Why would you make two different code paths for module load and first use?
Happy to. I'm just trying to figure out what the correct behavior is so I can
document it.
Rob
-